13 constexpr
float FadeTime = 1.5f;
16 using namespace bl::menu;
21 :
State(s,
bl::engine::StateMask::Menu)
22 , state(SelectingSave)
30 bgndTxtr = engine.renderer().texturePool().getOrLoadTexture(bl::util::FileUtil::joinPath(
32 background.create(engine, bgndTxtr);
35 engine, engine.renderer().getObserver(), ArrowSelector::create(12.f, sf::Color::Black));
36 saveMenu.configureBackground(
37 sf::Color::White, sf::Color::Black, 3.f, {22.f, 4.f, 4.f, 6.f});
38 saveMenu.setMinHeight(30.f);
39 saveMenu.setPosition({170.f, 200.f});
40 saveMenu.setMaximumSize({-1.f, 250.f});
43 engine, engine.renderer().getObserver(), ArrowSelector::create(12.f, sf::Color::Black));
46 load->getSignal(Item::Activated).willAlwaysCall([
this]() {
47 inputDriver.drive(
nullptr);
53 .putTask<bl::rc::rgi::FadeEffectTask>(FadeTime);
57 del->getSignal(Item::Activated).willAlwaysCall([
this]() { state = SaveDeleted; });
60 back->getSignal(Item::Activated).willAlwaysCall([
this]() {
63 bl::input::DispatchType::TriggerActivated,
66 actionMenu.setMinHeight(28.f);
67 actionMenu.setRootItem(load);
68 actionMenu.addItem(del, load.get(), Item::Bottom);
69 actionMenu.addItem(back, del.get(), Item::Bottom);
70 actionMenu.configureBackground(
71 sf::Color::White, sf::Color::Black, 3.f, {22.f, 2.f, 2.f, 2.f});
74 scene = engine.renderer().getObserver().pushScene<bl::rc::Overlay>();
79 engine.renderer().getObserver().removeScene(scene);
80 systems.
engine().inputSystem().getActor().removeListener(inputDriver);
81 systems.
engine().inputSystem().getActor().removeListener(*
this);
87 if (saves[selectedSave].remove()) { reset(); }
90 std::bind(&LoadGame::errorDone,
this));
91 inputDriver.drive(
nullptr);
97 if (fadeout->complete()) {
101 .removeTask<bl::rc::rgi::FadeEffectTask>();
102 if (saves[selectedSave].load()) {
107 std::bind(&LoadGame::errorDone,
this));
108 inputDriver.drive(
nullptr);
122 state = SelectingSave;
123 inputDriver.drive(&saveMenu);
128 bool LoadGame::observe(
const bl::input::Actor&,
unsigned int activatedControl,
129 bl::input::DispatchType,
bool fromEvent) {
138 state = SelectingSave;
140 inputDriver.drive(&saveMenu);
141 actionMenu.setHidden(
true);
151 void LoadGame::saveSelected(
unsigned int i) {
153 state = ChooseAction;
154 inputDriver.drive(&actionMenu);
155 const glm::vec2 pos(170.f + saveMenu.getBounds().width + 40.f,
156 200.f +
static_cast<float>(i) * 26.f + 32.f);
157 actionMenu.setPosition(pos + glm::vec2(22.f, 14.f));
158 actionMenu.setHidden(
false);
161 void LoadGame::errorDone() { reset(); }
163 void LoadGame::reset() {
169 item->getSignal(Item::Activated).willAlwaysCall([
this]() {
172 bl::input::DispatchType::TriggerActivated,
175 saveMenu.setRootItem(item);
177 for (
unsigned int i = 0; i < saves.size(); ++i) {
178 const auto& save = saves[i];
182 it->getSignal(Item::Activated).willAlwaysCall([
this, i]() { saveSelected(i); });
183 saveMenu.addItem(it, item.get(), Item::Top);
186 saveMenu.setSelectedItem(item.get());
188 bl::rc::Overlay* overlay =
systems.
engine().renderer().getObserver().getCurrentOverlay();
189 background.addToScene(overlay, bl::rc::UpdateSpeed::Static);
190 saveMenu.addToOverlay(background.entity());
191 actionMenu.addToOverlay(background.entity());
192 actionMenu.setHidden(
true);
194 state = SelectingSave;
195 inputDriver.drive(&saveMenu);
196 systems.
engine().inputSystem().getActor().addListener(*
this);
197 systems.
engine().inputSystem().getActor().addListener(inputDriver);
Parent namespace for all functionality unique to the game.
static void listSaves(std::vector< GameSave > &result)
Lists all saves in the save directory.
static const sf::VulkanFont & MenuFont()
static bl::audio::AudioSystem::Handle MenuBackSound()
static const std::string & MenuImagePath()
void displayMessage(const std::string &message, const Callback &cb=[](const std::string &) {})
Displays a message in the HUD textbox. Messages are queued in order that they arrive.
Owns all primary systems and a reference to the engine.
const bl::engine::Engine & engine() const
Const accessor for the Engine.
HUD & hud()
Returns the HUD.
Provides a menu to select a save and loads the selected save.
virtual void activate(bl::engine::Engine &engine) override
Activates the state.
static bl::engine::State::Ptr create(core::system::Systems &systems)
Creates the load game state.
virtual void deactivate(bl::engine::Engine &engine) override
Deactivates the state.
virtual void update(bl::engine::Engine &engine, float dt, float) override
Updates the state and menus and whatnot.
virtual const char * name() const override
Returns "LoadGame".
static bl::engine::State::Ptr create(core::system::Systems &systems)
Creates the main game state. The game state must be initialized before invoking the main game state.
Parent to all game states. Provides some commonly required data like core game systems.
core::system::Systems & systems