Skip to content

Commit

Permalink
WIP: Added cheat console; Cheat console supports changing game state;…
Browse files Browse the repository at this point in the history
… Cheat console supports spawning NPCs
  • Loading branch information
dbeef committed Dec 17, 2023
1 parent d4a9479 commit b7894f2
Show file tree
Hide file tree
Showing 10 changed files with 372 additions and 18 deletions.
6 changes: 6 additions & 0 deletions src/game-loop/include/prefabs/ui/CheatConsole.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,15 @@

#include "entt/entt.hpp"
#include "viewport/Viewport.hpp"
#include "game-loop/GameLoop.hpp"

namespace prefabs
{
struct CheatConsoleComponent
{
GameLoop::State state{GameLoop::State::CURRENT};
};

struct CheatConsole
{
static entt::entity create(const std::shared_ptr<Viewport>& viewport);
Expand Down
10 changes: 10 additions & 0 deletions src/game-loop/interface/game-loop/GameLoop.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,16 @@ class ShoppingSystem;
class GameLoop
{
public:
enum class State
{
MAIN_MENU = 0,
PLAYING,
STARTED,
LEVEL_SUMMARY,
SCORES,
CURRENT
};

GameLoop(const std::shared_ptr<Viewport>&);
std::function<bool(uint32_t delta_time_ms)>& get();
private:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class GameLoopMainMenuState : public GameLoopBaseState
void enter(GameLoop&) override;
void exit(GameLoop&) override;
private:
entt::entity _cheat_console = entt::null;
entt::entity _main_dude = entt::null;
entt::entity _pause_overlay = entt::null;
entt::entity _death_overlay = entt::null;
Expand Down
1 change: 1 addition & 0 deletions src/game-loop/interface/game-loop/GameLoopPlayingState.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,5 @@ class GameLoopPlayingState : public GameLoopBaseState, public Observer<MainDudeE
entt::entity _hud = entt::null;
entt::entity _pause_overlay = entt::null;
entt::entity _death_overlay = entt::null;
entt::entity _cheat_console = entt::null;
};
1 change: 1 addition & 0 deletions src/game-loop/interface/game-loop/GameLoopScoresState.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ class GameLoopScoresState : public GameLoopBaseState
entt::entity _main_dude = entt::null;
entt::entity _pause_overlay = entt::null;
entt::entity _death_overlay = entt::null;
entt::entity _cheat_console = entt::null;
};
24 changes: 23 additions & 1 deletion src/game-loop/src/game-loop/GameLoopMainMenuState.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,28 @@ GameLoopBaseState *GameLoopMainMenuState::update(GameLoop& game_loop, uint32_t d
}
}


auto& cheat_console = registry.get<prefabs::CheatConsoleComponent>(_cheat_console);
switch (cheat_console.state)
{
case GameLoop::State::SCORES:
{
cheat_console.state = GameLoop::State::CURRENT;
return &game_loop._states.scores;
}
case GameLoop::State::MAIN_MENU:
{
cheat_console.state = GameLoop::State::CURRENT;
return &game_loop._states.main_menu;
}
case GameLoop::State::PLAYING:
{
cheat_console.state = GameLoop::State::CURRENT;
return &game_loop._states.playing;
}
default: {}
}

if (position.y_center <= EXIT_LEVEL_Y)
{
log_info("Quitting using rope.");
Expand Down Expand Up @@ -156,7 +178,7 @@ void GameLoopMainMenuState::enter(GameLoop& game_loop)

_pause_overlay = prefabs::PauseOverlay::create(game_loop._viewport, PauseOverlayComponent::Type::MAIN_MENU);
_main_dude = prefabs::MainDude::create(17.5, 9.5);
prefabs::CheatConsole::create(game_loop._viewport);
_cheat_console = prefabs::CheatConsole::create(game_loop._viewport);

game_loop._level_summary_tracker->reset();

Expand Down
23 changes: 23 additions & 0 deletions src/game-loop/src/game-loop/GameLoopPlayingState.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
#include "Level.hpp"
#include "audio/Audio.hpp"
#include "populator/Populator.hpp"
#include "prefabs/ui/CheatConsole.hpp"

GameLoopBaseState *GameLoopPlayingState::update(GameLoop& game_loop, uint32_t delta_time_ms)
{
Expand Down Expand Up @@ -112,6 +113,27 @@ GameLoopBaseState *GameLoopPlayingState::update(GameLoop& game_loop, uint32_t de

game_loop._level_summary_tracker->update(delta_time_ms);

auto& cheat_console = registry.get<prefabs::CheatConsoleComponent>(_cheat_console);
switch (cheat_console.state)
{
case GameLoop::State::SCORES:
{
cheat_console.state = GameLoop::State::CURRENT;
return &game_loop._states.scores;
}
case GameLoop::State::MAIN_MENU:
{
cheat_console.state = GameLoop::State::CURRENT;
return &game_loop._states.main_menu;
}
case GameLoop::State::PLAYING:
{
cheat_console.state = GameLoop::State::CURRENT;
return &game_loop._states.playing;
}
default: {}
}

return this;
}

Expand Down Expand Up @@ -147,6 +169,7 @@ void GameLoopPlayingState::enter(GameLoop& game_loop)
_pause_overlay = prefabs::PauseOverlay::create(game_loop._viewport, PauseOverlayComponent::Type::PLAYING);
_death_overlay = prefabs::DeathOverlay::create(game_loop._viewport);
_hud = prefabs::HudOverlay::create(game_loop._viewport);
_cheat_console = prefabs::CheatConsole::create(game_loop._viewport);

game_loop._rendering_system->sort();

Expand Down
24 changes: 24 additions & 0 deletions src/game-loop/src/game-loop/GameLoopScoresState.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include "CameraType.hpp"
#include "Level.hpp"
#include "other/Inventory.hpp"
#include "prefabs/ui/CheatConsole.hpp"

GameLoopBaseState *GameLoopScoresState::update(GameLoop& game_loop, uint32_t delta_time_ms)
{
Expand Down Expand Up @@ -74,6 +75,28 @@ GameLoopBaseState *GameLoopScoresState::update(GameLoop& game_loop, uint32_t del
return &game_loop._states.main_menu;
}


auto& cheat_console = registry.get<prefabs::CheatConsoleComponent>(_cheat_console);
switch (cheat_console.state)
{
case GameLoop::State::SCORES:
{
cheat_console.state = GameLoop::State::CURRENT;
return &game_loop._states.scores;
}
case GameLoop::State::MAIN_MENU:
{
cheat_console.state = GameLoop::State::CURRENT;
return &game_loop._states.main_menu;
}
case GameLoop::State::PLAYING:
{
cheat_console.state = GameLoop::State::CURRENT;
return &game_loop._states.playing;
}
default: {}
}

return this;
}

Expand Down Expand Up @@ -110,6 +133,7 @@ void GameLoopScoresState::enter(GameLoop& game_loop)

_main_dude = prefabs::MainDude::create(pos_x, pos_y);
_pause_overlay = prefabs::PauseOverlay::create(game_loop._viewport, PauseOverlayComponent::Type::SCORES);
_cheat_console = prefabs::CheatConsole::create(game_loop._viewport);

prefabs::ScoresOverlay::create(game_loop._viewport);
prefabs::ResetSign::create(16.5f, 10.5f);
Expand Down
Loading

0 comments on commit b7894f2

Please sign in to comment.