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

@@ -8,6 +8,7 @@
#include <cmath>
namespace {
// Vygenerovane AI, proste to nahodne vymiena obrazky - assests
// Frame selector with two regimes:
// 1) Normal (speed <= 6): pingpong with holds at both ends
// 2) Highspeed (speed >= 7): 0, random(1..last-1), last, random(1..last-1)...
@@ -92,22 +93,26 @@ static inline int compute_frame_index(int frame_count,
void WalkingState::update() {
// stop crawling after duration
if (current_state == PlayerState::Crawl &&
if ((current_state == PlayerState::Crawl1 ||
current_state == PlayerState::Crawl2) &&
state_timer.elapsed_time() >= CRAWL_DURATION) {
current_state = PlayerState::Walk;
state_timer.stop();
}
}
void WalkingState::start_crawl() {
current_state = PlayerState::Crawl;
void WalkingState::start_crawl(PlayerState crawl_type) {
if (crawl_type != PlayerState::Crawl1 && crawl_type != PlayerState::Crawl2)
return;
current_state = crawl_type;
state_timer.reset();
state_timer.start();
}
void WalkingState::set_state(PlayerState s) {
if (current_state != s) {
walk_index = run_index = crawl_index = 0;
walk_index = run_index = crawl1_index = crawl2_index = 0;
phase = 0.0f;
}
current_state = s;
@@ -127,18 +132,19 @@ void WalkingState::set_motion_state_for_speed(int player_speed, int ground_speed
void WalkingState::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);
run_index = compute_frame_index(CHARACTER_RUN_FRAME_COUNT, player_speed, tick_counter);
break;
case PlayerState::Walk:
walk_index =
compute_frame_index(CHARACTER_WALK_FRAME_COUNT, player_speed, tick_counter);
walk_index = compute_frame_index(CHARACTER_WALK_FRAME_COUNT, player_speed, tick_counter);
break;
case PlayerState::Crawl:
crawl_index =
compute_frame_index(CHARACTER_CRAWL_FRAME_COUNT, player_speed, tick_counter);
case PlayerState::Crawl1:
crawl1_index = compute_frame_index(CHARACTER_CRAWL1_FRAME_COUNT, player_speed, tick_counter);
break;
case PlayerState::Crawl2:
crawl2_index = compute_frame_index(CHARACTER_CRAWL2_FRAME_COUNT, player_speed, tick_counter);
break;
}
}
@@ -154,9 +160,13 @@ FrameSelection WalkingState::get_frame_selection() const {
f.movement = MovementType::Run;
f.frame_index = run_index;
break;
case PlayerState::Crawl:
f.movement = MovementType::Crawl;
f.frame_index = crawl_index;
case PlayerState::Crawl1:
f.movement = MovementType::Crawl1;
f.frame_index = crawl1_index;
break;
case PlayerState::Crawl2:
f.movement = MovementType::Crawl2;
f.frame_index = crawl2_index;
break;
default:
f.movement = MovementType::Walk;