X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FCharacter.hh;h=19559f38b0f54be1643f31fc29f2949323be977b;hp=087bf494c819743eafc099fcca9f7c9635fc300a;hb=bc2bc12125d6c223d2935557e01926fe21166e38;hpb=d5b4262bc0c6cea41c603e8a3a85ab93adfdc36b diff --git a/src/Character.hh b/src/Character.hh index 087bf49..19559f3 100644 --- a/src/Character.hh +++ b/src/Character.hh @@ -31,12 +31,13 @@ #include -#include #include -#include #include #include -#include + +#include "Animation.hh" +#include "Tilemap.hh" + struct Character; @@ -50,102 +51,6 @@ typedef boost::shared_ptr CharacterP; struct Character : public Mf::Entity { - struct Derivative - { - Mf::Vector2 velocity; - Mf::Vector2 force; - - Derivative operator*(Mf::Scalar dt) const - { - Derivative derivative; - derivative.velocity = dt * velocity; - derivative.force = dt * force; - return derivative; - } - - Derivative operator+(const Derivative& other) const - { - Derivative derivative; - derivative.velocity = velocity + other.velocity; - derivative.force = force + other.force; - return derivative; - } - }; - - struct State - { - // primary - - Mf::Vector2 position; - Mf::Vector2 momentum; - Mf::Vector2 force; - - // secondary - - Mf::Vector2 velocity; - - // constant - - Mf::Scalar mass; - Mf::Scalar inverseMass; - - void recalculate() - { - velocity = momentum * inverseMass; - } - - - void getDerivative(Derivative& derivative, Mf::Scalar t) const - { - //derivative.velocity = Mf::Vector2(0.0, 0.0); - //derivative.force = Mf::Vector2(0.0, 0.0); - derivative.velocity = velocity; - derivative.force = force; - - //Mf::Vector2 x = position - Mf::Vector2(500.0, 200.0); - //derivative.force += -15.0 * x - 1.5 * velocity; - } - - void applyDerivative(const Derivative& derivative, Mf::Scalar dt) - { - position += dt * derivative.velocity; - momentum += dt * derivative.force; - recalculate(); - } - - // these two operator overloads all using the state in generic - // interpolator implementations - - State operator*(Mf::Scalar scalar) const - { - State state = *this; - state.position *= scalar; - state.momentum *= scalar; - state.recalculate(); - return state; - } - - State operator+(const State& state) const - { - State newState = *this; - newState.position += state.position; - newState.momentum += state.momentum; - newState.recalculate(); - return newState; - } - }; - - State previous; - State current; - - -private: - - static const Mf::Scalar z = 96.0; - - Mf::Tilemap tilemap_; - Mf::Animation animation_; - protected: Mf::Vector2 userForce; @@ -158,8 +63,9 @@ public: virtual void update(Mf::Scalar t, Mf::Scalar dt); virtual void draw(Mf::Scalar alpha) const; - Mf::Tilemap& getTilemap(); - Mf::Animation& getAnimation(); + + Tilemap tilemap; + Animation animation; };