seperation of body initialization, glider model
[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_temp;
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 static player_glide = {
37 .parts = {
38 {
39 .co = { 1.0f, 1.0f, -1.0f },
40 .euler = { VG_TAUf*0.25f, VG_TAUf*0.125f, 0.0f },
41 .shape = k_rb_shape_capsule,
42 .inf = { .h = 2.82842712475f, .r = 0.25f },
43 },
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 = { 0.0f, 0.0f, 0.0f },
52 .euler = { 0.0f, 0.0f, 0.0f },
53 .shape = k_rb_shape_sphere,
54 .r = 0.5f
55 }
56 }
57 };
58
59 static void player_glide_pre_update(void);
60 static void player_glide_update(void);
61 static void player_glide_post_update(void);
62 static void player_glide_animate(void);
63 static void player_glide_pose( void *animator, player_pose *pose );
64
65 static void player_glide_post_animate(void);
66 static void player_glide_im_gui(void);
67 static void player_glide_bind(void);
68
69 struct player_subsystem_interface static player_subsystem_glide = {
70 .pre_update = player_glide_pre_update,
71 .update = player_glide_update,
72 .post_update = player_glide_post_update,
73 .animate = player_glide_animate,
74 .pose = player_glide_pose,
75 .post_animate = player_glide_post_animate,
76 .im_gui = player_glide_im_gui,
77 .bind = player_glide_bind,
78
79 .animator_data = &player_glide.animator,
80 .animator_size = sizeof(player_glide.animator),
81 .name = "Glide"
82 };
83
84 #endif /* PLAYER_GLIDE_H */