Use GLES 1.1
[neverball] / ball / game_common.h
1 #ifndef GAME_COMMON_H
2 #define GAME_COMMON_H
3
4 #include "lang.h"
5 #include "solid_vary.h"
6
7 /*---------------------------------------------------------------------------*/
8
9 #define AUD_MENU    "snd/menu.ogg"
10 #define AUD_START _("snd/select.ogg")
11 #define AUD_READY _("snd/ready.ogg")
12 #define AUD_SET   _("snd/set.ogg")
13 #define AUD_GO    _("snd/go.ogg")
14 #define AUD_BALL    "snd/ball.ogg"
15 #define AUD_BUMPS   "snd/bumplil.ogg"
16 #define AUD_BUMPM   "snd/bump.ogg"
17 #define AUD_BUMPL   "snd/bumpbig.ogg"
18 #define AUD_COIN    "snd/coin.ogg"
19 #define AUD_TICK    "snd/tick.ogg"
20 #define AUD_TOCK    "snd/tock.ogg"
21 #define AUD_SWITCH  "snd/switch.ogg"
22 #define AUD_JUMP    "snd/jump.ogg"
23 #define AUD_GOAL    "snd/goal.ogg"
24 #define AUD_SCORE _("snd/record.ogg")
25 #define AUD_FALL  _("snd/fall.ogg")
26 #define AUD_TIME  _("snd/time.ogg")
27 #define AUD_OVER  _("snd/over.ogg")
28 #define AUD_GROW    "snd/grow.ogg"
29 #define AUD_SHRINK  "snd/shrink.ogg"
30
31 /*---------------------------------------------------------------------------*/
32
33 enum
34 {
35     GAME_NONE = 0,
36
37     GAME_TIME,
38     GAME_GOAL,
39     GAME_FALL,
40
41     GAME_MAX
42 };
43
44 const char *status_to_str(int);
45
46 /*---------------------------------------------------------------------------*/
47
48 enum
49 {
50     VIEW_NONE = -1,
51
52     VIEW_CHASE,
53     VIEW_LAZY,
54     VIEW_MANUAL,
55
56     VIEW_MAX
57 };
58
59 const char *view_to_str(int);
60
61 /*---------------------------------------------------------------------------*/
62
63 extern const float GRAVITY_UP[];
64 extern const float GRAVITY_DN[];
65
66 struct game_tilt
67 {
68     float x[3], rx;
69     float z[3], rz;
70 };
71
72 void game_tilt_init(struct game_tilt *);
73 void game_tilt_axes(struct game_tilt *, float view_e[3][3]);
74 void game_tilt_grav(float h[3], const float g[3], const struct game_tilt *);
75
76 /*---------------------------------------------------------------------------*/
77
78 struct game_view
79 {
80     float dc;                           /* Ideal view distance above ball    */
81     float dp;                           /* Ideal view distance above ball    */
82     float dz;                           /* Ideal view distance behind ball   */
83
84     float c[3];                         /* Current view center               */
85     float p[3];                         /* Current view position             */
86     float e[3][3];                      /* Current view reference frame      */
87
88     float a;                            /* Ideal view rotation about Y axis  */
89 };
90
91 void game_view_init(struct game_view *);
92 void game_view_fly(struct game_view *, const struct s_vary *, float);
93
94 /*---------------------------------------------------------------------------*/
95
96 #define UPS 30
97 #define DT  (1.0f / (float) UPS)
98
99 /*
100  * Simple fixed time step scheme.
101  */
102
103 struct lockstep
104 {
105     void (*step)(float);
106
107     float dt;                           /* Time step length                  */
108     float at;                           /* Accumulator                       */
109     float ts;                           /* Time scale factor                 */
110 };
111
112 void lockstep_clr(struct lockstep *);
113 void lockstep_run(struct lockstep *, float);
114 void lockstep_scl(struct lockstep *, float);
115
116 #define lockstep_blend(ls) ((ls)->at / (ls)->dt)
117
118 /*---------------------------------------------------------------------------*/
119
120 extern struct s_base game_base;
121
122 int  game_base_load(const char *);
123 void game_base_free(const char *);
124
125 /*---------------------------------------------------------------------------*/
126
127 #endif