-#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;
};
enum rb_shape shape;
+ bool is_damage;
}
- parts[3];
+ 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, 1.0f, -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 },
- .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.0f, 0.0f },
- .euler = { 0.0f, 0.0f, 0.0f },
- .shape = k_rb_shape_sphere,
- .r = 0.5f
- }
- }
-};
-
-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(void);
+extern player_glide;
+extern struct player_subsystem_interface player_subsystem_glide;
-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,
+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 );
- .animator_data = &player_glide.animator,
- .animator_size = sizeof(player_glide.animator),
- .name = "Glide"
-};
+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 */