Peoplemon  0.1.0
Peoplemon 3 game source documentation
PauseMenu.cpp
Go to the documentation of this file.
2 
3 #include <Core/Properties.hpp>
5 #include <Game/States/FlyMap.hpp>
10 
11 namespace game
12 {
13 namespace state
14 {
15 bl::engine::State::Ptr PauseMenu::create(core::system::Systems& systems) {
16  return bl::engine::State::Ptr(new PauseMenu(systems));
17 }
18 
19 PauseMenu::PauseMenu(core::system::Systems& s)
20 : State(s, bl::engine::StateMask::Paused)
21 , openedOnce(false)
22 , unpause(false) {
23  using bl::menu::Item;
24  using bl::menu::TextItem;
25 
26  menu.create(s.engine(),
27  s.engine().renderer().getObserver(),
28  bl::menu::ArrowSelector::create(14.f, sf::Color::Black));
29 
30  resume = TextItem::create("Resume", core::Properties::MenuFont());
31  resume->getSignal(Item::Activated).willCall([this]() { this->systems.engine().popState(); });
32 
33  ppldex = TextItem::create("Peopledex", core::Properties::MenuFont());
34  ppldex->getSignal(Item::Activated).willCall([this]() {
36  });
37 
38  pplmon = TextItem::create("Peoplemon", core::Properties::MenuFont());
39  pplmon->getSignal(Item::Activated).willCall([this]() {
40  systems.engine().pushState(
42  });
43 
44  bag = TextItem::create("Bag", core::Properties::MenuFont());
45  bag->getSignal(Item::Activated).willCall([this]() {
46  systems.engine().pushState(
47  BagMenu::create(systems, BagMenu::Context::PauseMenu, nullptr, -1, nullptr, &unpause));
48  });
49 
50  map = TextItem::create("Map", core::Properties::MenuFont());
51  map->getSignal(Item::Activated).willCall([this]() {
52  this->systems.engine().pushState(FlyMap::create(this->systems, this->unpause));
53  });
54 
55  save = TextItem::create("Save", core::Properties::MenuFont());
56  save->getSignal(Item::Activated).willCall([this]() {
57  systems.engine().pushState(SaveGame::create(systems));
58  });
59 
60  settings = TextItem::create("Settings", core::Properties::MenuFont());
61  settings->getSignal(Item::Activated).willCall([this]() {
63  });
64 
65  quit = TextItem::create("Quit", core::Properties::MenuFont());
66  quit->getSignal(Item::Activated).willCall([this]() {
67  this->systems.engine().flags().set(bl::engine::Flags::Terminate);
68  });
69 
70  menu.setRootItem(resume);
71  menu.addItem(ppldex, resume.get(), Item::Bottom);
72  if (!systems.player().state().peoplemon.empty()) {
73  menu.addItem(pplmon, ppldex.get(), Item::Bottom);
74  menu.addItem(bag, pplmon.get(), Item::Bottom);
75  }
76  else { menu.addItem(bag, ppldex.get(), Item::Bottom); }
78  menu.addItem(map, bag.get(), Item::Bottom);
79  menu.addItem(save, map.get(), Item::Bottom);
80  }
81  else { menu.addItem(save, bag.get(), Item::Bottom); }
82  menu.addItem(settings, save.get(), Item::Bottom);
83  menu.addItem(quit, settings.get(), Item::Bottom);
84  menu.attachExisting(resume.get(), quit.get(), Item::Bottom);
85 
87  menu.setMinHeight(38.f);
88  menu.setSelectedItem(resume.get());
89  menu.configureBackground(sf::Color::White, sf::Color::Black, 4.f, {24.f, 8.f, 8.f, 8.f});
90  menu.setPosition(
91  {scr.x - menu.visibleSize().x - 32.f, scr.y * 0.5f - menu.visibleSize().y * 0.5f});
92 }
93 
94 const char* PauseMenu::name() const { return "PauseMenu"; }
95 
96 void PauseMenu::activate(bl::engine::Engine& engine) {
97  systems.engine().inputSystem().getActor().addListener(*this);
98  inputDriver.drive(&menu);
99  inputDriver.resetDebounce();
100  menu.addToOverlay();
102  if (!openedOnce) {
103  bl::audio::AudioSystem::playOrRestartSound(core::Properties::MenuMoveSound());
104  openedOnce = true;
105  }
106 }
107 
108 void PauseMenu::deactivate(bl::engine::Engine&) {
109  menu.removeFromScene();
110  systems.engine().inputSystem().getActor().removeListener(*this);
111  inputDriver.drive(nullptr);
112  unpause = false;
113 }
114 
115 void PauseMenu::update(bl::engine::Engine& engine, float dt, float) {
116  if (unpause) {
117  engine.popState();
118  return;
119  }
120 }
121 
122 bool PauseMenu::observe(const bl::input::Actor&, unsigned int ctrl, bl::input::DispatchType,
123  bool fromEvent) {
124  inputDriver.sendControl(ctrl, fromEvent);
125  if (fromEvent) {
127  bl::audio::AudioSystem::playOrRestartSound(core::Properties::MenuBackSound());
128  systems.engine().popState();
129  }
130  }
131  return true;
132 }
133 
134 // void PauseMenu::render(bl::engine::Engine&, float lag) {
135 // if (systems.flight().flying()) return;
136 //
137 // systems.render().render(systems.engine().window(), systems.world().activeMap(), lag);
138 // menu.render(systems.engine().window(), menuRenderStates);
139 //
140 // systems.engine().window().display();
141 // }
142 
143 } // namespace state
144 } // namespace game
Parent namespace for all functionality unique to the game.
bool hasItem(item::Id item) const
Returns true if at least one of the given items is owned.
Definition: Bag.cpp:42
std::vector< pplmn::OwnedPeoplemon > peoplemon
Definition: State.hpp:46
player::Bag bag
Definition: State.hpp:44
static int WindowWidth()
Definition: Properties.cpp:250
static const sf::VulkanFont & MenuFont()
Definition: Properties.cpp:363
static bl::audio::AudioSystem::Handle MenuBackSound()
Definition: Properties.cpp:712
static bl::audio::AudioSystem::Handle MenuMoveSound()
Definition: Properties.cpp:702
static int WindowHeight()
Definition: Properties.cpp:256
void hideEntryCard()
Hides the entry card.
Definition: HUD.cpp:131
player::State & state()
Returns the state of the player.
Definition: Player.cpp:154
Owns all primary systems and a reference to the engine.
Definition: Systems.hpp:47
const bl::engine::Engine & engine() const
Const accessor for the Engine.
Definition: Systems.cpp:35
Player & player()
Returns the player system.
Definition: Systems.cpp:59
HUD & hud()
Returns the HUD.
Definition: Systems.cpp:69
static bl::engine::State::Ptr create(core::system::Systems &systems, Context ctx, core::item::Id *result=nullptr, int outNow=-1, int *chosenPeoplemon=nullptr, bool *unpause=nullptr)
Creates a new BagMenu.
Definition: BagMenu.cpp:73
static bl::engine::State::Ptr create(core::system::Systems &systems, bool &unpause)
Creates the fly map state.
Definition: FlyMap.cpp:17
Game state for the pause menu.
Definition: PauseMenu.hpp:20
virtual void update(bl::engine::Engine &, float dt, float) override
Updates systems that are not paused.
Definition: PauseMenu.cpp:115
virtual void deactivate(bl::engine::Engine &) override
Unsubscribes from event buses.
Definition: PauseMenu.cpp:108
virtual void activate(bl::engine::Engine &) override
Subscribes to event buses.
Definition: PauseMenu.cpp:96
virtual const char * name() const override
Returns "PauseMenu".
Definition: PauseMenu.cpp:94
static bl::engine::State::Ptr create(core::system::Systems &systems)
Creates a new pause menu state.
Definition: PauseMenu.cpp:15
static bl::engine::State::Ptr create(core::system::Systems &systems)
Create a new Peopledex state.
Definition: Peopledex.cpp:29
static bl::engine::State::Ptr create(core::system::Systems &systems, Context ctx, int outNow=-1, int *chosen=nullptr, core::item::Id item=core::item::Id::None)
Creates a new PeoplemonMenu state.
static bl::engine::State::Ptr create(core::system::Systems &systems)
Creates the save game state.
Definition: SaveGame.cpp:11
static bl::engine::State::Ptr create(core::system::Systems &systems)
Creates the settings menu state.
Parent to all game states. Provides some commonly required data like core game systems.
Definition: State.hpp:29
core::system::Systems & systems
Definition: State.hpp:66