src/Rope.hh
author terom
Mon, 08 Dec 2008 00:16:43 +0000
changeset 274 c35307e8645c
parent 273 eeb699e1d908
child 283 7540b0859579
permissions -rw-r--r--
add comments, move addPlayer/removePlayer to Player.cc, and refactor Network code to inherit from NetworkObject
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
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    12
enum RopeState {
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    13
    ROPE_FOLDED, 
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    14
    ROPE_FLYING, 
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    15
    ROPE_FIXED 
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    16
};
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    17
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    18
class Rope : public PhysicsObject {
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    19
private:
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    20
    // the owner
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    21
    Player &player;
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    22
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    23
    // How long is the rope in its unstrected state
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    24
    float length;
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    25
        
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    26
    // basic state
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    27
    RopeState state;
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    28
        
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    29
protected:
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    30
    /**
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    31
     * Attach the rope, so disable the PhysicsObject and change state
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    32
     * @param collisionPoint Where the rope has hit the ground.
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    33
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    34
    virtual void onCollision (Vector collisionPoint, PhysicsObject *other);
241
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 235
diff changeset
    35
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    36
    /*
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    37
     * If the rope is currently longer than length, this returns ROPE_FORCE, else 0
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    38
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    39
    virtual float getPivotForce (PhysicsObject *bob);
241
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 235
diff changeset
    40
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    41
public:
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    42
    Rope(Player &player);
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    43
        
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    44
    /*
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    45
     * Throw the rope, so it flies up and away: o._-*
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    46
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    47
    void throwRope (void);
252
25054ce94d07 Rope is released if the ground on the pivot point is destroyed.
ekku
parents: 248
diff changeset
    48
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    49
    /*
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    50
     * 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
    51
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    52
    void release (void);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    53
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    54
    /*
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    55
     * Climb up/down the rope
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    56
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    57
    void changeLength (float delta);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    58
        
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    59
    /*
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    60
     * Current state
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    61
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    62
    RopeState getState (void);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    63
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    64
    /*
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    65
     * Current length
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    66
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    67
    float getLength (void);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    68
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    69
    /*
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    70
     * For use by NetworkClient
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    71
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    72
    void updateState (RopeState state, Vector position, Vector velocity, float length);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    73
    void updateLength (float length);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    74
        
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    75
    virtual void tick (TimeMS dt);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    76
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    77
    /*
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    78
     * Just draws it
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    79
     */ 
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    80
    virtual void draw (Graphics *c, PixelCoordinate camera);
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    81
};
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    82
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    83
#endif