From bc2bc12125d6c223d2935557e01926fe21166e38 Mon Sep 17 00:00:00 2001 From: Charles McGarvey Date: Mon, 2 Nov 2009 19:05:17 -0700 Subject: [PATCH] preliminary cleanup of character class --- src/Character.cc | 15 ++++---- src/Character.hh | 96 ------------------------------------------------ src/GameLayer.cc | 3 +- src/Heroine.cc | 41 +++++++++------------ src/Heroine.hh | 2 +- src/Moof/RK4.hh | 2 +- 6 files changed, 29 insertions(+), 130 deletions(-) diff --git a/src/Character.cc b/src/Character.cc index b26f2d4..a29e63d 100644 --- a/src/Character.cc +++ b/src/Character.cc @@ -56,17 +56,21 @@ private: Mf::Vector2 location; }; -struct WindResistenceForce +struct ResistanceForce { + explicit ResistanceForce(Mf::Scalar scale = 1.0) : + k(scale) {} + const Mf::Vector2& operator () (const Mf::LinearState<2>& state) { - force = -2.0 * state.velocity; + force = -k * state.velocity; return force; } private: - Mf::Vector2 force; + Mf::Vector2 force; + Mf::Scalar k; }; @@ -82,7 +86,7 @@ Character::Character(const std::string& name) : // gravity current.force = Mf::Vector2(0.0, 000.0); current.forces.push_back(SpringForce(Mf::Vector2(500.0, 200.0))); - current.forces.push_back(WindResistenceForce()); + current.forces.push_back(ResistanceForce(4.0)); current.forces.push_back(Mf::LinearState<2>::GravityForce(-2000.0)); // starting position @@ -114,10 +118,7 @@ void Character::update(Mf::Scalar t, Mf::Scalar dt) //Mf::euler(current, t, dt); - //current.force = Mf::Vector2(0.0, -2000.0); - current.force = userForce; current.integrate(t, dt); - animation.update(t, dt); } diff --git a/src/Character.hh b/src/Character.hh index d1ec2c3..19559f3 100644 --- a/src/Character.hh +++ b/src/Character.hh @@ -32,7 +32,6 @@ #include #include -#include #include #include @@ -52,101 +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; - } - }; -*/ - - Mf::State2 previous; - Mf::State2 current; - - -private: - - static const Mf::Scalar z = 96.0; - protected: Mf::Vector2 userForce; diff --git a/src/GameLayer.cc b/src/GameLayer.cc index c763b0f..2035248 100644 --- a/src/GameLayer.cc +++ b/src/GameLayer.cc @@ -124,8 +124,7 @@ bool GameLayer::handleEvent(const Mf::Event& event) } case SDL_KEYUP: - heroine->handleEvent(event); - break; + return heroine->handleEvent(event); case SDL_MOUSEMOTION: case SDL_MOUSEBUTTONDOWN: diff --git a/src/Heroine.cc b/src/Heroine.cc index 314f2c9..7a751a0 100644 --- a/src/Heroine.cc +++ b/src/Heroine.cc @@ -26,8 +26,6 @@ *******************************************************************************/ -#include - #include "Heroine.hh" #include "Log.hh" @@ -36,60 +34,57 @@ Heroine::Heroine() : Character("Heroine") {} -void Heroine::handleEvent(const Mf::Event& event) +bool Heroine::handleEvent(const Mf::Event& event) { - // really just for heroine... - Mf::Scalar force = 4000.0; - Mf::Vector2 left = Mf::Vector2(-force, 0.0); - Mf::Vector2 right = Mf::Vector2(force, 0.0); - Mf::Vector2 down = Mf::Vector2(0.0, -force); - Mf::Vector2 up = Mf::Vector2(0.0, force); - switch (event.type) { case SDL_KEYDOWN: if (event.key.keysym.sym == SDLK_a) { - userForce += left; + current.force += Mf::Vector2(-force, 0.0); + return true; } else if (event.key.keysym.sym == SDLK_d) { - userForce += right; + current.force += Mf::Vector2(force, 0.0); + return true; } else if (event.key.keysym.sym == SDLK_s) { - userForce += down; + current.force += Mf::Vector2(0.0, -force); + return true; } else if (event.key.keysym.sym == SDLK_w) { - userForce += up; + current.force += Mf::Vector2(0.0, force); + return true; } - break; case SDL_KEYUP: if (event.key.keysym.sym == SDLK_a) { - userForce -= left; + current.force += Mf::Vector2(force, 0.0); + return true; } else if (event.key.keysym.sym == SDLK_d) { - userForce -= right; + current.force += Mf::Vector2(-force, 0.0); + return true; } else if (event.key.keysym.sym == SDLK_s) { - userForce -= down; + current.force += Mf::Vector2(0.0, force); + return true; } else if (event.key.keysym.sym == SDLK_w) { - userForce -= up; + current.force += Mf::Vector2(0.0, -force); + return true; } - break; } - - //Mf::logInfo("current force [%f %f]", current.force[0], current.force[1]); - //std::cerr << "current force: " << current.force << std::endl; + return false; } diff --git a/src/Heroine.hh b/src/Heroine.hh index c5c62ed..2fb40c3 100644 --- a/src/Heroine.hh +++ b/src/Heroine.hh @@ -54,7 +54,7 @@ struct Heroine : public Character return HeroineP(new Heroine); } - void handleEvent(const Mf::Event& event); + bool handleEvent(const Mf::Event& event); }; diff --git a/src/Moof/RK4.hh b/src/Moof/RK4.hh index 453cf1e..3293232 100644 --- a/src/Moof/RK4.hh +++ b/src/Moof/RK4.hh @@ -116,7 +116,7 @@ struct LinearState Vector velocity; // user - // + Vector force; std::vector forces; -- 2.45.2