X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_glide.h;h=cbb1fb58076f32e6c3c77cb7715369625aa173be;hb=refs%2Fheads%2Fmaster;hp=9889eb4f35f322ed13d669fdb1c5cc339ddba694;hpb=c8309ca41f8953d6aaa97cd8cbf625640346b80d;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_glide.h b/player_glide.h index 9889eb4..cbb1fb5 100644 --- a/player_glide.h +++ b/player_glide.h @@ -1,17 +1,28 @@ -#ifndef PLAYER_GLIDE_H -#define PLAYER_GLIDE_H - +#pragma once #include "player.h" +#include "player_render.h" +#include "trail.h" -struct player_glide { +struct player_glide +{ struct skeleton_anim *anim_glide; - struct player_glide_animator { + struct player_glide_animator + { v3f root_co; v4f root_q; } animator; + /* this sucks */ + struct remote_glider_animator + { + v3f root_co; + v4f root_q; + f32 s; + } + remote_animator; + v3f info_lift, info_slip, info_drag; @@ -36,76 +47,31 @@ struct player_glide { } parts[4]; + u32 trail_count; + v3f trail_positions[2]; + mdl_context glider; - GLuint *glider_textures; - glmesh glider_mesh; } -static 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, - }, - -#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 void player_glide_pre_update(void); -static void player_glide_update(void); -static void player_glide_post_update(void); -static void player_glide_animate(void); -static void player_glide_pose( void *animator, player_pose *pose ); - -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 ); - -struct player_subsystem_interface static 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" -}; +extern player_glide; +extern struct player_subsystem_interface player_subsystem_glide; + +void player_glide_pre_update(void); +void player_glide_update(void); +void player_glide_post_update(void); +void player_glide_animate(void); +void player_glide_pose( void *animator, player_pose *pose ); + +void player_glide_post_animate(void); +void player_glide_im_gui(void); +void player_glide_bind(void); +void player_glide_transition(void); +bool glider_physics( v2f steer ); +void player_glide_animator_exchange( bitpack_ctx *ctx, void *data ); +void player_glide_render( vg_camera *cam, world_instance *world, + player_pose *pose ); +void render_glider_model( vg_camera *cam, world_instance *world, + m4x3f mmdl, enum board_shader shader ); +void player_glide_remote_animator_exchange( bitpack_ctx *ctx, void *data ); +void player_glide_equip_glider(void); +void player_glide_render_effects( vg_camera *cam ); -#endif /* PLAYER_GLIDE_H */