X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FCharacter.hh;h=28e588b627da8ccc0b45b49dc80cbac1b37fc258;hp=5aeaeba0a7af1b8a5ea6e1c6f7f53fbee43c48e2;hb=2fdb5f5824826a6c54f5afde8c62eafd24c1a152;hpb=57b78ebe21b1b48acd337daa5a1cb8c383959cfa diff --git a/src/Character.hh b/src/Character.hh index 5aeaeba..28e588b 100644 --- a/src/Character.hh +++ b/src/Character.hh @@ -31,16 +31,19 @@ #include -#include +#include #include -#include #include #include -#include -#include +#include +#include +#include "Animation.hh" +#include "Tilemap.hh" -struct Character; + + +class Character; typedef boost::shared_ptr CharacterP; @@ -49,132 +52,33 @@ typedef boost::shared_ptr CharacterP; * includes the heroine herself and the bad guys. */ -struct Character : public Mf::Entity +class Character : public Mf::RigidBody2, public Mf::OctreeInsertable { - 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; - } - - void applyDerivative(const Derivative& derivative, Mf::Scalar dt) - { - position += dt * derivative.velocity; - momentum += dt * derivative.force; - recalculate(); - } - - State operator*(Mf::Scalar scalar) const - { - State state = *this; - state.position *= scalar; - state.momentum *= scalar; - state.recalculate(); - return state; - } - - State operator+(State state) const - { - State newState = *this; - newState.position += state.position; - newState.momentum += state.momentum; - newState.recalculate(); - return newState; - } - }; - - State previous; - State current; - - Mf::OctreeNodeP treeNode; - +public: -private: + Character(const std::string& name); + virtual ~Character() {} - static const Mf::Scalar z = 96.0; + virtual void update(Mf::Scalar t, Mf::Scalar dt); + virtual void draw(Mf::Scalar alpha) const; - Mf::Tilemap tilemap_; - Mf::Animation animation_; + void setZCoord(Mf::Scalar z); - void updateContainers(); + void addImpulse(Mf::Vector2 impulse); + void addForce(Mf::Vector2 force); + void setPosition(Mf::Vector2 position); -public: + virtual int getOctant(const Mf::Aabb& aabb) const; - inline static CharacterP alloc(const std::string& name) - { - return CharacterP(new Character(name)); - } + Tilemap tilemap; + Animation animation; - 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; +private: - Mf::Tilemap& getTilemap(); - Mf::Animation& getAnimation(); + mutable Mf::Scalar mZCoord; }; -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_ /** vim: set ts=4 sw=4 tw=80: *************************************************/