e6af01db34e607114aa5761c9039ff851d3fcc81
[carveJwlIkooP6JGAAIwe30JlM.git] / player_glide.h
1 #ifndef PLAYER_GLIDE_H
2 #define PLAYER_GLIDE_H
3
4 #include "player.h"
5
6 struct player_glide {
7 struct skeleton_anim *anim_glide;
8
9 struct player_glide_animator {
10 v3f root_co;
11 v4f root_q;
12 }
13 animator;
14
15 v3f info_lift,
16 info_slip,
17 info_drag;
18
19 u32 ticker;
20
21 rigidbody rb;
22
23 f32 t;
24
25 struct {
26 v3f co, euler;
27 m4x3f mdl;
28
29 union {
30 rb_capsule inf;
31 f32 r;
32 };
33
34 enum rb_shape shape;
35 }
36 parts[3];
37
38 mdl_context glider;
39 GLuint *glider_textures;
40 glmesh glider_mesh;
41 }
42 static player_glide = {
43 .parts = {
44 {
45 .co = { 1.0f, 1.0f, -1.0f },
46 .euler = { VG_TAUf*0.25f, VG_TAUf*0.125f, 0.0f },
47 .shape = k_rb_shape_capsule,
48 .inf = { .h = 2.82842712475f, .r = 0.25f },
49 },
50 {
51 .co = { -1.0f, 1.0f, -1.0f },
52 .euler = { VG_TAUf*0.25f, -VG_TAUf*0.125f, 0.0f },
53 .shape = k_rb_shape_capsule,
54 .inf = { .h = 2.82842712475f, .r = 0.25f },
55 },
56 {
57 .co = { 0.0f, 0.0f, 0.0f },
58 .euler = { 0.0f, 0.0f, 0.0f },
59 .shape = k_rb_shape_sphere,
60 .r = 0.5f
61 }
62 }
63 };
64
65 static void player_glide_pre_update(void);
66 static void player_glide_update(void);
67 static void player_glide_post_update(void);
68 static void player_glide_animate(void);
69 static void player_glide_pose( void *animator, player_pose *pose );
70
71 static void player_glide_post_animate(void);
72 static void player_glide_im_gui(void);
73 static void player_glide_bind(void);
74 static void player_glide_transition(void);
75
76 struct player_subsystem_interface static player_subsystem_glide = {
77 .pre_update = player_glide_pre_update,
78 .update = player_glide_update,
79 .post_update = player_glide_post_update,
80 .animate = player_glide_animate,
81 .pose = player_glide_pose,
82 .post_animate = player_glide_post_animate,
83 .im_gui = player_glide_im_gui,
84 .bind = player_glide_bind,
85
86 .animator_data = &player_glide.animator,
87 .animator_size = sizeof(player_glide.animator),
88 .name = "Glide"
89 };
90
91 #endif /* PLAYER_GLIDE_H */