Started the overlay UI but need to make it possible to add/remove components to it.
This commit is contained in:
parent
59d10a4506
commit
70a9420c11
8 changed files with 91 additions and 43 deletions
|
@ -1,5 +1,4 @@
|
|||
#pragma once
|
||||
#include "panel.hpp"
|
||||
#include "levelmanager.hpp"
|
||||
#include <SFML/Graphics/RenderWindow.hpp>
|
||||
#include <SFML/Graphics/Font.hpp>
|
||||
|
@ -17,7 +16,6 @@ namespace gui {
|
|||
void render(TexturePack& texture);
|
||||
void draw(sf::RenderWindow& window);
|
||||
void update_level(GameLevel &level) { $level = level; }
|
||||
void click(int x, int y);
|
||||
void set_damage(float percent);
|
||||
};
|
||||
}
|
||||
|
|
12
guecs.cpp
12
guecs.cpp
|
@ -51,17 +51,7 @@ namespace guecs {
|
|||
});
|
||||
|
||||
$world.query<lel::Cell, Sprite>([&](auto, auto &cell, auto &sprite) {
|
||||
auto sprite_texture = textures.get(sprite.name);
|
||||
sprite.texture = sprite_texture.texture;
|
||||
sprite.sprite = make_shared<sf::Sprite>(*sprite.texture);
|
||||
sprite.sprite->setPosition({
|
||||
float(cell.x + GUECS_PADDING),
|
||||
float(cell.y + GUECS_PADDING)});
|
||||
|
||||
auto size = sprite.texture->getSize();
|
||||
sprite.sprite->setScale({
|
||||
float(cell.w - GUECS_PADDING * 2) / size.x,
|
||||
float(cell.h - GUECS_PADDING * 2) / size.y});
|
||||
sprite.init(cell, textures);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
14
guecs.hpp
14
guecs.hpp
|
@ -56,6 +56,20 @@ namespace guecs {
|
|||
std::string name;
|
||||
std::shared_ptr<sf::Sprite> sprite = nullptr;
|
||||
std::shared_ptr<sf::Texture> texture = nullptr;
|
||||
|
||||
void init(lel::Cell &cell, TexturePack &textures) {
|
||||
auto sprite_texture = textures.get(name);
|
||||
texture = sprite_texture.texture;
|
||||
sprite = make_shared<sf::Sprite>(*texture);
|
||||
sprite->setPosition({
|
||||
float(cell.x + GUECS_PADDING),
|
||||
float(cell.y + GUECS_PADDING)});
|
||||
|
||||
auto size = texture->getSize();
|
||||
sprite->setScale({
|
||||
float(cell.w - GUECS_PADDING * 2) / size.x,
|
||||
float(cell.h - GUECS_PADDING * 2) / size.y});
|
||||
}
|
||||
};
|
||||
|
||||
struct Rectangle {
|
||||
|
|
37
gui.cpp
37
gui.cpp
|
@ -18,6 +18,7 @@ namespace gui {
|
|||
$map_view($level),
|
||||
$combat_view($level),
|
||||
$status_view($level),
|
||||
$overlay_view($level),
|
||||
$font{FONT_FILE_NAME},
|
||||
$text{$font},
|
||||
$rayview($textures, RAY_VIEW_WIDTH, RAY_VIEW_HEIGHT)
|
||||
|
@ -53,7 +54,7 @@ namespace gui {
|
|||
$rayview.position_camera($player.x + 0.5, $player.y + 0.5);
|
||||
|
||||
$combat_view.render($textures);
|
||||
|
||||
$overlay_view.render($textures);
|
||||
$status_view.render($textures);
|
||||
$status_view.log("Welcome to the game!");
|
||||
|
||||
|
@ -94,17 +95,11 @@ namespace gui {
|
|||
void FSM::ATTACKING(Event ev) {
|
||||
using enum Event;
|
||||
switch(ev) {
|
||||
case TICK:
|
||||
$rotation_count++;
|
||||
|
||||
// just do 10 ticks
|
||||
if($rotation_count % 10 == 0) {
|
||||
System::combat($level);
|
||||
run_systems();
|
||||
$rotation = -10.0f;
|
||||
state(State::IN_COMBAT);
|
||||
}
|
||||
break;
|
||||
case TICK: {
|
||||
System::combat($level);
|
||||
run_systems();
|
||||
state(State::IN_COMBAT);
|
||||
} break;
|
||||
case STOP_COMBAT:
|
||||
dbc::log("Exiting ATTACKING STATE");
|
||||
state(State::IDLE);
|
||||
|
@ -186,7 +181,6 @@ namespace gui {
|
|||
switch(ev) {
|
||||
case ATTACK:
|
||||
$status_view.log("You attack!");
|
||||
$rotation = -30.0f;
|
||||
state(State::ATTACKING);
|
||||
break;
|
||||
case ROTATE_LEFT:
|
||||
|
@ -281,14 +275,6 @@ namespace gui {
|
|||
$combat_view.set_damage(float(player_combat.hp) / float(player_combat.max_hp));
|
||||
}
|
||||
|
||||
void FSM::draw_weapon() {
|
||||
return;
|
||||
auto weapon = $rayview.$textures.sword.sprite;
|
||||
weapon->setPosition({SCREEN_WIDTH/2, SCREEN_HEIGHT/2});
|
||||
weapon->setRotation(sf::degrees($rotation));
|
||||
$window.draw(*weapon);
|
||||
}
|
||||
|
||||
void FSM::draw_stats() {
|
||||
auto player = $level.world->get_the<Player>();
|
||||
auto player_combat = $level.world->get<Combat>(player.entity);
|
||||
|
@ -316,16 +302,15 @@ namespace gui {
|
|||
auto player_combat = $level.world->get<Combat>(player.entity);
|
||||
|
||||
if(float(player_combat.hp) / float(player_combat.max_hp) < 0.5) {
|
||||
auto blood = $textures.sprite_textures.at("blood_splatter").sprite;
|
||||
blood->setPosition({RAY_VIEW_X,0});
|
||||
blood->setScale({3.0, 3.0});
|
||||
$window.draw(*blood);
|
||||
$overlay_view.set<guecs::Sprite>("middle", {"blood_splatter"});
|
||||
$overlay_view.$gui.init($textures);
|
||||
}
|
||||
}
|
||||
|
||||
void FSM::draw_gui() {
|
||||
$status_view.draw($window);
|
||||
$combat_view.draw($window);
|
||||
$overlay_view.draw($window);
|
||||
|
||||
auto debug = $level.world->get_the<Debug>();
|
||||
if(debug.FPS) draw_stats();
|
||||
|
@ -345,7 +330,6 @@ namespace gui {
|
|||
|
||||
draw_gui();
|
||||
draw_blood();
|
||||
draw_weapon();
|
||||
}
|
||||
|
||||
$window.display();
|
||||
|
@ -420,7 +404,6 @@ namespace gui {
|
|||
}
|
||||
break;
|
||||
case eGUI::ATTACK:
|
||||
$rotation = 0;
|
||||
event(Event::ATTACK);
|
||||
break;
|
||||
case eGUI::DEATH: {
|
||||
|
|
5
gui.hpp
5
gui.hpp
|
@ -9,6 +9,7 @@
|
|||
#include "map_view.hpp"
|
||||
#include "combat_ui.hpp"
|
||||
#include "status_ui.hpp"
|
||||
#include "overlay_ui.hpp"
|
||||
|
||||
namespace gui {
|
||||
enum class State {
|
||||
|
@ -43,8 +44,6 @@ namespace gui {
|
|||
class FSM : public DeadSimpleFSM<State, Event> {
|
||||
public:
|
||||
// ZED: these two will go away soon
|
||||
int $rotation_count = 0;
|
||||
float $rotation = -10.0f;
|
||||
bool $draw_stats = false;
|
||||
Point $player{0,0};
|
||||
LevelManager $levels;
|
||||
|
@ -54,6 +53,7 @@ namespace gui {
|
|||
MapViewUI $map_view;
|
||||
CombatUI $combat_view;
|
||||
StatusUI $status_view;
|
||||
OverlayUI $overlay_view;
|
||||
CameraLOL $camera;
|
||||
sf::Font $font;
|
||||
sf::Text $text;
|
||||
|
@ -77,7 +77,6 @@ namespace gui {
|
|||
|
||||
void try_move(int dir, bool strafe);
|
||||
void keyboard();
|
||||
void draw_weapon();
|
||||
void draw_stats();
|
||||
void draw_gui();
|
||||
void draw_blood();
|
||||
|
|
|
@ -71,6 +71,7 @@ sources = [
|
|||
'map_view.cpp',
|
||||
'matrix.cpp',
|
||||
'matrix.cpp',
|
||||
'overlay_ui.cpp',
|
||||
'panel.cpp',
|
||||
'pathing.cpp',
|
||||
'rand.cpp',
|
||||
|
|
36
overlay_ui.cpp
Normal file
36
overlay_ui.cpp
Normal file
|
@ -0,0 +1,36 @@
|
|||
#include "overlay_ui.hpp"
|
||||
#include "constants.hpp"
|
||||
#include "color.hpp"
|
||||
#include "events.hpp"
|
||||
|
||||
namespace gui {
|
||||
using namespace guecs;
|
||||
|
||||
OverlayUI::OverlayUI(GameLevel level) :
|
||||
$level(level)
|
||||
{
|
||||
$gui.position(RAY_VIEW_X, RAY_VIEW_Y, RAY_VIEW_WIDTH, RAY_VIEW_HEIGHT);
|
||||
$gui.layout(
|
||||
"[top_left|top|top_right]"
|
||||
"[*%(300,300)middle|_|_]"
|
||||
"[_|_|_]"
|
||||
"[_|_|_]"
|
||||
"[bottom_left|bottom|bottom_right]"
|
||||
);
|
||||
}
|
||||
|
||||
void OverlayUI::render(TexturePack &textures) {
|
||||
auto &world = $gui.world();
|
||||
for(auto &[name, cell] : $gui.cells()) {
|
||||
auto region = $gui.entity(name);
|
||||
$name_ents.insert_or_assign(name, region);
|
||||
world.set<lel::Cell>(region, cell);
|
||||
}
|
||||
$gui.init(textures);
|
||||
}
|
||||
|
||||
void OverlayUI::draw(sf::RenderWindow& window) {
|
||||
$gui.render(window);
|
||||
}
|
||||
|
||||
}
|
27
overlay_ui.hpp
Normal file
27
overlay_ui.hpp
Normal file
|
@ -0,0 +1,27 @@
|
|||
#pragma once
|
||||
#include "levelmanager.hpp"
|
||||
#include <SFML/Graphics/RenderWindow.hpp>
|
||||
#include <SFML/Graphics/Font.hpp>
|
||||
#include "guecs.hpp"
|
||||
|
||||
namespace gui {
|
||||
class OverlayUI {
|
||||
public:
|
||||
guecs::UI $gui;
|
||||
GameLevel $level;
|
||||
std::unordered_map<std::string, DinkyECS::Entity> $name_ents;
|
||||
|
||||
OverlayUI(GameLevel level);
|
||||
|
||||
void render(TexturePack& texture);
|
||||
void draw(sf::RenderWindow& window);
|
||||
void click(int x, int y);
|
||||
|
||||
template <typename Comp>
|
||||
// this should be in the GUECS really
|
||||
void set(std::string name, Comp val) {
|
||||
auto ent = $name_ents.at(name);
|
||||
$level.world->set<Comp>(ent, val);
|
||||
}
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue