diff --git a/src/saland/Game.cpp b/src/saland/Game.cpp index aa855b5..c62b539 100644 --- a/src/saland/Game.cpp +++ b/src/saland/Game.cpp @@ -83,6 +83,7 @@ struct Game::GameImpl { std::string worldName = "world1"; sago::SagoTextField bottomField; std::shared_ptr console; + bool consoleActive = false; }; static SpawnPoint GetSpawnpoint(const sago::tiled::TileMap& tm) { @@ -220,7 +221,7 @@ void Game::Draw(SDL_Renderer* target) { data->bottomField.SetText(buffer); data->bottomField.Draw(target, 2, screen_height, sago::SagoTextField::Alignment::left, sago::SagoTextField::VerticalAlignment::bottom); DrawTile(target, globalData.spriteHolder.get(), data->gameRegion.world.tm, data->drawTile, 1024-60, 768-60); - if (data->console) { + if (data->consoleActive && data->console) { data->console->Draw(target); } //#if DEBUG @@ -260,7 +261,7 @@ static bool reservedField(const sago::tiled::TileMap& tm, int x, int y) { } void Game::ProcessInput(const SDL_Event& event, bool& processed) { - if (data->console) { + if (data->consoleActive && data->console) { data->console->ProcessInput(event, processed); if (processed) { return; @@ -291,7 +292,11 @@ void Game::ProcessInput(const SDL_Event& event, bool& processed) { data->drawTile++; } if (event.key.keysym.sym == SDLK_ESCAPE && event.key.keysym.mod & KMOD_LSHIFT) { - data->console = std::make_shared(); + if (!data->console) { + data->console = std::make_shared(); + } + data->console->Activate(); + data->consoleActive = true; } if (event.key.keysym.sym == SDLK_F12) { data->isActive = false; @@ -308,7 +313,7 @@ static bool Intersect(const Placeable& p1, const Placeable& p2) { } void Game::Update() { - if (data->console) { + if (data->consoleActive && data->console) { data->console->Update(); } Uint32 nowTime = SDL_GetTicks(); @@ -316,7 +321,7 @@ void Game::Update() { const Uint8 *state = SDL_GetKeyboardState(NULL); float deltaX = 0.0f; float deltaY = 0.0f; - if (!data->console) { + if (!data->consoleActive) { if (state[globalData.playerControls.move_down]) { deltaY += 1.0f; } @@ -387,10 +392,10 @@ void Game::Update() { ResetWorld(data->gameRegion.GetRegionX(), data->gameRegion.GetRegionY()+1); data->human->body->SetTransform(b2Vec2(data->gameRegion.world.tm.width/2, 0.01f),data->human->body->GetAngle()) ; } - if (data->console && !data->console->IsActive()) { - data->console = nullptr; + if (data->consoleActive && data->console && !data->console->IsActive()) { + data->consoleActive = false; } - if (SDL_GetMouseState(nullptr,nullptr) & 1 && !data->console) { + if (SDL_GetMouseState(nullptr,nullptr) & 1 && !data->consoleActive) { if (data->human->castTimeRemaining == 0) { data->human->castTimeRemaining = data->human->castTime; std::shared_ptr projectile = std::make_shared(); diff --git a/src/saland/console/Console.cpp b/src/saland/console/Console.cpp index 0d02685..d702496 100644 --- a/src/saland/console/Console.cpp +++ b/src/saland/console/Console.cpp @@ -53,6 +53,11 @@ Console::~Console() { bool Console::IsActive() { return active; }; + +void Console::Activate() { + active = true; +} + void Console::Draw(SDL_Renderer* target) { int sideBoarder = 20; DrawRectYellow(target, sideBoarder, 10, globalData.ysize/2, globalData.xsize - sideBoarder*2); diff --git a/src/saland/console/Console.hpp b/src/saland/console/Console.hpp index fa99cb2..3823cb0 100644 --- a/src/saland/console/Console.hpp +++ b/src/saland/console/Console.hpp @@ -37,6 +37,7 @@ public: virtual void Draw(SDL_Renderer* target) override; virtual void ProcessInput(const SDL_Event& event, bool &processed) override; virtual void Update() override; + void Activate(); Console(const Console& orig) = delete; Console& operator=(const Console&) = delete; virtual ~Console();