#include "gameplaysceneclassic.hpp" #include "character.hpp" #include "moversine.hpp" #include "sdlmain.hpp" #include "inputbag.hpp" #include "key.hpp" #include "moverleftright.hpp" #include #include #include namespace cloonel { namespace { enum GameActionType { GameAction_Left, GameAction_Right }; } //unnamed namespace struct GameplaySceneClassic::LocalData { }; ///-------------------------------------------------------------------------- ///-------------------------------------------------------------------------- GameplaySceneClassic::GameplaySceneClassic (SDLMain* parSdlMain) : GameplayScene(parSdlMain), m_local(new LocalData) { //TODO: replace the hardcoded bindings with something more customizable. InputBag& input = *InputBagObject(); input.AddAction(GameAction_Left, Key(InputDevice_Keyboard, SDL_SCANCODE_LEFT), "Move left"); input.AddAction(GameAction_Right, Key(InputDevice_Keyboard, SDL_SCANCODE_RIGHT), "Move right"); } ///-------------------------------------------------------------------------- ///-------------------------------------------------------------------------- GameplaySceneClassic::~GameplaySceneClassic() noexcept { Destroy(); } ///-------------------------------------------------------------------------- ///-------------------------------------------------------------------------- void GameplaySceneClassic::Prepare() { std::unique_ptr moverSine(new MoverSine()); std::unique_ptr player(new Character("resources/graphics/player.png", SDLObject(), ushort2(80, 120))); std::unique_ptr moverLeftRight(new MoverLeftRight()); player->Prepare(); moverSine->RegisterPlaceable(player.get()); moverLeftRight->RegisterPlaceable(player.get()); std::swap(moverSine, m_moverSine); std::swap(player, m_player); std::swap(moverLeftRight, m_moverLeftRight); AddMover(m_moverSine.get()); AddMover(m_moverLeftRight.get()); AddDrawable(m_player.get()); m_moverSine->SetPower(static_cast(SDLObject()->DefWidthHeight().y() / 2)); } ///-------------------------------------------------------------------------- ///-------------------------------------------------------------------------- void GameplaySceneClassic::Destroy() noexcept { m_moverSine = std::move(std::unique_ptr(nullptr)); m_player = std::move(std::unique_ptr(nullptr)); m_moverLeftRight = std::move(std::unique_ptr(nullptr)); } ///-------------------------------------------------------------------------- ///-------------------------------------------------------------------------- void GameplaySceneClassic::OnPreUpdate() { InputBag& input = *InputBagObject(); if (IsPressed(input, GameAction_Left)) { m_moverLeftRight->SetMovement(MoverLeftRight::MovementDirection_Left); } else if (IsPressed(input, GameAction_Right)) { m_moverLeftRight->SetMovement(MoverLeftRight::MovementDirection_Right); } else { m_moverLeftRight->SetMovement(MoverLeftRight::MovementDirection_Still); } } } //namespace cloonel