X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FCharacter.cc;h=c6ad2a049874d821befa4e90da831703ce2ec653;hp=97a10b2553d27532cd2631f2a5447ae85ec7f1ca;hb=7e898e8ec0ff716e2fc722b883a626a6c346f107;hpb=bfa6212d09d8735d8fd5e2638188e4a99f21ada4 diff --git a/src/Character.cc b/src/Character.cc index 97a10b2..c6ad2a0 100644 --- a/src/Character.cc +++ b/src/Character.cc @@ -26,9 +26,11 @@ *******************************************************************************/ +#include + #include "Character.hh" +#include "Log.hh" -#include Character::Character(const std::string& name) : tilemap_(name), @@ -37,8 +39,10 @@ Character::Character(const std::string& name) : current.mass = 1.0; current.inverseMass = 1.0 / current.mass; + // gravity current.force = Mf::Vector2(0.0, -120.0); + // starting position current.position = Mf::Vector2(64.0, 64.0); current.momentum = Mf::Vector2(0.0, 0.0); current.recalculate(); @@ -48,16 +52,22 @@ Character::Character(const std::string& name) : updateContainers(); } -Character::~Character() -{ - //delete texture; - //delete anim; -} - void Character::update(Mf::Scalar t, Mf::Scalar dt) { previous = current; + + Mf::Vector2 x = current.position - Mf::Vector2(500.0, 200.0); + Mf::Scalar mag = x.length(); + Mf::Scalar d = 50.0; + + current.force = Mf::Vector2(0.0, -2000.0); + //current.force += -15.0 * x - 1.5 * current.velocity; + current.force += -20.0 * (mag - d) * (x / mag) - 2.0 * current.velocity; + current.force += userForce; + current.recalculate(); + //std::cout << "force: " << current.momentum << std::endl; + Mf::integrate(current, t, dt); animation_.update(t, dt); @@ -77,7 +87,7 @@ void Character::handleEvent(const Mf::Event& event) { // really just for heroine... - Mf::Scalar force = 500.0; + Mf::Scalar force = 4000.0; Mf::Vector2 left = Mf::Vector2(-force, 0.0); Mf::Vector2 right = Mf::Vector2(force, 0.0); @@ -89,43 +99,44 @@ void Character::handleEvent(const Mf::Event& event) case SDL_KEYDOWN: if (event.key.keysym.sym == SDLK_a) { - current.force += left; + userForce += left; } else if (event.key.keysym.sym == SDLK_d) { - current.force += right; + userForce += right; } else if (event.key.keysym.sym == SDLK_s) { - current.force += down; + userForce += down; } else if (event.key.keysym.sym == SDLK_w) { - current.force += up; + userForce += up; } break; case SDL_KEYUP: if (event.key.keysym.sym == SDLK_a) { - current.force -= left; + userForce -= left; } else if (event.key.keysym.sym == SDLK_d) { - current.force -= right; + userForce -= right; } else if (event.key.keysym.sym == SDLK_s) { - current.force -= down; + userForce -= down; } else if (event.key.keysym.sym == SDLK_w) { - current.force -= up; + userForce -= up; } break; } - std::cout << "current force: " << current.force << std::endl; + //Mf::logInfo("current force [%f %f]", current.force[0], current.force[1]); + //std::cerr << "current force: " << current.force << std::endl; } @@ -143,7 +154,7 @@ void Character::draw(Mf::Scalar alpha) const Mf::Scalar s = 16.0; - glBegin(GL_QUADS); + glBegin(GL_TRIANGLE_FAN); glTexCoord2f(coords[0], coords[1]); glVertex3(state.position[0]-s, state.position[1]-s, z); glTexCoord2f(coords[2], coords[3]); @@ -153,6 +164,17 @@ void Character::draw(Mf::Scalar alpha) const glTexCoord2f(coords[6], coords[7]); glVertex3(state.position[0]-s, state.position[1]+s, z); glEnd(); + + glColor3f(0.0f, 0.0f, 0.0f); + Mf::Texture::resetBind(); + + glBegin(GL_TRIANGLES); + glVertex3(480.0, 190.0, 64.0); + glVertex3(520.0, 190.0, 64.0); + glVertex3(500.0, 210.0, 64.0); + glEnd(); + + glColor3f(1.0f, 1.0f, 1.0f); }