src/Rope.cc
author ekku
Sat, 06 Dec 2008 21:12:30 +0000
changeset 229 355e46effa41
parent 228 dbc1bb7a98b5
child 231 5085764e1dbb
permissions -rw-r--r--
Rope works
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     1
#include "Player.hh"
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     2
#include "Rope.hh"      
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     3
#include "Engine.hh"
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     4
#include <math.h>
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     5
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     6
Rope::Rope(Player &climber) : PhysicsObject(climber.state.world, PLAYER_MASS, Vector(0,0), Vector(0,0), false), pl(climber), rs(FOLDED) {
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     7
    std::vector<Vector> shape(4);
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     8
    shape[0] = Vector(-1, -1);
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     9
    shape[1] = Vector(-1, 1);
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    10
    shape[2] = Vector(1, 1);
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    11
    shape[3] = Vector(1, -1);
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    12
    setShape(shape);
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    13
}
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    14
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    15
void Rope::shoot(void) {
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    16
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    17
    this->rs = FLYING;
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    18
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    19
    this->length = 100;
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    20
    this->position = pl.getPosition();
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    21
    Vector direction = pl.getFacing() ? Vector( cos(pl.getAim()), -sin(pl.getAim()) ) 
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    22
                                      : Vector( -cos(pl.getAim()), -sin(pl.getAim()) );
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    23
    this->velocity = pl.getVelocity() + direction*500;
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    24
    this->inAir = true;
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    25
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    26
    enable();
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    27
    pl.state.addRope(this);
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    28
}
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    29
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    30
void Rope::onCollision() {
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    31
    this->rs = FIXED;
228
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    32
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    33
    // stop movement
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    34
    disable();
228
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    35
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    36
    // set player's pivot
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    37
    pl.setPivot(this);
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    38
}
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    39
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    40
void Rope::release (void) {
229
355e46effa41 Rope works
ekku
parents: 228
diff changeset
    41
355e46effa41 Rope works
ekku
parents: 228
diff changeset
    42
    if (this->rs == FLYING)
355e46effa41 Rope works
ekku
parents: 228
diff changeset
    43
        disable();
355e46effa41 Rope works
ekku
parents: 228
diff changeset
    44
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    45
    // TODO make it fly first and fold only 
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    46
    // after it's close to the player
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    47
    this->rs = FOLDED;
228
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    48
    
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    49
    // player doesn't have a pivot anymore
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    50
    pl.setPivot(NULL);
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    51
}
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    52
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    53
RopeState Rope::getState (void) {
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    54
    return this->rs;
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    55
}
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    56
228
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    57
float Rope::getPivotForce (PhysicsObject *bob) {
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    58
    if ( (this->position - pl.getPosition()).length() >= this->length)
229
355e46effa41 Rope works
ekku
parents: 228
diff changeset
    59
        return 3500;
228
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    60
    else
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    61
        return 0;
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    62
}
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    63
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    64
void Rope::draw (CL_GraphicContext *gc) const {
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    65
    gc->draw_line((int)(this->pl.getPosition().x), (int)(this->pl.getPosition().y)
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    66
        , (int)(this->position.x), (int)(this->position.y), CL_Color::black);
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    67
}
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    68