animator bugs
authorhgn <hgodden00@gmail.com>
Wed, 19 Jul 2023 23:54:34 +0000 (00:54 +0100)
committerhgn <hgodden00@gmail.com>
Wed, 19 Jul 2023 23:55:28 +0000 (00:55 +0100)
player_render.c
player_walk.c
player_walk.h
skaterift.c

index d0d14a4c5617ff8470415ceb91c266fd0e1ecf31..38e65867faa16bb6a4c7ee6bdfa749389ae316a6 100644 (file)
@@ -162,15 +162,15 @@ VG_STATIC void player_apply_pose_to_skeleton( player_instance *player ){
 
 VG_STATIC void player__animate( player_instance *player ){
    if( _player_animate[ player->subsystem ] && 
-       _player_pose[ player->subsystem ] ){
+      _player_pose[ player->subsystem ] ){
       _player_animate[ player->subsystem ]( player );
       _player_pose[ player->subsystem ]( player, &player->pose );
 
-      player_pose *pose = &player->pose;
 
       struct skeleton *sk = &player->playeravatar->sk;
 
       if( player->holdout_time > 0.0f ){
+         player_pose *pose = &player->pose;
          skeleton_lerp_pose( sk, 
                              pose->keyframes, player->holdout_pose.keyframes, 
                              player->holdout_time, pose->keyframes );
index 077dfd9a823d2cffa59acb10abd16323bc14cb7a..815e4b4a70f81ade5c718023fa6ec1cd82b719a5 100644 (file)
@@ -660,12 +660,12 @@ VG_STATIC void player__walk_post_update( player_instance *player ){
 
 
    int walk_phase = 0;
-   if( vg_fractf(w->walk_timer) > 0.5f )
+   if( vg_fractf(w->state.walk_timer) > 0.5f )
       walk_phase = 1;
    else
       walk_phase = 0;
 
-   if( (w->step_phase != walk_phase) && 
+   if( (w->state.step_phase != walk_phase) && 
        (w->state.activity == k_walk_activity_ground ) )
    {
       audio_lock();
@@ -692,7 +692,7 @@ VG_STATIC void player__walk_post_update( player_instance *player ){
       audio_unlock();
    }
 
-   w->step_phase = walk_phase;
+   w->state.step_phase = walk_phase;
 }
 
 VG_STATIC void player__walk_animate( player_instance *player ){
@@ -720,11 +720,11 @@ VG_STATIC void player__walk_animate( player_instance *player ){
             run_norm  = 30.0f/(float)w->anim_run->length,
             walk_adv  = vg_lerpf( walk_norm, run_norm, w->move_speed );
 
-      w->walk_timer += walk_adv * vg.time_delta;
-   }
-   else{
-      w->walk_timer = 0.0f;
+      w->state.walk_timer += walk_adv * vg.time_delta;
    }
+   else
+      w->state.walk_timer = 0.0f;
+   animator->walk_timer = w->state.walk_timer;
 
    if( !player->immobile )
       rb_extrapolate( &player->rb, animator->root_co, animator->root_q );
@@ -796,10 +796,11 @@ VG_STATIC void player__walk_pose( player_instance *player, player_pose *pose ){
    v3_copy( animator->root_co, pose->root_co );
    v4_copy( animator->root_q, pose->root_q );
    pose->board.lean = 0.0f;
+   pose->type = k_player_pose_type_ik;
 
    float walk_norm = (float)w->anim_walk->length/30.0f,
          run_norm  = (float)w->anim_run->length/30.0f,
-         t = w->walk_timer,
+         t = animator->walk_timer,
          l = vg_clampf( animator->run*15.0f, 0.0f, 1.0f ),
          idle_walk = vg_clampf( (animator->run-0.1f)/(1.0f-0.1f), 0.0f, 1.0f );
 
index 3dcdbd8001bbbe14a2fe634ac3431eba81ee6d54..d422e752b44c008a4c9ce9c9419c870ae8363f18 100644 (file)
@@ -38,13 +38,13 @@ struct player_walk{
 
       int jump_queued;
       f64 jump_input_time;
+
+      f32 walk_timer;
+      int step_phase;
    }
    state;
 
-   f32 move_speed,
-       walk_timer;
-
-   int step_phase;
+   f32 move_speed;
 
    enum mdl_surface_prop surface;
    struct skeleton_anim *anim_walk, *anim_run, *anim_idle, *anim_jump,
@@ -57,6 +57,8 @@ struct player_walk{
           run,
           walk;
 
+      f32 walk_timer;
+
       v3f foot_anchor;
       enum walk_outro outro_type;
       f32 outro_t,
index f790aefc2cd9373e828f0536c39a1f1b2029d9f8..3e3af2319df270f932a20c5e2a3d080f187da196 100644 (file)
@@ -480,12 +480,13 @@ VG_STATIC void skaterift_composite_maincamera(void){
 }
 
 VG_STATIC void render_main_game(void){
-   player__animate( &localplayer );
    if( skaterift.activity == k_skaterift_replay ){
       player__animate_from_replay( &localplayer, &skaterift.replay );
    }
-   else
+   else{
+      player__animate( &localplayer );
       skaterift_record_frame( &skaterift.replay, 0 );
+   }
    player__pre_render( &localplayer );
 
    skaterift_composite_maincamera();
@@ -508,8 +509,6 @@ VG_STATIC void render_main_game(void){
                                    it up with the oblique rendering inside the
                                    portals */
 
-   //world_render_challenges( localplayer.viewable_world );
-
    /* continue with variable rate */
    render_scene_gate_subview();