src/Rope.hh
author saiam
Mon, 08 Dec 2008 22:33:24 +0000
changeset 320 cb33eca69b29
parent 305 56799ec8d7be
child 322 f94a5c192097
permissions -rw-r--r--
Updated PhysicsObject documentation
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:
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    29
    // the owner
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
305
56799ec8d7be Weapon damage and some other stuff
ekku
parents: 283
diff changeset
    32
    // possible pivot point (rope is stuck on a player)
56799ec8d7be Weapon damage and some other stuff
ekku
parents: 283
diff changeset
    33
    PhysicsObject *pivotObject;
56799ec8d7be Weapon damage and some other stuff
ekku
parents: 283
diff changeset
    34
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    35
    // How long is the rope in its unstrected state
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    36
    float length;
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    37
        
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    38
    // basic state
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    39
    RopeState state;
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    40
        
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    41
protected:
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
     * Attach the rope, so disable the PhysicsObject and change state
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    44
     * @param collisionPoint Where the rope has hit the ground.
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    45
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    46
    virtual void onCollision (Vector collisionPoint, PhysicsObject *other);
241
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 235
diff changeset
    47
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    48
    /*
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    49
     * 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
    50
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    51
    virtual float getPivotForce (PhysicsObject *bob);
241
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 235
diff changeset
    52
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    53
public:
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    54
    Rope(Player &player);
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    55
        
273
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
     * Throw the rope, so it flies up and away: o._-*
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
    void throwRope (void);
252
25054ce94d07 Rope is released if the ground on the pivot point is destroyed.
ekku
parents: 248
diff changeset
    60
273
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
     * 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
    63
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    64
    void release (void);
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
    /*
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    67
     * Climb up/down the rope
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
    void changeLength (float delta);
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
    /*
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    72
     * Current state
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    73
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    74
    RopeState getState (void);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    75
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
     * Current length
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
    float getLength (void);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    80
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    81
    /*
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    82
     * For use by NetworkClient
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
    void updateState (RopeState state, Vector position, Vector velocity, float length);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    85
    void updateLength (float length);
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
    virtual void tick (TimeMS dt);
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
    /*
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    90
     * Just draws it
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    91
     */ 
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    92
    virtual void draw (Graphics *c, PixelCoordinate camera);
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    93
};
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    94
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    95
#endif