X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=69da5094133bfcaff8afec76f7962d8d141ffccc;hb=b440efbe5785d114d08bb3f5ec0e09cad943006d;hp=72c26edb5d1cd8b8d0325520d67e4b600aea137f;hpb=5f34184cad016aa2f8ea530b3be009703459e981;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index 72c26ed..69da509 100644 --- a/player.h +++ b/player.h @@ -1,54 +1,77 @@ -#ifndef PLAYER_H -#define PLAYER_H - -#include "player_ragdoll.h" -#include "player_render.h" -#include "player_model.h" -#include "player_common.h" -#include "player_walk.h" -#include "player_skate.h" -#include "player_dead.h" -#include "player_drive.h" - -#define PLAYER_REWIND_FRAMES 60*4 -#define RESET_MAX_TIME 45.0 - -struct player_instance -{ - /* transform definition */ - rigidbody rb, rb_gate_storage; - v3f angles, angles_storage; - - v4f qbasis; - m3x3f basis, invbasis, basis_gate; - world_instance *viewable_world; - - /* - * Camera management - * --------------------------- - */ - camera cam; +#pragma once +#include "vg/vg_platform.h" +struct player_cam_controller { enum camera_mode{ k_cam_firstperson = 1, k_cam_thirdperson = 0 } camera_mode; - float camera_type_blend; + f32 camera_type_blend; v3f fpv_offset, /* expressed relative to rigidbody */ tpv_offset, - fpv_viewpoint, /* expressed relative to neck bone inverse final */ + 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; +}; + +#include "player_common.h" +#include "network_compression.h" +#include "player_effects.h" +#include "player_api.h" +#include "player_ragdoll.h" +#include "player_model.h" +#include "player_render.h" + +struct player_subsystem_interface{ + void(*system_register)(void); + void(*bind)(void); + 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(*effects)( void *animator, m4x3f *final_mtx, struct player_board *board, + struct player_effects_data *effect_data ); + void(*post_animate)(void); + + void(*network_animator_exchange)( bitpack_ctx *ctx, void *data ); + void(*sfx_oneshot)( u8 id, v3f pos, f32 volume ); + + void(*sfx_comp)(void *animator); + void(*sfx_kill)(void); + + void *animator_data; + u32 animator_size; + + const char *name; +}; - v3f cam_override_pos; - v3f cam_override_angles; - float cam_override_fov; - float cam_override_strength; +#define PLAYER_REWIND_FRAMES 60*4 +#define RESET_MAX_TIME 45.0 + +extern i32 k_invert_y; +struct localplayer +{ + /* transform definition */ + rigidbody rb; + v3f angles; + + bool have_glider, glider_orphan; + + /* + * Camera management + * --------------------------- + */ + vg_camera cam; + struct player_cam_controller cam_control; + f32 cam_trackshake; float cam_velocity_influence, cam_velocity_coefficient, @@ -56,207 +79,118 @@ struct player_instance cam_velocity_coefficient_smooth, cam_velocity_constant_smooth, cam_velocity_influence_smooth, - cam_land_punch, - cam_land_punch_v; + cam_dist, + cam_dist_smooth; + v3f cam_land_punch, cam_land_punch_v; ent_gate *gate_waiting; - - /* - * Input - * -------------------------------- - */ - 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; + int deferred_frame_record; int immobile; + int rewinded_since_last_gate; + + /* + * Network + * -------------------------------------------------- + */ + u16 boundary_hash; + struct net_sfx { + u8 system, priority, id; + f32 subframe, volume; + v3f location; + } + sfx_buffer[4], /* large timeframe 1/10s; for networking */ + local_sfx_buffer[2]; /* per framerate 1/30s; for replay */ + u32 sfx_buffer_count, + local_sfx_buffer_count; + /* * Animation * -------------------------------------------------- */ - struct player_avatar *playeravatar; - struct player_model *playermodel; struct player_ragdoll ragdoll; - struct player_board *board; + struct player_model fallback_model; + struct player_board fallback_board; + + 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 - } - subsystem, - subsystem_gate; + enum player_subsystem subsystem, + observing_system; - struct player_skate _skate; - struct player_walk _walk; - struct player_dead _dead; - struct player_drive _drive; + /* + * Rendering + */ + mdl_context skeleton_meta; + struct skeleton skeleton; + + u8 id_hip, + id_chest, + id_ik_hand_l, + id_ik_hand_r, + id_ik_elbow_l, + id_ik_elbow_r, + id_head, + id_foot_l, + id_foot_r, + id_ik_foot_l, + id_ik_foot_r, + id_ik_knee_l, + id_ik_knee_r, + id_wheel_l, + id_wheel_r, + id_board, + id_eyes, + id_world; + + u8 skeleton_mirror[32]; + + struct player_effects_data effect_data; } -static localplayer; +extern localplayer; +extern struct player_subsystem_interface *player_subsystems[]; /* * Gameloop tables * --------------------------------------------------------- */ -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 -}; - -PLAYER_API void player__debugtext( int size, const char *fmt, ... ); -PLAYER_API void player__create( player_instance *inst ); -PLAYER_API void player__use_avatar( player_instance *player, - struct player_avatar *av ); -PLAYER_API void player__use_mesh( player_instance *player, glmesh *mesh ); -PLAYER_API void player__use_texture( player_instance *player, vg_tex2d *tex ); -PLAYER_API void player__bind( player_instance *player ); -PLAYER_API void player__pre_update( player_instance *player ); -PLAYER_API void player__update( player_instance *player ); -PLAYER_API void player__post_update( player_instance *player ); - -PLAYER_API void player__pass_gate( player_instance *player, ent_gate *gate ); -PLAYER_API void player__im_gui( player_instance *player ); -PLAYER_API void player__spawn( player_instance *player, ent_spawn *rp ); -PLAYER_API void player__kill( player_instance *player ); - -/* implementation */ - -#include "player.c" -#include "player_common.c" -#include "player_walk.c" -#include "player_skate.c" -#include "player_dead.c" -#include "player_drive.c" -#include "player_render.c" -#include "player_ragdoll.c" - -#endif /* PLAYER_H */ +void player_init(void); +void player__debugtext( int size, const char *fmt, ... ); +void player__use_mesh( glmesh *mesh ); +void player__use_model( u16 reg_id ); + +void player__bind(void); +void player__pre_update(void); +void player__update(void); +void player__post_update(void); + +void player__pass_gate( u32 id ); +void player__im_gui(void); +void player__setpos( v3f pos ); +void player__spawn( ent_spawn *rp ); +void player__clean_refs(void); +void player__reset(void); +void player__kill(void); +void player__begin_holdout( v3f offset ); + +int localplayer_cmd_respawn( int argc, const char *argv[] ); +void player_apply_transport_to_cam( m4x3f transport ); + +void player__clear_sfx_buffer(void); +void player__networked_sfx( u8 system, u8 priority, u8 id, + v3f pos, f32 volume ); +void net_sfx_exchange( bitpack_ctx *ctx, struct net_sfx *sfx ); +void net_sfx_play( struct net_sfx *sfx );