add PixelDimension/PixelCoordinate types, convert Terrain to use them, and convert/clean up drawing code
#ifndef ROPE_HH
#define ROPE_HH
// Pre-declarations since rope wants to know the Player
// and the Player wants to know the rope.
class Rope;
#include "Player.hh"
#include "PhysicsObject.hh"
#include "GraphicsPointer.hh"
enum RopeState {
ROPE_FOLDED,
ROPE_FLYING,
ROPE_FIXED
};
class Rope : public PhysicsObject {
private:
// the owner
Player &player;
// How long is the rope in its unstrected state
float length;
// basic state
RopeState state;
protected:
/**
* Attach the rope, so disable the PhysicsObject and change state
* @param collisionPoint Where the rope has hit the ground.
*/
virtual void onCollision (Vector collisionPoint);
/*
* If the rope is currently longer than length, this returns ROPE_FORCE, else 0
*/
virtual float getPivotForce (PhysicsObject *bob);
public:
Rope(Player &player);
/*
* Throw the rope, so it flies up and away: o._-*
*/
void throwRope (void);
/*
* Release the rope, so if it's currently fixed or flying, then fold it
*/
void release (void);
/*
* Climb up/down the rope
*/
void changeLength (float delta);
/*
* Current state
*/
RopeState getState (void);
/*
* Current length
*/
float getLength (void);
/*
* For use by NetworkClient
*/
void updateState (RopeState state, Vector position, Vector velocity, float length);
void updateLength (float length);
virtual void tick (TimeMS dt);
/*
* Just draws it
*/
virtual void draw (Graphics *c, PixelCoordinate camera);
};
#endif