src/Rope.hh
author nireco
Sun, 07 Dec 2008 18:23:18 +0000
changeset 248 e40ef56dc62c
parent 241 e95b1602d836
child 252 25054ce94d07
permissions -rw-r--r--
scrolling looks like it works
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 {
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    19
    private:
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    20
        // the owner
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    21
        Player &player;
228
dbc1bb7a98b5 Rope has forces
ekku
parents: 225
diff changeset
    22
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    23
        // How long is the rope in its unstrected state
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    24
        float length;
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    25
        
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    26
        // basic state
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    27
        RopeState state;
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    28
        
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    29
    protected:
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    30
        /*
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    31
         * Attach the rope, so disable the PhysicsObject and change state
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    32
         */
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    33
        virtual void onCollision (void);
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    34
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    35
        /*
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    36
         * If the rope is currently longer than length, this returns ROPE_FORCE, else 0
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    37
         */
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    38
        virtual float getPivotForce (PhysicsObject *bob);
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    39
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    40
    public:
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    41
        Rope(Player &player);
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    42
        
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    43
        /*
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    44
         * Throw the rope, so it flies up and away: o._-*
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    45
         */
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    46
        void throwRope (void);
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    47
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    48
        /*
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    49
         * Release the rope, so if it's currently fixed or flying, then fold it 
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    50
         */
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    51
        void release (void);
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    52
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    53
        /*
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    54
         * Climb up/down the rope
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    55
         */
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    56
        void changeLength (float delta);
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    57
        
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    58
        /*
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    59
         * Current state
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    60
         */
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    61
        RopeState getState (void);
241
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 235
diff changeset
    62
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 235
diff changeset
    63
        /*
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 235
diff changeset
    64
         * Current length
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 235
diff changeset
    65
         */
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 235
diff changeset
    66
        float getLength (void);
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 235
diff changeset
    67
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 235
diff changeset
    68
        /*
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 235
diff changeset
    69
         * For use by NetworkClient
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 235
diff changeset
    70
         */
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 235
diff changeset
    71
        void updateState (RopeState state, Vector position, Vector velocity, float length);
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 235
diff changeset
    72
        void updateLength (float length);
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    73
        
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    74
        /*
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    75
         * Just draws it
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    76
         */ 
248
e40ef56dc62c scrolling looks like it works
nireco
parents: 241
diff changeset
    77
        virtual void draw (Graphics *c, Vector camera = Vector(0, 0)) const;
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    78
};
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    79
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    80
#endif