Skip to content
This repository was archived by the owner on Feb 24, 2025. It is now read-only.

Commit 65dc1b3

Browse files
committed
fixed state change logic in Anim_SetNextFrame function;
fixed lua_GetEntityAnimState function;
1 parent fe6828d commit 65dc1b3

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

src/engine.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -801,6 +801,10 @@ void Engine_MainLoop()
801801
engine_set_zero_time = 0;
802802
time = 0.0f;
803803
}
804+
else if(time > 1.0f / 30.0f)
805+
{
806+
time = 1.0f / 30.0f;
807+
}
804808

805809
engine_frame_time = time;
806810

src/script.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4229,7 +4229,7 @@ int lua_GetEntityAnimState(lua_State * lua)
42294229
{
42304230
if(ss_anim->type == anim_type_id)
42314231
{
4232-
lua_pushinteger(lua, ent->bf->animations.next_state);
4232+
lua_pushinteger(lua, ss_anim->next_state);
42334233
return 1;
42344234
}
42354235
}

src/skeletal_model.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -775,7 +775,7 @@ int Anim_SetNextFrame(struct ss_animation_s *ss_anim, float time)
775775
anim_dispatch_p disp = stc->anim_dispatch;
776776
for(uint16_t i = 0; i < stc->anim_dispatch_count; i++, disp++)
777777
{
778-
if((disp->frame_high >= disp->frame_low) && ((new_frame >= disp->frame_low) && (new_frame <= disp->frame_high)))
778+
if((next_anim->max_frame == 1) || (disp->frame_high >= disp->frame_low) && ((new_frame >= disp->frame_low) && (new_frame <= disp->frame_high)))
779779
{
780780
ss_anim->current_animation = ss_anim->next_animation;
781781
ss_anim->current_frame = ss_anim->next_frame;
@@ -794,12 +794,20 @@ int Anim_SetNextFrame(struct ss_animation_s *ss_anim, float time)
794794
/*
795795
* Check next anim if frame >= max_frame
796796
*/
797-
if(new_frame + 1 > next_anim->max_frame)
797+
if(new_frame >= next_anim->max_frame)
798798
{
799799
ss_anim->current_animation = ss_anim->next_animation;
800800
ss_anim->current_frame = ss_anim->next_frame;
801801
ss_anim->next_frame = next_anim->next_frame;
802-
ss_anim->next_animation = next_anim->next_anim->id;
802+
if(ss_anim->next_animation != next_anim->next_anim->id)
803+
{
804+
ss_anim->next_animation = next_anim->next_anim->id;
805+
ss_anim->frame_time = (float)ss_anim->next_frame * ss_anim->period + dt;
806+
}
807+
else
808+
{
809+
ss_anim->frame_time = (float)next_anim->max_frame * ss_anim->period;
810+
}
803811
ss_anim->frame_time = (float)ss_anim->next_frame * ss_anim->period + dt;
804812
ss_anim->current_state = ss_anim->model->animations[ss_anim->next_animation].state_id;
805813
ss_anim->next_state = ss_anim->current_state;

0 commit comments

Comments
 (0)