Next phase of the refactor is done. Now to replace everything in Systems.
This commit is contained in:
parent
644ff6edc0
commit
81e25f73bb
10 changed files with 163 additions and 82 deletions
81
gui/fsm.cpp
81
gui/fsm.cpp
|
@ -12,19 +12,19 @@
|
|||
#include "shaders.hpp"
|
||||
#include <fmt/xchar.h>
|
||||
#include "gui/guecstra.hpp"
|
||||
#include "game_level.hpp"
|
||||
|
||||
namespace gui {
|
||||
using namespace components;
|
||||
|
||||
FSM::FSM() :
|
||||
$window(sf::VideoMode({SCREEN_WIDTH, SCREEN_HEIGHT}), "Zed's Raycaster Thing"),
|
||||
$debug_ui($levels),
|
||||
$debug_ui(Game::get_the_manager()),
|
||||
$main_ui($window),
|
||||
$level($levels.current()),
|
||||
$combat_ui($level),
|
||||
$status_ui($level),
|
||||
$map_ui($level),
|
||||
$loot_ui($level),
|
||||
$combat_ui(Game::current()),
|
||||
$status_ui(Game::current()),
|
||||
$map_ui(Game::current()),
|
||||
$loot_ui(Game::current()),
|
||||
$font{FONT_FILE_NAME},
|
||||
$dnd_loot($status_ui, $loot_ui, $window, $router)
|
||||
{
|
||||
|
@ -47,7 +47,8 @@ namespace gui {
|
|||
}
|
||||
|
||||
void FSM::START(Event ) {
|
||||
$main_ui.update_level($level);
|
||||
auto& level = Game::current();
|
||||
$main_ui.update_level(level);
|
||||
$main_ui.init();
|
||||
$loot_ui.init();
|
||||
|
||||
|
@ -58,7 +59,7 @@ namespace gui {
|
|||
$combat_ui.init();
|
||||
$status_ui.init();
|
||||
|
||||
$boss_fight_ui = $levels.create_bossfight($level.world);
|
||||
$boss_fight_ui = Game::create_bossfight();
|
||||
$boss_fight_ui->init();
|
||||
|
||||
$map_ui.init();
|
||||
|
@ -72,7 +73,7 @@ namespace gui {
|
|||
void FSM::MOVING(Event ) {
|
||||
// this should be an optional that returns a point
|
||||
if(auto move_to = $main_ui.play_move()) {
|
||||
System::plan_motion($level, *move_to);
|
||||
System::plan_motion(Game::current(), *move_to);
|
||||
run_systems();
|
||||
$main_ui.dirty();
|
||||
state(State::IDLE);
|
||||
|
@ -83,7 +84,7 @@ namespace gui {
|
|||
using enum Event;
|
||||
switch(ev) {
|
||||
case TICK: {
|
||||
System::combat($level, $temp_attack_id);
|
||||
System::combat(Game::current(), $temp_attack_id);
|
||||
run_systems();
|
||||
state(State::IN_COMBAT);
|
||||
} break;
|
||||
|
@ -101,7 +102,7 @@ namespace gui {
|
|||
|
||||
void FSM::ROTATING(Event) {
|
||||
if(auto aim = $main_ui.play_rotate()) {
|
||||
auto& player_pos = System::player_position($level);
|
||||
auto& player_pos = Game::player_position();
|
||||
player_pos.aiming_at = *aim;
|
||||
state(State::IDLE);
|
||||
}
|
||||
|
@ -109,7 +110,7 @@ namespace gui {
|
|||
|
||||
void FSM::COMBAT_ROTATE(Event) {
|
||||
if(auto aim = $main_ui.play_rotate()) {
|
||||
auto& player_pos = System::player_position($level);
|
||||
auto& player_pos = Game::player_position();
|
||||
player_pos.aiming_at = *aim;
|
||||
state(State::IN_COMBAT);
|
||||
}
|
||||
|
@ -194,7 +195,7 @@ namespace gui {
|
|||
auto gui_id = std::any_cast<guecs::Entity>(data);
|
||||
auto& slot_name = $status_ui.$gui.name_for(gui_id);
|
||||
|
||||
if(System::use_item($level, slot_name)) {
|
||||
if(System::use_item(Game::current(), slot_name)) {
|
||||
$status_ui.update();
|
||||
}
|
||||
} break;
|
||||
|
@ -206,7 +207,7 @@ namespace gui {
|
|||
mouse_action({1 << guecs::ModBit::hover});
|
||||
} break;
|
||||
case AIM_CLICK:
|
||||
System::pickup($level);
|
||||
System::pickup(Game::current());
|
||||
break;
|
||||
default:
|
||||
break; // ignore everything else
|
||||
|
@ -272,11 +273,12 @@ namespace gui {
|
|||
}
|
||||
|
||||
void FSM::try_move(int dir, bool strafe) {
|
||||
auto& level = Game::current();
|
||||
using enum State;
|
||||
// prevent moving into occupied space
|
||||
Point move_to = $main_ui.plan_move(dir, strafe);
|
||||
|
||||
if($level.map->can_move(move_to) && !$level.collision->occupied(move_to)) {
|
||||
if(level.map->can_move(move_to) && !level.collision->occupied(move_to)) {
|
||||
sound::play("walk");
|
||||
state(MOVING);
|
||||
} else {
|
||||
|
@ -360,8 +362,9 @@ namespace gui {
|
|||
event(Event::LOOT_OPEN);
|
||||
break;
|
||||
case KEY::Z: {
|
||||
auto& player_pos = System::player_position($level);
|
||||
System::distribute_loot($level, {player_pos.aiming_at});
|
||||
auto& level = Game::current();
|
||||
auto& player_pos = Game::player_position();
|
||||
System::distribute_loot(level, {player_pos.aiming_at});
|
||||
} break;
|
||||
case KEY::X:
|
||||
event(Event::STAIRS_DOWN);
|
||||
|
@ -419,13 +422,14 @@ namespace gui {
|
|||
}
|
||||
|
||||
void FSM::run_systems() {
|
||||
System::generate_paths($level);
|
||||
System::enemy_ai_initialize($level);
|
||||
System::enemy_pathing($level);
|
||||
System::collision($level);
|
||||
System::motion($level);
|
||||
System::lighting($level);
|
||||
System::death($level);
|
||||
auto& level = Game::current();
|
||||
System::generate_paths(level);
|
||||
System::enemy_ai_initialize(level);
|
||||
System::enemy_pathing(level);
|
||||
System::collision(level);
|
||||
System::motion(level);
|
||||
System::lighting(level);
|
||||
System::death(level);
|
||||
}
|
||||
|
||||
bool FSM::active() {
|
||||
|
@ -434,11 +438,11 @@ namespace gui {
|
|||
|
||||
void FSM::handle_world_events() {
|
||||
using eGUI = Events::GUI;
|
||||
auto& world = *$level.world;
|
||||
auto world = Game::current_world();
|
||||
|
||||
while(world.has_event<eGUI>()) {
|
||||
auto [evt, entity, data] = world.recv<eGUI>();
|
||||
auto player = world.get_the<Player>();
|
||||
while(world->has_event<eGUI>()) {
|
||||
auto [evt, entity, data] = world->recv<eGUI>();
|
||||
auto player = world->get_the<Player>();
|
||||
|
||||
// HERE: this has to go, unify these events and just use them in the state machine directly
|
||||
|
||||
|
@ -463,7 +467,7 @@ namespace gui {
|
|||
event(Event::START_COMBAT);
|
||||
break;
|
||||
case eGUI::ENTITY_SPAWN: {
|
||||
auto& sprite = world.get<components::Sprite>(entity);
|
||||
auto& sprite = world->get<components::Sprite>(entity);
|
||||
$main_ui.$rayview->update_sprite(entity, sprite);
|
||||
$main_ui.dirty();
|
||||
run_systems();
|
||||
|
@ -489,7 +493,7 @@ namespace gui {
|
|||
event(Event::AIM_CLICK);
|
||||
break;
|
||||
case eGUI::LOOT_ITEM: {
|
||||
dbc::check(world.has<components::InventoryItem>(entity),
|
||||
dbc::check(world->has<components::InventoryItem>(entity),
|
||||
"INVALID LOOT_ITEM, that entity has no InventoryItem");
|
||||
$loot_ui.add_loose_item(entity);
|
||||
event(Event::LOOT_ITEM);
|
||||
|
@ -500,7 +504,7 @@ namespace gui {
|
|||
event(Event::LOOT_OPEN);
|
||||
} break;
|
||||
case eGUI::HP_STATUS:
|
||||
System::player_status($level);
|
||||
System::player_status(Game::current());
|
||||
break;
|
||||
case eGUI::NEW_RITUAL:
|
||||
$combat_ui.init();
|
||||
|
@ -543,16 +547,15 @@ namespace gui {
|
|||
}
|
||||
|
||||
void FSM::next_level() {
|
||||
$levels.create_level($level.world);
|
||||
$level = $levels.next();
|
||||
auto& level = Game::create_level();
|
||||
|
||||
$status_ui.update_level($level);
|
||||
$map_ui.update_level($level);
|
||||
$combat_ui.update_level($level);
|
||||
$main_ui.update_level($level);
|
||||
$loot_ui.update_level($level);
|
||||
$status_ui.update_level(level);
|
||||
$map_ui.update_level(level);
|
||||
$combat_ui.update_level(level);
|
||||
$main_ui.update_level(level);
|
||||
$loot_ui.update_level(level);
|
||||
|
||||
$boss_fight_ui = $levels.create_bossfight($level.world);
|
||||
$boss_fight_ui = Game::create_bossfight();
|
||||
$boss_fight_ui->init();
|
||||
|
||||
run_systems();
|
||||
|
|
|
@ -35,10 +35,8 @@ namespace gui {
|
|||
bool autowalking = false;
|
||||
bool $map_open = false;
|
||||
int $temp_attack_id = 0;
|
||||
LevelManager $levels;
|
||||
DebugUI $debug_ui;
|
||||
MainUI $main_ui;
|
||||
GameLevel $level;
|
||||
shared_ptr<BossFightUI> $boss_fight_ui = nullptr;
|
||||
CombatUI $combat_ui;
|
||||
StatusUI $status_ui;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue