preliminary cleanup of character class
authorCharles McGarvey <chazmcgarvey@brokenzipper.com>
Tue, 3 Nov 2009 02:05:17 +0000 (19:05 -0700)
committerCharles McGarvey <chazmcgarvey@brokenzipper.com>
Tue, 3 Nov 2009 02:05:17 +0000 (19:05 -0700)
src/Character.cc
src/Character.hh
src/GameLayer.cc
src/Heroine.cc
src/Heroine.hh
src/Moof/RK4.hh

index b26f2d4f06b2432da563d7c791594d26ecdc6530..a29e63d792fd50d17935f6dc1d3bb82067cc2903 100644 (file)
@@ -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<State,Derivative>(current, t, dt);
 
-       //current.force = Mf::Vector2(0.0, -2000.0);
-       current.force = userForce;
        current.integrate(t, dt);
-
        animation.update(t, dt);
 }
 
index d1ec2c313713314bf0c3857002e33387c6a85680..19559f38b0f54be1643f31fc29f2949323be977b 100644 (file)
@@ -32,7 +32,6 @@
 #include <boost/shared_ptr.hpp>
 
 #include <Moof/Entity.hh>
-#include <Moof/Event.hh>
 #include <Moof/Math.hh>
 #include <Moof/RK4.hh>
 
@@ -52,101 +51,6 @@ typedef boost::shared_ptr<Character> 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;
index c763b0fbbf04edce32967a867d13973780f57646..2035248115869afdb4a42cb16647be34f29014d0 100644 (file)
@@ -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:
index 314f2c984090c013ca697916079f731750dfc81e..7a751a017715e7291f5e30027a478c79350a049f 100644 (file)
@@ -26,8 +26,6 @@
 
 *******************************************************************************/
 
-#include <iostream>
-
 #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;
 }
 
 
index c5c62ed2218cea36f1505532793d3914a450871d..2fb40c33a7cce2ba7ab642c190f8aa9b8f448191 100644 (file)
@@ -54,7 +54,7 @@ struct Heroine : public Character
                return HeroineP(new Heroine);
        }
 
-       void handleEvent(const Mf::Event& event);
+       bool handleEvent(const Mf::Event& event);
 };
 
 
index 453cf1ef4e1d00766bcb4b27383784a4082917e6..329323223e16014793d86654a1ee0eaea6bbf59f 100644 (file)
@@ -116,7 +116,7 @@ struct LinearState
        Vector          velocity;
 
        // user
-       //
+
        Vector          force;
        std::vector<ForceFunction> forces;
 
This page took 0.027773 seconds and 4 git commands to generate.