src/Rope.hh
author Tero Marttila <terom@fixme.fi>
Wed, 21 Jan 2009 23:07:22 +0200
branchnew_graphics
changeset 412 721c60072091
parent 328 51d644c8d5a2
child 417 c503e0c6a740
permissions -rw-r--r--
new graphics code compiles... no, it doesn't work yet
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"
412
721c60072091 new graphics code compiles... no, it doesn't work yet
Tero Marttila <terom@fixme.fi>
parents: 328
diff changeset
    10
721c60072091 new graphics code compiles... no, it doesn't work yet
Tero Marttila <terom@fixme.fi>
parents: 328
diff changeset
    11
#include "Graphics/Drawable.hh"
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    12
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    13
/**
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    14
 * 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
    15
 *
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    16
 * @see Rope
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    17
 */
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    18
enum RopeState {
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    19
    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
    20
    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
    21
    ROPE_FIXED      //<<< The rope is attached to something
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    22
};
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    23
283
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    24
/**
7540b0859579 start adding some documentation, most core classes (outside of Network) are now doxygen-enabled
terom
parents: 273
diff changeset
    25
 * 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
    26
 * 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
    27
 */
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    28
class Rope : public PhysicsObject {
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    29
private:
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    30
    /** the owner */
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    31
    Player &player;
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    32
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    33
    /** How long is the rope in its unstreched state */
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    34
    float length;
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    35
        
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    36
    /** Current state */
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    37
    RopeState state;
322
f94a5c192097 Rope fixing
ekku
parents: 305
diff changeset
    38
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    39
protected:
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
     * Attach the rope, so disable the PhysicsObject and change state
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    42
     * @param collisionPoint Where the rope has hit the ground.
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    43
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    44
    virtual void onCollision (Vector collisionPoint, PhysicsObject *other);
241
e95b1602d836 implement the ROT (Rope Over TCP) protocol
terom
parents: 235
diff changeset
    45
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    46
public:
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    47
    Rope(Player &player);
235
0a0c729365ee code cleanup
terom
parents: 233
diff changeset
    48
        
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    49
    /**
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    50
     * Throw the rope, so it flies up and away: o._-*
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 throwRope (void);
252
25054ce94d07 Rope is released if the ground on the pivot point is destroyed.
ekku
parents: 248
diff changeset
    53
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    54
    /**
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    55
     * 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
    56
     */
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    57
    void release (void);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    58
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    59
    /**
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    60
     * Climb up/down the rope
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
    void changeLength (float delta);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    63
        
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    64
    /**
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    65
     * Current state
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
    RopeState getState (void);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    68
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    69
    /**
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    70
     * Current length
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
    float getLength (void);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    73
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    74
    /**
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    75
     * 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
    76
     */
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    77
    Player *getPivotPlayer (void);
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    78
273
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
     * For use by NetworkClient
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    81
     */
328
51d644c8d5a2 fix player-pivoted rope
terom
parents: 322
diff changeset
    82
    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
    83
    void updateLength (float length);
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    84
        
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    85
    virtual void tick (TimeMS dt);
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
    /*
412
721c60072091 new graphics code compiles... no, it doesn't work yet
Tero Marttila <terom@fixme.fi>
parents: 328
diff changeset
    88
     * Draw the rope, in the FLYING/FIXED state
273
eeb699e1d908 Made forceq to contain time again.
saiam
parents: 255
diff changeset
    89
     */ 
412
721c60072091 new graphics code compiles... no, it doesn't work yet
Tero Marttila <terom@fixme.fi>
parents: 328
diff changeset
    90
    virtual void draw (graphics::Display &display, PixelCoordinate camera);
225
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    91
};
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    92
22ecb9cb9245 Rope can be drawn.
ekku
parents:
diff changeset
    93
#endif