Exploring raycasters and possibly make a little "doom like" game based on it.
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.
 
 
 
 
 
 
raycaster/gui.hpp

93 lines
1.7 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,
ATTACKING,
MAPPING,
ROTATING,
IDLE,
END
};
enum class Event {
STARTED,
TICK,
MOVE_FORWARD,
MOVE_BACK,
MOVE_LEFT,
MOVE_RIGHT,
MAP_OPEN,
CLOSE,
ROTATE_LEFT,
ROTATE_RIGHT,
ATTACK,
QUIT
};
class FSM : public DeadSimpleFSM<State, Event> {
public:
// ZED: these two will go away soon
int $rotation_count = 0;
float $rotation = -10.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 ATTACKING(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();
};
}