You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
1.6 KiB
88 lines
1.6 KiB
#pragma once
|
|
#include "raycaster.hpp"
|
|
#include "constants.hpp"
|
|
#include "stats.hpp"
|
|
#include "levelmanager.hpp"
|
|
#include "camera.hpp"
|
|
#include "fsm.hpp"
|
|
#include "render.hpp"
|
|
#include "panel.hpp"
|
|
#include <ftxui/dom/canvas.hpp>
|
|
|
|
using ftxui::Canvas;
|
|
|
|
namespace gui {
|
|
class MapViewUI : public Panel {
|
|
public:
|
|
Canvas $canvas;
|
|
GameLevel $level;
|
|
|
|
MapViewUI(GameLevel &level);
|
|
void create_render();
|
|
void resize_canvas();
|
|
void draw_map();
|
|
void update_level(GameLevel &level);
|
|
};
|
|
|
|
|
|
enum class State {
|
|
START,
|
|
MOVING,
|
|
MAPPING,
|
|
ROTATING,
|
|
IDLE,
|
|
END
|
|
};
|
|
|
|
enum class Event {
|
|
STARTED,
|
|
TICK,
|
|
MOVE_FORWARD,
|
|
MOVE_BACK,
|
|
MOVE_LEFT,
|
|
MOVE_RIGHT,
|
|
MAP_OPEN,
|
|
CLOSE,
|
|
ROTATE_LEFT,
|
|
ROTATE_RIGHT,
|
|
QUIT
|
|
};
|
|
|
|
class FSM : public DeadSimpleFSM<State, Event> {
|
|
public:
|
|
float $rotation = -30.0f;
|
|
Point $player{0,0};
|
|
LevelManager $levels;
|
|
sf::RenderWindow $window;
|
|
SFMLRender $renderer;
|
|
GameLevel $level;
|
|
MapViewUI $map_view;
|
|
CameraLOL $camera;
|
|
sf::Font $font;
|
|
sf::Text $text;
|
|
Stats $stats;
|
|
TexturePack $textures;
|
|
Raycaster $rayview;
|
|
|
|
FSM();
|
|
|
|
void event(Event ev);
|
|
|
|
void START(Event );
|
|
void MOVING(Event );
|
|
void MAPPING(Event);
|
|
void ROTATING(Event );
|
|
void IDLE(Event ev);
|
|
void END(Event ev);
|
|
|
|
void try_move(int dir, bool strafe);
|
|
void keyboard();
|
|
void draw_weapon();
|
|
void draw_gui();
|
|
void render();
|
|
void mouse();
|
|
void generate_map();
|
|
bool active();
|
|
void run_systems();
|
|
};
|
|
}
|
|
|