163e3ba458e83e027cd3bca2626680697b6235f0
[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 struct {
24 v3f co, euler;
25 m4x3f mdl;
26
27 union {
28 rb_capsule inf;
29 f32 r;
30 };
31
32 enum rb_shape shape;
33 }
34 parts[3];
35
36 mdl_context glider;
37 GLuint *glider_textures;
38 glmesh glider_mesh;
39 }
40 static player_glide = {
41 .parts = {
42 {
43 .co = { 1.0f, 1.0f, -1.0f },
44 .euler = { VG_TAUf*0.25f, VG_TAUf*0.125f, 0.0f },
45 .shape = k_rb_shape_capsule,
46 .inf = { .h = 2.82842712475f, .r = 0.25f },
47 },
48 {
49 .co = { -1.0f, 1.0f, -1.0f },
50 .euler = { VG_TAUf*0.25f, -VG_TAUf*0.125f, 0.0f },
51 .shape = k_rb_shape_capsule,
52 .inf = { .h = 2.82842712475f, .r = 0.25f },
53 },
54 {
55 .co = { 0.0f, 0.0f, 0.0f },
56 .euler = { 0.0f, 0.0f, 0.0f },
57 .shape = k_rb_shape_sphere,
58 .r = 0.5f
59 }
60 }
61 };
62
63 static void player_glide_pre_update(void);
64 static void player_glide_update(void);
65 static void player_glide_post_update(void);
66 static void player_glide_animate(void);
67 static void player_glide_pose( void *animator, player_pose *pose );
68
69 static void player_glide_post_animate(void);
70 static void player_glide_im_gui(void);
71 static void player_glide_bind(void);
72 static void player_glide_transition(void);
73 static void player_glide_render( camera *cam, world_instance *world,
74 player_pose *pose );
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 .render = player_glide_render,
86
87 .animator_data = &player_glide.animator,
88 .animator_size = sizeof(player_glide.animator),
89 .name = "Glide"
90 };
91
92 #endif /* PLAYER_GLIDE_H */