2 * Copyright (C) 2003 Robert Kooima
4 * NEVERBALL is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published
6 * by the Free Software Foundation; either version 2 of the License,
7 * or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * General Public License for more details.
20 /*---------------------------------------------------------------------------*/
22 static float state_time;
23 static int state_drawn;
24 static struct state *state;
26 struct state *curr_state(void)
31 float time_state(void)
36 void init_state(struct state *st)
41 int goto_state(struct state *st)
43 struct state *prev = state;
45 if (state && state->leave)
46 state->leave(state, st, state->gui_id);
52 if (state && state->enter)
53 state->gui_id = state->enter(state, prev);
58 /*---------------------------------------------------------------------------*/
60 void st_paint(float t)
62 int stereo = config_get_d(CONFIG_STEREO);
66 if (state && state->paint)
70 glDrawBuffer(GL_BACK_LEFT);
72 state->paint(state->gui_id, t);
74 glDrawBuffer(GL_BACK_RIGHT);
76 state->paint(state->gui_id, t);
81 state->paint(state->gui_id, t);
86 void st_timer(float dt)
93 if (state && state->timer)
94 state->timer(state->gui_id, dt);
97 void st_point(int x, int y, int dx, int dy)
99 if (state && state->point)
100 state->point(state->gui_id, x, y, dx, dy);
103 void st_stick(int a, int k)
105 if ((config_tst_d(CONFIG_JOYSTICK_AXIS_X, a) &&
106 config_get_d(CONFIG_JOYSTICK_AXIS_X_INVERT)) ||
107 (config_tst_d(CONFIG_JOYSTICK_AXIS_Y, a) &&
108 config_get_d(CONFIG_JOYSTICK_AXIS_Y_INVERT)) ||
109 (config_tst_d(CONFIG_JOYSTICK_AXIS_U, a) &&
110 config_get_d(CONFIG_JOYSTICK_AXIS_U_INVERT)))
113 if (state && state->stick)
114 state->stick(state->gui_id, a, k);
117 void st_angle(int x, int z)
119 if (state && state->angle)
120 state->angle(state->gui_id, x, z);
123 /*---------------------------------------------------------------------------*/
125 int st_click(int b, int d)
127 return (state && state->click) ? state->click(b, d) : 1;
130 int st_keybd(int c, int d)
132 return (state && state->keybd) ? state->keybd(c, d) : 1;
135 int st_buttn(int b, int d)
137 return (state && state->buttn) ? state->buttn(b, d) : 1;
140 /*---------------------------------------------------------------------------*/