X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=6ee3112b701165ff9a401c6ed1961d140d3f4fa5;hb=ce0205fd929e5fb1446f8c52fcab344884d82569;hp=38e01ad2865bf73d72b12e64e43c433b007ef3e8;hpb=f99902f513b0ad606437bf32de47405dd4ea5f98;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index 38e01ad..6ee3112 100644 --- a/player.h +++ b/player.h @@ -1,22 +1,78 @@ #ifndef PLAYER_H #define PLAYER_H -#include "player_api.h" - +#include "skaterift.h" #include "player_common.h" +#include "network_compression.h" + +enum player_subsystem{ + k_player_subsystem_walk = 0, + k_player_subsystem_skate = 1, + k_player_subsystem_dead = 2, + k_player_subsystem_drive = 3, + k_player_subsystem_max, + k_player_subsystem_invalid = 255 +}; + +struct player_cam_controller { + enum camera_mode{ + k_cam_firstperson = 1, + k_cam_thirdperson = 0 + } + camera_mode; + f32 camera_type_blend; + + v3f fpv_offset, /* expressed relative to rigidbody */ + tpv_offset, + tpv_offset_extra, + fpv_viewpoint, /* expressed relative to neck bone inverse final*/ + fpv_offset_smooth, + fpv_viewpoint_smooth, + tpv_offset_smooth, + tpv_lpf, + cam_velocity_smooth; +}; + +struct player_subsystem_interface{ + void(*system_register)(void); + void(*bind)(void); + void(*reset)( ent_spawn *rp ); + void(*pre_update)(void); + void(*update)(void); + void(*post_update)(void); + void(*im_gui)(void); + void(*animate)(void); + void(*pose)( void *animator, player_pose *pose ); + void(*post_animate)(void); + void(*network_animator_exchange)( bitpack_ctx *ctx, void *data ); + void(*sfx_oneshot)( u8 id, v3f pos, f32 volume ); + + void *animator_data; + u32 animator_size; + + const char *name; +}; + +#include "player_ragdoll.h" +#include "player_render.h" +#include "player_model.h" #include "player_walk.h" #include "player_skate.h" #include "player_dead.h" #include "player_drive.h" +#include "player_replay.h" #define PLAYER_REWIND_FRAMES 60*4 #define RESET_MAX_TIME 45.0 -struct player_instance -{ +static i32 k_cinema_fixed = 0; +static f32 k_cinema = 0.0f; +static i32 k_invert_y = 0; + +struct { /* transform definition */ - rigidbody rb, rb_gate_storage; - v3f angles, angles_storage; + rigidbody rb; + v3f angles; v4f qbasis; m3x3f basis, invbasis, basis_gate; @@ -27,58 +83,32 @@ struct player_instance * --------------------------- */ camera cam; - - enum camera_mode{ - k_cam_firstperson = 1, - k_cam_thirdperson = 0 - } - camera_mode; - float camera_type_blend; - - v3f fpv_offset, /* expressed relative to rigidbody */ - tpv_offset, - fpv_viewpoint, /* expressed relative to neck bone inverse final */ - fpv_offset_smooth, - fpv_viewpoint_smooth, - tpv_offset_smooth, - tpv_lpf, - cam_velocity_smooth; - - v3f cam_override_pos; - v2f cam_override_angles; - float cam_override_strength; + struct player_cam_controller cam_control; + f32 cam_trackshake; float cam_velocity_influence, cam_velocity_coefficient, cam_velocity_constant, cam_velocity_coefficient_smooth, cam_velocity_constant_smooth, - cam_velocity_influence_smooth, - cam_land_punch, - cam_land_punch_v; + cam_velocity_influence_smooth; + v3f cam_land_punch, cam_land_punch_v; ent_gate *gate_waiting; + int immobile; - /* - * Input - * -------------------------------- + /* + * Network + * -------------------------------------------------- */ - struct input_binding *input_js1h, - *input_js1v, - *input_js2h, - *input_js2v, - *input_jump, - *input_push, - *input_trick0, - *input_trick1, - *input_trick2, - *input_walk, - *input_walkh, - *input_walkv, - *input_use, - *input_reset, - *input_grab, - *input_camera; + u16 boundary_hash; + struct net_sfx { + u8 system, priority, id; + f32 subframe, volume; + v3f location; + } + sfx_buffer[4]; + u32 sfx_buffer_count; /* * Animation @@ -86,50 +116,40 @@ struct player_instance */ struct player_avatar *playeravatar; - glmesh *playermesh; struct player_ragdoll ragdoll; - vg_tex2d *playertex; + struct player_model fallback_model; + u16 board_view_slot, playermodel_view_slot; + + player_pose pose; player_pose holdout_pose; float holdout_time; - /* - * Rewind - * ---------------------------------------------------- - */ - int rewinding, rewind_sound_wait; - - struct rewind_frame{ - v3f pos; - v3f ang; - } - *rewind_buffer; - u32 rewind_length; - float rewind_accum; - ent_gate *rewind_gate; - - float rewind_total_length, rewind_predicted_time, - dist_accum; - double rewind_start, rewind_time; + m4x3f *final_mtx; /* * Subsystems * ------------------------------------------------- */ - enum player_subsystem{ - k_player_subsystem_walk = 0, - k_player_subsystem_skate = 1, - k_player_subsystem_dead = 2, - k_player_subsystem_drive = 3 + enum player_subsystem subsystem; /* .. prev */ +} +static localplayer = { + .rb = { + .co = { 0,0,0 }, + .w = { 0,0,0 }, + .v = { 0,0,0 }, + .q = { 0,0,0,1 }, + .to_world = M4X3_IDENTITY, + .to_local = M4X3_IDENTITY } - subsystem, - subsystem_gate; +}; - struct player_skate _skate; - struct player_walk _walk; - struct player_dead _dead; - struct player_drive _drive; +struct player_subsystem_interface static *player_subsystems[] = { + [k_player_subsystem_walk] = &player_subsystem_walk, + [k_player_subsystem_dead] = &player_subsystem_dead, + [k_player_subsystem_drive] = &player_subsystem_drive, + [k_player_subsystem_skate] = &player_subsystem_skate }; /* @@ -137,111 +157,31 @@ struct player_instance * --------------------------------------------------------- */ -VG_STATIC -void (*_player_system_register[])(void) = -{ - player__walk_register, - player__skate_register, - NULL, - NULL -}; - -VG_STATIC -void (*_player_bind[])( player_instance *player ) = -{ - player__walk_bind, - player__skate_bind, - NULL, - player__drive_bind -}; - -VG_STATIC -void (*_player_reset[])( player_instance *player, ent_spawn *rp ) = -{ - player__walk_reset, - player__skate_reset, - NULL, - player__drive_reset -}; - -VG_STATIC -void (*_player_pre_update[])( player_instance *player ) = -{ - player__walk_pre_update, - player__skate_pre_update, - NULL, - player__drive_pre_update -}; - -VG_STATIC -void( *_player_update[])( player_instance *player ) = -{ - player__walk_update, - player__skate_update, - player__dead_update, - player__drive_update -}; - -VG_STATIC -void( *_player_post_update[])( player_instance *player ) = -{ - player__walk_post_update, - player__skate_post_update, - NULL, - player__drive_post_update -}; - -VG_STATIC -void( *_player_im_gui[])( player_instance *player ) = -{ - player__walk_im_gui, - player__skate_im_gui, - NULL, - player__drive_im_gui -}; - -VG_STATIC -void( *_player_animate[])( player_instance *player, player_animation *dest ) = -{ - player__walk_animate, - player__skate_animate, - player__dead_animate, - player__drive_animate -}; - -VG_STATIC -void( *_player_post_animate[])( player_instance *player ) = -{ - player__walk_post_animate, - player__skate_post_animate, - player__dead_post_animate, - player__drive_post_animate -}; - -VG_STATIC -void( *_player_restore[] )( player_instance *player ) = -{ - player__walk_restore, - player__skate_restore, - NULL, - NULL -}; - -VG_STATIC void player_init(void) -{ - for( u32 i=0; i