X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_glide.c;fp=player_glide.c;h=f7339373869924086ceb02272a80b1af9a01da89;hb=5f6a4f9df6c8accc89f1920bfe9ace3cbac4c4b6;hp=32768f6d1c866e5deecb94adb053e5a5275be603;hpb=a109f126d8adab622e38fbcc2d4281e75255246a;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_glide.c b/player_glide.c index 32768f6..f733937 100644 --- a/player_glide.c +++ b/player_glide.c @@ -1,13 +1,74 @@ -#ifndef PLAYER_GLIDE_C -#define PLAYER_GLIDE_C - #include "player_glide.h" -#include "input.h" - #include "vg/vg_rigidbody.h" #include "scene_rigidbody.h" #include "shaders/model_board_view.h" #include "shaders/model_entity.h" +#include "input.h" +#include "skaterift.h" + +#include "player_dead.h" +#include "player_skate.h" + +trail_system trails_glider[] = { + { + .width = 0.035f, + .lifetime = 5.0f, + .min_dist = 0.5f + }, + { + .width = 0.035f, + .lifetime = 5.0f, + .min_dist = 0.5f + }, +}; + +struct player_glide player_glide = +{ + .parts = { + { + .co = { 1.0f, 0.5f, -1.0f }, + .euler = { VG_TAUf*0.25f, VG_TAUf*0.125f, 0.0f }, + .shape = k_rb_shape_capsule, + .inf = { .h = 2.82842712475f, .r = 0.25f }, + }, + { + .co = { -1.0f, 0.5f, -1.0f }, + .euler = { VG_TAUf*0.25f, -VG_TAUf*0.125f, 0.0f }, + .shape = k_rb_shape_capsule, + .inf = { .h = 2.82842712475f, .r = 0.25f }, + }, + { + .co = { 0.0f, 0.5f, 1.0f }, + .euler = { VG_TAUf*0.25f, VG_TAUf*0.25f, 0.0f }, + .shape = k_rb_shape_capsule, + .inf = { .h = 6.0f, .r = 0.25f }, + }, + { + .co = { 0.0f, -0.5f, 0.0f }, + .euler = { VG_TAUf*0.25f, VG_TAUf*0.25f, 0.0f }, + .shape = k_rb_shape_capsule, + .inf = { .h = 2.0f, .r = 0.25f }, + .is_damage = 1, + }, + } +}; + +struct player_subsystem_interface player_subsystem_glide = +{ + .pre_update = player_glide_pre_update, + .update = player_glide_update, + .post_update = player_glide_post_update, + .animate = player_glide_animate, + .pose = player_glide_pose, + .post_animate = player_glide_post_animate, + .network_animator_exchange = player_glide_animator_exchange, + .im_gui = player_glide_im_gui, + .bind = player_glide_bind, + + .animator_data = &player_glide.animator, + .animator_size = sizeof(player_glide.animator), + .name = "Glide" +}; static f32 k_glide_steer = 2.0f, k_glide_cl = 0.04f, @@ -20,7 +81,8 @@ static f32 k_glide_steer = 2.0f, static i32 k_glide_pause = 0; -static void player_glide_pre_update(void){ +void player_glide_pre_update(void) +{ if( button_down(k_srbind_use) ){ localplayer.subsystem = k_player_subsystem_skate; localplayer.glider_orphan = 1; @@ -86,7 +148,8 @@ static void calculate_drag( v3f vl, f32 cd, v3f out_force ){ /* * Returns true if the bottom sphere is hit */ -static bool glider_physics( v2f steer ){ +bool glider_physics( v2f steer ) +{ rigidbody *rb = &player_glide.rb; /* lift */ @@ -205,7 +268,8 @@ static bool glider_physics( v2f steer ){ return bottom_hit; } -static void player_glide_update(void){ +void player_glide_update(void) +{ v2f steer; joystick_state( k_srjoystick_steer, steer ); @@ -216,7 +280,8 @@ static void player_glide_update(void){ } } -static void player_glide_post_update(void){ +void player_glide_post_update(void) +{ v3_copy( player_glide.rb.co, localplayer.rb.co ); v4_copy( player_glide.rb.q, localplayer.rb.q ); v3_copy( player_glide.rb.v, localplayer.rb.v ); @@ -224,13 +289,15 @@ static void player_glide_post_update(void){ rb_update_matrices( &localplayer.rb ); } -static void player_glide_animate(void){ +void player_glide_animate(void) +{ struct player_glide *g = &player_glide; struct player_glide_animator *animator = &g->animator; rb_extrapolate( &localplayer.rb, animator->root_co, animator->root_q ); } -static void player_glide_pose( void *_animator, player_pose *pose ){ +void player_glide_pose( void *_animator, player_pose *pose ) +{ struct skeleton *sk = &localplayer.skeleton; struct player_glide_animator *animator = _animator; pose->type = k_player_pose_type_ik; @@ -245,7 +312,8 @@ static void player_glide_pose( void *_animator, player_pose *pose ){ v4_copy( animator->root_q, pose->root_q ); } -static void player_glide_post_animate(void){ +void player_glide_post_animate(void) +{ if( localplayer.cam_control.camera_mode == k_cam_firstperson ) localplayer.cam_velocity_influence = 0.0f; else @@ -258,15 +326,16 @@ static void player_glide_post_animate(void){ localplayer.cam_dist = 2.0f + v3_length( localplayer.rb.v )*0.2f; } -static void player_glide_animator_exchange( bitpack_ctx *ctx, void *data ){ +void player_glide_animator_exchange( bitpack_ctx *ctx, void *data ) +{ struct player_glide_animator *animator = data; bitpack_qv3f( ctx, 24, -1024.0f, 1024.0f, animator->root_co ); bitpack_qquat( ctx, animator->root_q ); } -static void -player_glide_remote_animator_exchange( bitpack_ctx *ctx, void *data ){ +void player_glide_remote_animator_exchange( bitpack_ctx *ctx, void *data ) +{ struct remote_glider_animator *animator = data; bitpack_qv3f( ctx, 24, -1024.0f, 1024.0f, animator->root_co ); @@ -274,7 +343,8 @@ player_glide_remote_animator_exchange( bitpack_ctx *ctx, void *data ){ bitpack_qquat( ctx, animator->root_q ); } -static void player_glide_im_gui(void){ +void player_glide_im_gui(void) +{ player__debugtext( 1, "Nothing here" ); player__debugtext( 1, " lift: %.2f %.2f %.2f", player_glide.info_lift[0], @@ -290,7 +360,8 @@ static void player_glide_im_gui(void){ player_glide.info_drag[2] ); } -static void player_glide_equip_glider(void){ +void player_glide_equip_glider(void) +{ if( !localplayer.have_glider ){ localplayer.have_glider = 1; localplayer.glider_orphan = 0; @@ -308,7 +379,7 @@ static int ccmd_player_glider_spawn( int argc, const char *argv[] ){ return 0; } -static void player_glide_bind(void) +void player_glide_bind(void) { u32 mask = VG_VAR_CHEAT|VG_VAR_PERSISTENT; VG_VAR_F32( k_glide_steer, flags=mask ); @@ -387,9 +458,8 @@ static void player_glide_bind(void) u32 count = mdl_arrcount( &mdl->textures ); player_glide.glider_textures = - vg_linear_alloc(alloc,vg_align8(sizeof(GLuint)*(count+1))); + vg_linear_alloc( alloc, vg_align8(sizeof(GLuint)*(count+1))); player_glide.glider_textures[0] = vg.tex_missing; - mdl_async_load_glmesh( mdl, &player_glide.glider_mesh, NULL ); for( u32 i=0; i