X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FCharacter.hh;h=00e5a4b2b6912dc8ceae0b27643d5f67496102ea;hp=a92992c6e3eca9fc4e6bb22581b8903f80bcdf58;hb=df541170776dc4ac4f241ca480812bd70bcb6eca;hpb=bfa6212d09d8735d8fd5e2638188e4a99f21ada4 diff --git a/src/Character.hh b/src/Character.hh index a92992c..00e5a4b 100644 --- a/src/Character.hh +++ b/src/Character.hh @@ -36,19 +36,21 @@ #include #include #include -#include +#include #include +struct Character; +typedef boost::shared_ptr CharacterP; + + /** * Parent class of animate objects with "personalities." This basically * includes the heroine herself and the bad guys. */ -class Character : public Mf::Entity +struct Character : public Mf::Entity { -public: - struct Derivative { Mf::Vector2 velocity; @@ -88,6 +90,11 @@ public: Mf::Scalar mass; Mf::Scalar inverseMass; + void recalculate() + { + velocity = momentum * inverseMass; + } + void getDerivative(Derivative& derivative, Mf::Scalar t) const { @@ -97,11 +104,6 @@ public: derivative.force = force; } - void recalculate() - { - velocity = momentum * inverseMass; - } - void applyDerivative(const Derivative& derivative, Mf::Scalar dt) { position += dt * derivative.velocity; @@ -109,6 +111,9 @@ public: recalculate(); } + // these two operator overloads all using the state in generic + // interpolator implementations + State operator*(Mf::Scalar scalar) const { State state = *this; @@ -118,7 +123,7 @@ public: return state; } - State operator+(State state) const + State operator+(const State& state) const { State newState = *this; newState.position += state.position; @@ -128,43 +133,49 @@ public: } }; - - Character(const std::string& name); - virtual ~Character(); - - void update(Mf::Scalar t, Mf::Scalar dt); - void handleEvent(const Mf::Event& event); - void draw(Mf::Scalar alpha) const; - - Mf::Tilemap& getTilemap(); - Mf::Animation& getAnimation(); - State previous; State current; - stlplus::ntree::iterator treeNode; + Mf::OctreeNodeP treeNode; -private: - void updateContainers(); +private: static const Mf::Scalar z = 96.0; Mf::Tilemap tilemap_; Mf::Animation animation_; -}; -typedef boost::shared_ptr CharacterPtr; + void updateContainers(); +public: -inline Character::State operator*(Mf::Scalar scalar, const Character::State& state) -{ - Character::State newState = state; - newState.position *= scalar; - newState.momentum *= scalar; - newState.recalculate(); - return newState; -} + inline static CharacterP alloc(const std::string& name) + { + return CharacterP(new Character(name)); + } + + Character(const std::string& name); + inline virtual ~Character() {} + + void update(Mf::Scalar t, Mf::Scalar dt); + void handleEvent(const Mf::Event& event); + void draw(Mf::Scalar alpha) const; + + Mf::Tilemap& getTilemap(); + Mf::Animation& getAnimation(); +}; + + +//inline Character::State operator*(Mf::Scalar scalar, + //const Character::State& state) +//{ + //Character::State newState = state; + //newState.position *= scalar; + //newState.momentum *= scalar; + //newState.recalculate(); + //return newState; +//} #endif // _CHARACTER_HH_