X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player.h;h=f63069240bcd3f2b83b15fc88b59ba6fa9cc2fcf;hb=c52e639cdcf6d21f69caa9625238afded7513ca4;hp=8e4ae82b99d0ff547c8aa61d874359d395e9b7e9;hpb=5b06975b35952497d771db4171c7454123edfea1;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player.h b/player.h index 8e4ae82..f630692 100644 --- a/player.h +++ b/player.h @@ -48,6 +48,7 @@ VG_STATIC float VG_STATIC int freecam = 0; VG_STATIC int walk_grid_iterations = 1; VG_STATIC float fc_speed = 10.0f; +VG_STATIC int cl_thirdperson = 0; /* * ----------------------------------------------------------------------------- @@ -193,17 +194,28 @@ VG_STATIC struct gplayer struct ragdoll_part { u32 bone_id; - v3f offset; + //v3f offset; + + /* Collider transform relative to bone */ + m4x3f collider_mtx, + inv_collider_mtx; u32 use_limits; v3f limits[2]; rigidbody rb; u32 parent; + u32 colour; } ragdoll[32]; u32 ragdoll_count; + rb_constr_pos position_constraints[32]; + u32 position_constraints_count; + + rb_constr_swingtwist cone_constraints[32]; + u32 cone_constraints_count; + int shoes[2]; } mdl; @@ -240,6 +252,9 @@ VG_STATIC void player_mouseview(void); * Events * ----------------------------------------------------------------------------- */ +VG_STATIC int kill_player( int argc, char const *argv[] ); +VG_STATIC int reset_player( int argc, char const *argv[] ); +VG_STATIC void reset_player_poll( int argc, char const *argv[] ); VG_STATIC void player_init(void) /* 1 */ { @@ -307,59 +322,108 @@ VG_STATIC void player_init(void) /* 1 */ rb_init( &player.collide_front ); rb_init( &player.collide_back ); - vg_convar_push( (struct vg_convar){ + vg_var_push( (struct vg_var){ .name = "gwalk_speed", .data = &k_walkspeed, - .data_type = k_convar_dtype_f32, + .data_type = k_var_dtype_f32, .opt_f32 = { .clamp = 0 }, .persistent = 0 }); - vg_convar_push( (struct vg_convar){ + vg_var_push( (struct vg_var){ .name = "air_accelerate", .data = &k_air_accelerate, - .data_type = k_convar_dtype_f32, + .data_type = k_var_dtype_f32, .opt_f32 = { .clamp = 0 }, .persistent = 0 }); - vg_convar_push( (struct vg_convar){ + vg_var_push( (struct vg_var){ .name = "run_speed", .data = &k_runspeed, - .data_type = k_convar_dtype_f32, + .data_type = k_var_dtype_f32, .opt_f32 = { .clamp = 0 }, .persistent = 1 }); - vg_convar_push( (struct vg_convar){ + vg_var_push( (struct vg_var){ .name = "walk_accel", .data = &k_walk_accel, - .data_type = k_convar_dtype_f32, + .data_type = k_var_dtype_f32, .opt_f32 = { .clamp = 0 }, .persistent = 1 }); - vg_convar_push( (struct vg_convar){ + vg_var_push( (struct vg_var){ .name = "fc", .data = &freecam, - .data_type = k_convar_dtype_i32, + .data_type = k_var_dtype_i32, + .opt_i32 = { .min=0, .max=1, .clamp=1 }, + .persistent = 1 + }); + + vg_var_push( (struct vg_var){ + .name = "cl_thirdperson", + .data = &cl_thirdperson, + .data_type = k_var_dtype_i32, .opt_i32 = { .min=0, .max=1, .clamp=1 }, .persistent = 1 }); - vg_convar_push( (struct vg_convar){ + vg_var_push( (struct vg_var){ .name = "fcs", .data = &fc_speed, - .data_type = k_convar_dtype_f32, + .data_type = k_var_dtype_f32, .opt_f32 = { .clamp = 0 }, .persistent = 1 }); + vg_var_push( (struct vg_var){ + .name = "k_ragdoll_limit_scale", + .data = &k_ragdoll_limit_scale, + .data_type = k_var_dtype_f32, + .opt_f32 = { .clamp = 0 }, + .persistent = 1 + }); + + vg_var_push( (struct vg_var){ + .name = "k_ragdoll_div", + .data = &k_ragdoll_div, + .data_type = k_var_dtype_i32, + .opt_i32 = { .clamp=0 }, + .persistent = 1 + }); + + vg_var_push( (struct vg_var){ + .name = "k_ragdoll_debug_collider", + .data = &k_ragdoll_debug_collider, + .data_type = k_var_dtype_i32, + .opt_i32 = { .clamp=0 }, + .persistent = 1 + }); + + vg_var_push( (struct vg_var){ + .name = "k_ragdoll_debug_constraints", + .data = &k_ragdoll_debug_constraints, + .data_type = k_var_dtype_i32, + .opt_i32 = { .clamp=0 }, + .persistent = 1 + }); + vg_function_push( (struct vg_cmd){ .name = "reset", - .function = reset_player + .function = reset_player, + .poll_suggest = reset_player_poll }); + vg_function_push( (struct vg_cmd){ + .name = "kill", + .function = kill_player + }); + + /* HACK */ + rb_register_cvar(); + player.rewind_length = 0; player.rewind_buffer = vg_linear_alloc( vg_mem.rtmemory, @@ -614,7 +678,12 @@ VG_STATIC void player_update_post(void) player_animate(); if( !freecam ) - player_animate_camera(); + { + if( cl_thirdperson ) + player_animate_camera_thirdperson(); + else + player_animate_camera(); + } } if( freecam )