Very basic attack system.

This commit is contained in:
Zed A. Shaw 2025-02-10 14:06:38 -05:00
parent 6bca6d021e
commit abd843d5ec
5 changed files with 40 additions and 11 deletions

36
gui.cpp
View file

@ -94,6 +94,7 @@ namespace gui {
switch($state) {
FSM_STATE(State, START, ev);
FSM_STATE(State, MOVING, ev);
FSM_STATE(State, ATTACKING, ev);
FSM_STATE(State, MAPPING, ev);
FSM_STATE(State, ROTATING, ev);
FSM_STATE(State, IDLE, ev);
@ -141,6 +142,18 @@ namespace gui {
}
}
void FSM::ATTACKING(Event ev) {
fmt::println("ATTACKING! {}", $rotation);
switch(ev) {
case Event::ATTACK:
run_systems();
$rotation = $rotation < 0.0f ? 0.0f : -33.0f;
break;
default:
state(State::IDLE);
}
}
void FSM::ROTATING(Event ) {
if($camera.play_rotate($rayview)) {
state(State::IDLE);
@ -149,6 +162,7 @@ namespace gui {
void FSM::IDLE(Event ev) {
using FU = Event;
$rotation = -10.0f;
switch(ev) {
case FU::QUIT:
@ -178,6 +192,11 @@ namespace gui {
case FU::MAP_OPEN:
state(State::MAPPING);
break;
case FU::ATTACK:
fmt::println("ATTACK IN IDLE!");
draw_weapon();
state(State::ATTACKING);
break;
case FU::CLOSE:
dbc::log("Nothing to close.");
break;
@ -229,6 +248,10 @@ namespace gui {
case KEY::A:
event(Event::MOVE_LEFT);
break;
case KEY::Space:
$rotation = 0;
event(Event::ATTACK);
break;
case KEY::R:
$stats.reset();
break;
@ -258,8 +281,12 @@ namespace gui {
rect.setFillColor({50, 50, 50});
$window.draw(rect);
auto player = $level.world->get_the<Player>();
auto player_combat = $level.world->get<Combat>(player.entity);
$text.setString(
fmt::format("FPS\n"
"HP: {}\n"
"mean:{:>8.5}\n"
"sdev: {:>8.5}\n"
"min: {:>8.5}\n"
@ -270,7 +297,7 @@ namespace gui {
"Debug? {}\n\n"
"dir: {:>2.02},{:>2.02}\n"
"pos: {:>2.02},{:>2.02}\n\n",
$stats.mean(), $stats.stddev(), $stats.min,
player_combat.hp, $stats.mean(), $stats.stddev(), $stats.min,
$stats.max, $stats.n, VSYNC,
FRAME_LIMIT, DEBUG_BUILD, $rayview.$dir_x,
$rayview.$dir_y, $rayview.$pos_x, $rayview.$pos_y));
@ -294,16 +321,11 @@ namespace gui {
$stats.sample(1/elapsed.count());
draw_gui();
// draw_weapon();
draw_weapon();
$window.display();
}
void FSM::mouse() {
if(sf::Mouse::isButtonPressed(sf::Mouse::Button::Left)) {
$rotation = -30.0f;
} else {
$rotation = -10.0f;
}
}
void FSM::generate_map() {