From 2ca593c5f09ee59a39733856cdb1f7191dc87216 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Sat, 14 Mar 2015 17:43:20 -0400 Subject: Fixed how movement while dying works Also removed some unnecessary Message objects --- src/components.cpp | 121 ++++++++++++++++++++++++++++++----------------------- src/components.h | 2 + src/game.cpp | 7 +--- 3 files changed, 72 insertions(+), 58 deletions(-) diff --git a/src/components.cpp b/src/components.cpp index d5261ef..954ac57 100644 --- a/src/components.cpp +++ b/src/components.cpp @@ -13,22 +13,30 @@ void UserMovementComponent::input(Game& game, Entity& entity, int key, int actio { holdingLeft = true; - Message msg(Message::Type::walkLeft); - entity.send(game, msg); + if (!frozen) + { + entity.send(game, Message::Type::walkLeft); + } } else if (key == GLFW_KEY_RIGHT) { holdingRight = true; - Message msg(Message::Type::walkRight); - entity.send(game, msg); + if (!frozen) + { + entity.send(game, Message::Type::walkRight); + } } else if (key == GLFW_KEY_UP) { - Message msg(Message::Type::jump); - entity.send(game, msg); + if (!frozen) + { + entity.send(game, Message::Type::jump); + } } else if (key == GLFW_KEY_DOWN) { - Message msg(Message::Type::canDrop); - entity.send(game, msg); + if (!frozen) + { + entity.send(game, Message::Type::canDrop); + } } } else if (action == GLFW_RELEASE) { @@ -36,34 +44,61 @@ void UserMovementComponent::input(Game& game, Entity& entity, int key, int actio { holdingLeft = false; - if (holdingRight) + if (!frozen) { - Message msg(Message::Type::walkRight); - entity.send(game, msg); - } else { - Message msg(Message::Type::stopWalking); - entity.send(game, msg); + if (holdingRight) + { + entity.send(game, Message::Type::walkRight); + } else { + entity.send(game, Message::Type::stopWalking); + } } } else if (key == GLFW_KEY_RIGHT) { holdingRight = false; - if (holdingLeft) + if (!frozen) { - Message msg(Message::Type::walkLeft); - entity.send(game, msg); - } else { - Message msg(Message::Type::stopWalking); - entity.send(game, msg); + if (holdingLeft) + { + entity.send(game, Message::Type::walkLeft); + } else { + entity.send(game, Message::Type::stopWalking); + } } } else if (key == GLFW_KEY_DOWN) { - Message msg(Message::Type::cantDrop); - entity.send(game, msg); + if (!frozen) + { + entity.send(game, Message::Type::cantDrop); + } } else if (key == GLFW_KEY_UP) { - Message msg(Message::Type::stopJump); - entity.send(game, msg); + if (!frozen) + { + entity.send(game, Message::Type::stopJump); + } + } + } +} + +void UserMovementComponent::receive(Game& game, Entity& entity, const Message& msg) +{ + if (msg.type == Message::Type::die) + { + frozen = true; + + entity.send(game, Message::Type::stopWalking); + } else if (msg.type == Message::Type::stopDying) + { + frozen = false; + + if (holdingLeft) + { + entity.send(game, Message::Type::walkLeft); + } else if (holdingRight) + { + entity.send(game, Message::Type::walkRight); } } } @@ -168,16 +203,6 @@ void PlayerSpriteComponent::render(Game&, Entity& entity, Texture& buffer) void PlayerSpriteComponent::receive(Game&, Entity&, const Message& msg) { - if (msg.type == Message::Type::stopDying) - { - dying = false; - } - - if (dying) - { - return; - } - if (msg.type == Message::Type::walkLeft) { facingLeft = true; @@ -193,6 +218,9 @@ void PlayerSpriteComponent::receive(Game&, Entity&, const Message& msg) { dying = true; isMoving = false; + } else if (msg.type == Message::Type::stopDying) + { + dying = false; } } @@ -232,10 +260,7 @@ void PlayerPhysicsComponent::receive(Game&, Entity& entity, const Message& msg) velocity.second = 0.0; } else if (msg.type == Message::Type::jump) { - if (!frozen) - { - playSound("../res/Randomize87.wav", 0.25); - } + playSound("../res/Randomize87.wav", 0.25); velocity.second = jump_velocity; accel.second = jump_gravity; @@ -514,27 +539,19 @@ bool MapCollisionComponent::processCollision(Game& game, Entity& collider, Colli if (dir == Direction::left) { collider.position.first = collision.axis; - - Message msg(Message::Type::stopMovingHorizontally); - collider.send(game, msg); + collider.send(game, Message::Type::stopMovingHorizontally); } else if (dir == Direction::right) { collider.position.first = collision.axis - collider.size.first; - - Message msg(Message::Type::stopMovingHorizontally); - collider.send(game, msg); + collider.send(game, Message::Type::stopMovingHorizontally); } else if (dir == Direction::up) { collider.position.second = collision.axis; - - Message msg(Message::Type::stopMovingVertically); - collider.send(game, msg); + collider.send(game, Message::Type::stopMovingVertically); } else if (dir == Direction::down) { collider.position.second = collision.axis - collider.size.second; - - Message msg(Message::Type::stopMovingVertically); - collider.send(game, msg); + collider.send(game, Message::Type::stopMovingVertically); } } else if (collision.type == Collision::Type::wrap) { @@ -569,9 +586,7 @@ bool MapCollisionComponent::processCollision(Game& game, Entity& collider, Colli if (dir == Direction::right) { collider.position.first = collision.axis - collider.size.first; - - Message msg(Message::Type::walkLeft); - collider.send(game, msg); + collider.send(game, Message::Type::walkLeft); } } else if (collision.type == Collision::Type::platform) { diff --git a/src/components.h b/src/components.h index 2ec19ff..e0c4a24 100644 --- a/src/components.h +++ b/src/components.h @@ -12,10 +12,12 @@ class Map; class UserMovementComponent : public Component { public: void input(Game& game, Entity& entity, int key, int action); + void receive(Game&, Entity&, const Message& msg); private: bool holdingLeft = false; bool holdingRight = false; + bool frozen = false; }; class PhysicsBodyComponent : public Component { diff --git a/src/game.cpp b/src/game.cpp index edde71e..dd8f956 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -145,8 +145,7 @@ void Game::schedule(double time, std::function callback) void Game::playerDie(Entity& player, const Map& curMap) { - Message msg(Message::Type::die); - player.send(*this, msg); + player.send(*this, Message::Type::die); playSound("../res/Hit_Hurt5.wav", 0.25); @@ -157,8 +156,6 @@ void Game::playerDie(Entity& player, const Map& curMap) } player.position = save.position; - - Message msg2(Message::Type::stopDying); - player.send(*this, msg2); + player.send(*this, Message::Type::stopDying); }); } -- cgit 1.4.1