X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_glide.h;h=f8f6dd99dffee4de2a9d85f47d91c8c6b025826f;hb=888e62fcd8f9777cee774fbb8fab2e52660303a7;hp=163e3ba458e83e027cd3bca2626680697b6235f0;hpb=f5ab30ae4b7250cc128086261b60f0af47f88f11;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_glide.h b/player_glide.h index 163e3ba..f8f6dd9 100644 --- a/player_glide.h +++ b/player_glide.h @@ -2,6 +2,7 @@ #define PLAYER_GLIDE_H #include "player.h" +#include "trail.h" struct player_glide { struct skeleton_anim *anim_glide; @@ -12,6 +13,14 @@ struct player_glide { } animator; + /* this sucks */ + struct remote_glider_animator { + v3f root_co; + v4f root_q; + f32 s; + } + remote_animator; + v3f info_lift, info_slip, info_drag; @@ -20,6 +29,8 @@ struct player_glide { rigidbody rb; + f32 t; + struct { v3f co, euler; m4x3f mdl; @@ -30,8 +41,12 @@ struct player_glide { }; enum rb_shape shape; + bool is_damage; } - parts[3]; + parts[4]; + + u32 trail_count; + v3f trail_positions[2]; mdl_context glider; GLuint *glider_textures; @@ -40,26 +55,55 @@ struct player_glide { static player_glide = { .parts = { { - .co = { 1.0f, 1.0f, -1.0f }, + .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, 1.0f, -1.0f }, + .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, + }, + +#if 0 { .co = { 0.0f, 0.0f, 0.0f }, .euler = { 0.0f, 0.0f, 0.0f }, .shape = k_rb_shape_sphere, .r = 0.5f } +#endif } }; +static trail_system trails_glider[] = { +{ + .width = 0.035f, + .lifetime = 5.0f, + .min_dist = 0.5f +}, +{ + .width = 0.035f, + .lifetime = 5.0f, + .min_dist = 0.5f +}, +}; + static void player_glide_pre_update(void); static void player_glide_update(void); static void player_glide_post_update(void); @@ -70,8 +114,15 @@ static void player_glide_post_animate(void); static void player_glide_im_gui(void); static void player_glide_bind(void); static void player_glide_transition(void); +static bool glider_physics( v2f steer ); +static void player_glide_animator_exchange( bitpack_ctx *ctx, void *data ); static void player_glide_render( camera *cam, world_instance *world, player_pose *pose ); +static void render_glider_model( camera *cam, world_instance *world, + m4x3f mmdl, enum board_shader shader ); +static void +player_glide_remote_animator_exchange( bitpack_ctx *ctx, void *data ); +static void player_glide_equip_glider(void); struct player_subsystem_interface static player_subsystem_glide = { .pre_update = player_glide_pre_update, @@ -80,9 +131,9 @@ struct player_subsystem_interface static player_subsystem_glide = { .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, - .render = player_glide_render, .animator_data = &player_glide.animator, .animator_size = sizeof(player_glide.animator),