backpack glider
[carveJwlIkooP6JGAAIwe30JlM.git] / player_glide.h
index e50fde3755b77d14e0032a69bdaebab02b7caf64..e6af01db34e607114aa5761c9039ff851d3fcc81 100644 (file)
@@ -4,7 +4,7 @@
 #include "player.h"
 
 struct player_glide {
-   struct skeleton_anim *anim_temp;
+   struct skeleton_anim *anim_glide;
 
    struct player_glide_animator {
       v3f root_co;
@@ -17,8 +17,50 @@ struct player_glide {
        info_drag;
 
    u32 ticker;
+
+   rigidbody rb;
+
+   f32 t;
+
+   struct {
+      v3f co, euler;
+      m4x3f mdl;
+      
+      union {
+         rb_capsule inf;
+         f32 r;
+      };
+
+      enum rb_shape shape;
+   }
+   parts[3];
+
+   mdl_context glider;
+   GLuint *glider_textures;
+   glmesh glider_mesh;
 }
-static player_glide;
+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);
@@ -29,6 +71,7 @@ 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);
 
 struct player_subsystem_interface static player_subsystem_glide = {
    .pre_update = player_glide_pre_update,