diff --git a/semestralka1/src/background_dark_inverted.h b/semestralka1/src/assets/background_frame.h similarity index 99% rename from semestralka1/src/background_dark_inverted.h rename to semestralka1/src/assets/background_frame.h index fe01584..606c590 100644 --- a/semestralka1/src/background_dark_inverted.h +++ b/semestralka1/src/assets/background_frame.h @@ -1,4 +1,4 @@ -// background_dark_inverted.h +// src/assets/background_frame.h #pragma once static const char *BACKGROUND_MASK[] = { diff --git a/semestralka1/src/render/player_mask.h b/semestralka1/src/assets/character_frames.h similarity index 97% rename from semestralka1/src/render/player_mask.h rename to semestralka1/src/assets/character_frames.h index 9e521c7..f5f6824 100644 --- a/semestralka1/src/render/player_mask.h +++ b/semestralka1/src/assets/character_frames.h @@ -1,4 +1,4 @@ -// src/render/player_mask.h +// src/assets/character_frames.h #pragma once diff --git a/semestralka1/src/game/state.cpp b/semestralka1/src/game/state.cpp new file mode 100644 index 0000000..6ad3829 --- /dev/null +++ b/semestralka1/src/game/state.cpp @@ -0,0 +1,38 @@ +// src/game/state.cpp +#include "state.h" + +void WalkingState::update() { + // stop crawling after duration + if (current_state == PlayerState::Crawl1 && + state_timer.elapsed_time() >= CRAWL_DURATION) { + current_state = PlayerState::Walk1; + state_timer.stop(); + } +} + +void WalkingState::start_crawl() { + current_state = PlayerState::Crawl1; + state_timer.reset(); + state_timer.start(); +} + +void WalkingState::toggle_walk_frame() { + if (current_state == PlayerState::Walk1) { + current_state = PlayerState::Walk2; + } else if (current_state == PlayerState::Walk2) { + current_state = PlayerState::Walk1; + } +} + +CharacterFrame WalkingState::get_character_frame() const { + switch (current_state) { + case PlayerState::Walk1: + return CharacterFrame::Walk1; + case PlayerState::Walk2: + return CharacterFrame::Walk2; + case PlayerState::Crawl1: + return CharacterFrame::Crawl1; + default: + return CharacterFrame::Walk1; + } +} diff --git a/semestralka1/src/game/state.h b/semestralka1/src/game/state.h new file mode 100644 index 0000000..850b324 --- /dev/null +++ b/semestralka1/src/game/state.h @@ -0,0 +1,26 @@ +// src/game/state.h +#pragma once +#include "mbed.h" +#include "../assets/character_frames.h" + +constexpr auto CRAWL_DURATION = 300ms; + +enum class PlayerState { Walk1, Walk2, Crawl1 }; + +class WalkingState { +private: + PlayerState current_state = PlayerState::Walk1; + Timer state_timer; + +public: + // Update state (handles crawl timeout) + void update(); + + // State transitions + void start_crawl(); + void toggle_walk_frame(); + + // Getters + PlayerState get_state() const { return current_state; } + CharacterFrame get_character_frame() const; +}; diff --git a/semestralka1/src/main.cpp b/semestralka1/src/main.cpp index ee16c71..9224c69 100644 --- a/semestralka1/src/main.cpp +++ b/semestralka1/src/main.cpp @@ -1,7 +1,7 @@ // main.cpp #include "mbed.h" -#include "background_dark_inverted.h" +#include "assets/background_frame.h" #include "render/loop.h" #define TARGET_TX_PIN USBTX diff --git a/semestralka1/src/render/background.cpp b/semestralka1/src/render/background.cpp index fa6f150..c73c55c 100644 --- a/semestralka1/src/render/background.cpp +++ b/semestralka1/src/render/background.cpp @@ -1,6 +1,6 @@ // src/render/background.cpp -#include "../background_dark_inverted.h" +#include "../assets/background_frame.h" #include #include diff --git a/semestralka1/src/render/loop.cpp b/semestralka1/src/render/loop.cpp index 5385464..b3d4ffe 100644 --- a/semestralka1/src/render/loop.cpp +++ b/semestralka1/src/render/loop.cpp @@ -1,11 +1,11 @@ // src/render/loop.cpp #include "loop.h" -#include "../background_dark_inverted.h" +#include "../assets/background_frame.h" #include "player_positioning.h" #include "background.h" #include "mbed.h" #include "player.h" -#include "player_mask.h" +#include "../assets/character_frames.h" #include extern BufferedSerial serial_port; diff --git a/semestralka1/src/render/player.cpp b/semestralka1/src/render/player.cpp index ea7ec42..4450a0a 100644 --- a/semestralka1/src/render/player.cpp +++ b/semestralka1/src/render/player.cpp @@ -1,6 +1,6 @@ // src/render/player.cpp #include "player.h" -#include "player_mask.h" +#include "../assets/character_frames.h" #include void draw_character(int x, int y, CharacterFrame frame) { diff --git a/semestralka1/src/render/player.h b/semestralka1/src/render/player.h index 7785ed1..9804392 100644 --- a/semestralka1/src/render/player.h +++ b/semestralka1/src/render/player.h @@ -1,6 +1,6 @@ // src/render/player.h #pragma once -#include "player_mask.h" +#include "../assets/character_frames.h" // Draw the player object starting at given (x, y) void draw_character(int x, int y, CharacterFrame frame); diff --git a/semestralka1/src/render/player_positioning.cpp b/semestralka1/src/render/player_positioning.cpp index ec382e3..4c42a1a 100644 --- a/semestralka1/src/render/player_positioning.cpp +++ b/semestralka1/src/render/player_positioning.cpp @@ -1,6 +1,6 @@ // src/render/player_positioning.cpp #include "player_positioning.h" -#include "../background_dark_inverted.h" +#include "../assets/background_frame.h" #include // Convert a pivot coordinate (bottom-left) to the top-left draw position diff --git a/semestralka1/src/render/player_positioning.h b/semestralka1/src/render/player_positioning.h index 13ad894..376e933 100644 --- a/semestralka1/src/render/player_positioning.h +++ b/semestralka1/src/render/player_positioning.h @@ -1,7 +1,7 @@ // src/render/player_positioning.h #pragma once -#include "../background_dark_inverted.h" -#include "player_mask.h" +#include "../assets/background_frame.h" +#include "../assets/character_frames.h" struct CharacterPosition { int x;