-#ifndef PLAYER_DRIVE_C
-#define PLAYER_DRIVE_C
-
-#include "player.h"
+#include "player_drive.h"
#include "input.h"
-VG_STATIC void player__drive_pre_update( player_instance *player )
+struct player_drive player_drive;
+struct player_subsystem_interface player_subsystem_drive =
+{
+ .pre_update = player__drive_pre_update,
+ .update = player__drive_update,
+ .post_update = player__drive_post_update,
+ .animate = player__drive_animate,
+ .pose = player__drive_pose,
+ .post_animate = player__drive_post_animate,
+ .im_gui = player__drive_im_gui,
+ .bind = player__drive_bind,
+
+ .animator_data = NULL,
+ .animator_size = 0,
+ .name = "Drive"
+};
+
+void player__drive_pre_update(void)
{
- struct player_drive *drive = &player->_drive;
- drivable_vehicle *vehc = drive->vehicle;
+ drivable_vehicle *vehc = player_drive.vehicle;
v2f steer;
joystick_state( k_srjoystick_steer, steer );
- vehc->steer = vg_lerpf( vehc->steer, steer[0] * 0.4f, k_rb_delta * 8.0f );
+ vehc->steer = vg_lerpf( vehc->steer, steer[0] * 0.4f,
+ vg.time_fixed_delta * 8.0f );
vehc->drive = steer[1];
}
-VG_STATIC void player__drive_update( player_instance *player )
-{
-}
+void player__drive_update(void){}
-VG_STATIC void player__drive_post_update( player_instance *player )
+void player__drive_post_update(void)
{
- struct player_drive *drive = &player->_drive;
- v3_copy( drive->vehicle->obj.rb.co, player->rb.co );
- v3_copy( drive->vehicle->obj.rb.v, player->rb.v );
- v4_copy( drive->vehicle->obj.rb.q, player->rb.q );
- v3_copy( drive->vehicle->obj.rb.w, player->rb.w );
+ v3_copy( player_drive.vehicle->rb.co,localplayer.rb.co );
+ v3_copy( player_drive.vehicle->rb.v, localplayer.rb.v );
+ v4_copy( player_drive.vehicle->rb.q, localplayer.rb.q );
+ v3_copy( player_drive.vehicle->rb.w, localplayer.rb.w );
}
-VG_STATIC void player__drive_animate( player_instance *player,
- player_animation *dest )
+void player__drive_animate(void){}
+
+void player__drive_pose( void *animator, player_pose *pose )
{
- struct player_drive *drive = &player->_drive;
- struct skeleton *sk = &player->playeravatar->sk;
- skeleton_sample_anim( sk, drive->anim_drive, 0.0f, dest->pose );
- v3_copy( player->rb.co, dest->root_co );
- v4_copy( player->rb.q, dest->root_q );
+ struct skeleton *sk = &localplayer.skeleton;
+
+ skeleton_sample_anim( sk, player_drive.anim_drive, 0.0f, pose->keyframes );
+ v3_copy( localplayer.rb.co, pose->root_co );
+ v4_copy( localplayer.rb.q, pose->root_q );
}
-VG_STATIC void player__drive_post_animate( player_instance *player )
+void player__drive_post_animate(void)
{
- if( player->cam_control.camera_mode == k_cam_firstperson )
- player->cam_velocity_influence = 0.0f;
+ if( localplayer.cam_control.camera_mode == k_cam_firstperson )
+ localplayer.cam_velocity_influence = 0.0f;
else
- player->cam_velocity_influence = 1.0f;
+ localplayer.cam_velocity_influence = 1.0f;
- rigidbody *rb = &gzoomer.obj.rb;
+ rigidbody *rb = &gzoomer.rb;
float yaw = atan2f( -rb->to_world[2][0], rb->to_world[2][2] ),
pitch = atan2f
(
)
);
- player->angles[0] = yaw;
- player->angles[1] = pitch;
+ localplayer.angles[0] = yaw;
+ localplayer.angles[1] = pitch;
}
-VG_STATIC void player__drive_im_gui( player_instance *player )
+void player__drive_im_gui(void)
{
player__debugtext( 1, "Nothing here" );
}
-VG_STATIC void player__drive_bind( player_instance *player )
-{
- struct player_drive *drive = &player->_drive;
- struct player_avatar *av = player->playeravatar;
- struct skeleton *sk = &av->sk;
-
- drive->vehicle = &gzoomer;
- drive->anim_drive = skeleton_get_anim( sk, "idle_cycle+y" );
-}
-
-VG_STATIC void player__drive_reset( player_instance *player, ent_spawn *rp )
+void player__drive_bind(void)
{
+ struct skeleton *sk = &localplayer.skeleton;
+ player_drive.vehicle = &gzoomer;
+ player_drive.anim_drive = skeleton_get_anim( sk, "idle_cycle+y" );
}
-
-#endif /* PLAYER_DRIVE_C */