crawl was redesigned to crwal1 and crawl2

This commit is contained in:
Filipriec
2025-11-16 22:40:09 +01:00
parent cf07c9c47a
commit 42ad5ee7a2
7 changed files with 75 additions and 36 deletions

View File

@@ -54,8 +54,20 @@ void render_loop(int speed) {
}
if (uart_event == UartEvent::Triggered) {
// start crawl frame for x time
player_state.start_crawl();
const char* msg = uart.get_message();
PlayerState current = player_state.get_state();
if (msg && strstr(msg, "crawl2")) {
// enter Crawl2 only if currently crawling in crawl1
if (current == PlayerState::Crawl1)
player_state.start_crawl(PlayerState::Crawl2);
}
else if (msg && strstr(msg, "crawl")) {
// trigger normal crawl from walk/run
if (current == PlayerState::Walk || current == PlayerState::Run)
player_state.start_crawl(PlayerState::Crawl1);
}
need_redraw = true;
}

View File

@@ -27,12 +27,20 @@ void draw_character(int x, int y, MovementType movement, int frame_index) {
character_height = CHARACTER_RUN_FRAME_HEIGHT;
break;
case MovementType::Crawl:
total_frames = CHARACTER_CRAWL_FRAME_COUNT;
case MovementType::Crawl1:
total_frames = CHARACTER_CRAWL1_FRAME_COUNT;
if (frame_index < 0 || frame_index >= total_frames)
frame_index = 0;
character = CHARACTER_CRAWL_FRAMES[frame_index];
character_height = CHARACTER_CRAWL_FRAME_HEIGHT;
character = CHARACTER_CRAWL1_FRAMES[frame_index];
character_height = CHARACTER_CRAWL1_FRAME_HEIGHT;
break;
case MovementType::Crawl2:
total_frames = CHARACTER_CRAWL2_FRAME_COUNT;
if (frame_index < 0 || frame_index >= total_frames)
frame_index = 0;
character = CHARACTER_CRAWL2_FRAMES[frame_index];
character_height = CHARACTER_CRAWL2_FRAME_HEIGHT;
break;
}

View File

@@ -4,7 +4,8 @@
enum class MovementType {
Walk,
Run,
Crawl
Crawl1,
Crawl2
};
// Draw the player object starting at given (x, y)

View File

@@ -18,8 +18,11 @@ CharacterPosition get_aligned_frame_position(CharacterPosition base,
case MovementType::Run:
character_height = CHARACTER_RUN_FRAME_HEIGHT;
break;
case MovementType::Crawl:
character_height = CHARACTER_CRAWL_FRAME_HEIGHT;
case MovementType::Crawl1:
character_height = CHARACTER_CRAWL1_FRAME_HEIGHT;
break;
case MovementType::Crawl2:
character_height = CHARACTER_CRAWL2_FRAME_HEIGHT;
break;
}