X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=player_glide.h;h=03c8260f88f33d2c88d3f3a6df472d03feedf013;hb=refs%2Fheads%2Fmenu2;hp=e50fde3755b77d14e0032a69bdaebab02b7caf64;hpb=4c3dc94e7221f599491e7d111cac3d51d8d83b17;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/player_glide.h b/player_glide.h index e50fde3..03c8260 100644 --- a/player_glide.h +++ b/player_glide.h @@ -1,48 +1,77 @@ -#ifndef PLAYER_GLIDE_H -#define PLAYER_GLIDE_H - +#pragma once #include "player.h" +#include "player_render.h" +#include "trail.h" -struct player_glide { - struct skeleton_anim *anim_temp; +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; u32 ticker; + + rigidbody rb; + + f32 t; + + struct { + v3f co, euler; + m4x3f mdl; + + union { + rb_capsule inf; + f32 r; + }; + + enum rb_shape shape; + bool is_damage; + } + parts[4]; + + u32 trail_count; + v3f trail_positions[2]; + + mdl_context glider; } -static player_glide; - -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); - -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, - .im_gui = player_glide_im_gui, - .bind = player_glide_bind, - - .animator_data = &player_glide.animator, - .animator_size = sizeof(player_glide.animator), - .name = "Glide" -}; - -#endif /* PLAYER_GLIDE_H */ +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( ui_context *ctx ); +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 ); +