revision 2
[carveJwlIkooP6JGAAIwe30JlM.git] / player_glide.h
index f8f6dd99dffee4de2a9d85f47d91c8c6b025826f..061a04dd65f427007d5436a3e42c803dd6f6635e 100644 (file)
@@ -1,20 +1,22 @@
-#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 {
+   struct remote_glider_animator 
+   {
       v3f root_co;
       v4f root_q;
       f32 s;
@@ -52,92 +54,26 @@ struct player_glide {
    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 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);
-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 );
-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,
-   .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 */