From ca7eac70e43e3ddffd041ce3e2d2b1460164e737 Mon Sep 17 00:00:00 2001 From: Filipriec Date: Thu, 20 Nov 2025 17:37:27 +0100 Subject: [PATCH] movement class --- semestralka1/src/game/state.cpp | 15 ++++++++------- semestralka1/src/game/state.h | 3 ++- semestralka1/src/render/loop.cpp | 27 +++++++++++++-------------- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/semestralka1/src/game/state.cpp b/semestralka1/src/game/state.cpp index 22a26ac..0046f74 100644 --- a/semestralka1/src/game/state.cpp +++ b/semestralka1/src/game/state.cpp @@ -91,27 +91,28 @@ static inline int compute_frame_index(int frame_count, } } // namespace -void WalkingState::update() { +void MovementState::update() { // stop crawling after duration if ((current_state == PlayerState::Crawl1 || current_state == PlayerState::Crawl2) && state_timer.elapsed_time() >= CRAWL_DURATION) { - current_state = PlayerState::Walk; + current_state = previous_state; state_timer.stop(); } } -void WalkingState::start_crawl(PlayerState crawl_type) { +void MovementState::start_crawl(PlayerState crawl_type) { if (crawl_type != PlayerState::Crawl1 && crawl_type != PlayerState::Crawl2) return; + previous_state = current_state; current_state = crawl_type; state_timer.stop(); state_timer.reset(); state_timer.start(); } -void WalkingState::set_state(PlayerState s) { +void MovementState::set_state(PlayerState s) { if (current_state != s) { walk_index = run_index = crawl1_index = crawl2_index = 0; phase = 0.0f; @@ -119,7 +120,7 @@ void WalkingState::set_state(PlayerState s) { current_state = s; } -void WalkingState::set_motion_state_for_speed(int player_speed, int ground_speed) { +void MovementState::set_motion_state_for_speed(int player_speed, int ground_speed) { int relative = player_speed - ground_speed; PlayerState new_state = (relative > 1) ? PlayerState::Run : PlayerState::Walk; if (new_state != current_state) { @@ -130,7 +131,7 @@ void WalkingState::set_motion_state_for_speed(int player_speed, int ground_speed } // TODO THIS NEEDS REDESIGN FOR WALK/RUN -void WalkingState::toggle_walk_frame(float player_speed, int tick_counter) { +void MovementState::toggle_walk_frame(float player_speed, int tick_counter) { switch (current_state) { case PlayerState::Run: run_index = compute_frame_index(CHARACTER_RUN_FRAME_COUNT, player_speed, tick_counter); @@ -150,7 +151,7 @@ void WalkingState::toggle_walk_frame(float player_speed, int tick_counter) { } } -FrameSelection WalkingState::get_frame_selection() const { +FrameSelection MovementState::get_frame_selection() const { FrameSelection f{}; switch (current_state) { case PlayerState::Walk: diff --git a/semestralka1/src/game/state.h b/semestralka1/src/game/state.h index 85cc21a..9978c77 100644 --- a/semestralka1/src/game/state.h +++ b/semestralka1/src/game/state.h @@ -12,9 +12,10 @@ struct FrameSelection { int frame_index; }; -class WalkingState { +class MovementState { private: PlayerState current_state = PlayerState::Walk; + PlayerState previous_state = PlayerState::Walk; Timer state_timer; int walk_index = 0; // cycles 0‑6 int run_index = 0; // cycles 0‑6 diff --git a/semestralka1/src/render/loop.cpp b/semestralka1/src/render/loop.cpp index 242f3a4..c44df0e 100644 --- a/semestralka1/src/render/loop.cpp +++ b/semestralka1/src/render/loop.cpp @@ -26,7 +26,7 @@ constexpr int PLAYER_Y = 6; void draw_mask(const char *unused_filename, int shift, const char *text); void render_loop(int speed) { - WalkingState player_state; + MovementState player_state; AnimationController animation; UartReader uart(serial_port); MovementController mover(PLAYER_X, VIEW_WIDTH); @@ -114,21 +114,20 @@ void render_loop(int speed) { CharacterPosition draw_pos = get_aligned_frame_position(pos, frame.movement, frame.frame_index); draw_character(draw_pos.x, draw_pos.y, frame.movement, frame.frame_index); - for (int i = 0; i < MAX_OBSTACLES; i++) { - if (!obstacle_pool[i].active) - continue; + // for (int i = 0; i < MAX_OBSTACLES; i++) { + // if (!obstacle_pool[i].active) + // continue; - draw_obstacle(obstacle_pool[i].data.x, - obstacle_pool[i].data.y, - obstacle_pool[i].type); + // draw_obstacle(obstacle_pool[i].data.x, obstacle_pool[i].data.y, + // obstacle_pool[i].type); - if (check_collision(pos, frame.movement, obstacle_pool[i].data)) { - printf("\033[2J\033[H"); - printf("GAME OVER\r\n"); - game_over = true; - break; - } - } + // if (check_collision(pos, frame.movement, obstacle_pool[i].data)) { + // printf("\033[2J\033[H"); + // printf("GAME OVER\r\n"); + // game_over = true; + // break; + // } + // } if (game_over) break;