src/Rope.hh
author terom
Mon, 08 Dec 2008 23:21:49 +0000
changeset 328 51d644c8d5a2
parent 322 f94a5c192097
child 412 721c60072091
permissions -rw-r--r--
fix player-pivoted rope
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     1
#ifndef ROPE_HH
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     2
#define ROPE_HH
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     3
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     4
// Pre-declarations since rope wants to know the Player
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     5
// and the Player wants to know the rope.
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     6
class Rope;
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     7
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     8
#include "Player.hh"
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
     9
#include "PhysicsObject.hh"
233
ff4ecea83cf5 start using CL_ResourceManager, change most draw methods to take a Graphics*, implment even better input handling, and draw weapon names
terom
parents: 231
diff changeset
    10
#include "GraphicsPointer.hh"
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    11
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    12
/**
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    13
 * The rope can be in one of three states...
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    14
 *
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    15
 * @see Rope
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    16
 */
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    17
enum RopeState {
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    18
    ROPE_FOLDED,    //<<< The rope is folded, out of sight, and not in use
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    19
    ROPE_FLYING,    //<<< The rope is flying through the air as a projectile
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    20
    ROPE_FIXED      //<<< The rope is attached to something
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    21
};
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    22
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    23
/**
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    24
 * A rope is a PhysicsObject that can be thrown, whereupon it then flies until it hits something, whereupon
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    25
 * it attaches to that, and sets itself as the player's pivot.
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    26
 */
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    27
class Rope : public PhysicsObject {
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    28
private:
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    29
    /** the owner */
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    30
    Player &player;
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    31
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    32
    /** How long is the rope in its unstreched state */
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    33
    float length;
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    34
        
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    35
    /** Current state */
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    36
    RopeState state;
322
f94a5c192097 Rope fixing
ekku
parents: 305
diff changeset
    37
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    38
protected:
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    39
    /**
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    40
     * Attach the rope, so disable the PhysicsObject and change state
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    41
     * @param collisionPoint Where the rope has hit the ground.
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    42
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    43
    virtual void onCollision (Vector collisionPoint, PhysicsObject *other);
241
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 235
diff changeset
    44
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    45
public:
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    46
    Rope(Player &player);
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    47
        
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    48
    /**
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    49
     * Throw the rope, so it flies up and away: o._-*
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    50
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    51
    void throwRope (void);
252
25054ce94d07 Rope is released if the ground on the pivot point is destroyed.
ekku
parents: 248
diff changeset
    52
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    53
    /**
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    54
     * Release the rope, so if it's currently fixed or flying, then fold it 
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    55
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    56
    void release (void);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    57
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    58
    /**
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    59
     * Climb up/down the rope
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    60
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    61
    void changeLength (float delta);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    62
        
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    63
    /**
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    64
     * Current state
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    65
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    66
    RopeState getState (void);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    67
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    68
    /**
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    69
     * Current length
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    70
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    71
    float getLength (void);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    72
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    73
    /**
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    74
     * If this Rope's player is pivoted to another player, return that player-pivot, else return NULL
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    75
     */
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    76
    Player *getPivotPlayer (void);
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    77
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    78
    /*
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    79
     * For use by NetworkClient
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    80
     */
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    81
    void updateState (RopeState state, Vector position, Vector velocity, float length, Player *pivot_player);
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    82
    void updateLength (float length);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    83
        
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    84
    virtual void tick (TimeMS dt);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    85
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    86
    /*
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    87
     * Just draws it
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    88
     */ 
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    89
    virtual void draw (Graphics *c, PixelCoordinate camera);
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    90
};
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    91
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    92
#endif