aboutsummaryrefslogtreecommitdiff
path: root/src/types.h
blob: c70c9bbdde608eb74a18612f45e400066573825c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
/*
 * types.h
 *
 * All the data types - avoid circular reference silliness
 *
 * (c) 2008 Thomas White <taw27@cam.ac.uk>
 *
 *  thrust3d - a silly game
 *
 */

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#ifndef TYPES_H
#define TYPES_H

#include <gl.h>
#include <SDL.h>

/* Maximum number of individual textures */
#define MAX_TEXTURES 128

/* Maximum number of rooms which can be "seen" at once */
#define MAX_ROOMS 64

/* Maximum number of lights per room */
#define MAX_LIGHTS 4

typedef enum {
	ATTRIB_NONE	= 0,
	ATTRIB_COLOUR	= 1<<0,		/* Colour specified? */
	ATTRIB_PULSE	= 1<<1,		/* Pulsating colour */
	ATTRIB_RADIUS	= 1<<2,		/* Radius is set */
	ATTRIB_SHINY	= 1<<3,		/* Primitive is shiny */
	ATTRIB_SWIRLY	= 1<<4,		/* Primitive is texture with swirlyness */
} PrimitiveAttrib;

typedef enum {
	PRIMITIVE_QUADS,
	PRIMITIVE_TRIANGLES,
	PRIMITIVE_HEMISPHERE
} PrimitiveType;

typedef struct {

	GLenum type;
	int num_vertices;
	GLfloat *vertices;
	GLfloat *normals;
	GLfloat *texcoords;
	GLuint vertices_buffer;
	GLuint normals_buffer;
	GLuint texcoords_buffer;
	
	PrimitiveAttrib attribs;
	GLfloat col_r;
	GLfloat col_g;
	GLfloat col_b;
	char *texture;
	GLfloat radius;
	GLfloat shininess;
	
} Primitive;

typedef struct {

	char *name;		/* Identifier */
	
	int num_primitives;
	Primitive **primitives;	/* Geometry */
	
	PrimitiveAttrib attrib_total;
	
} Model;

typedef struct {
	int num_models;
	Model **models;
} ModelContext;

typedef enum {
	OBJ_NONE	= 0,
	OBJ_GRAVITY	= 1<<0,		/* Object is subject to gravity */
} ObjectAttrib;

typedef struct {
	
	Model *model;
	
	GLfloat x;
	GLfloat y;
	GLfloat z;

	ObjectAttrib attribs;
	GLfloat vx;
	GLfloat vy;
	GLfloat vz;
	
	float yaw;
	float yawspeed;
	
} ModelInstance;

typedef struct {
	char *name;
	GLuint *data;
	GLuint texname;
} Texture;

typedef struct {

	/* Lighting shaders */
	GLhandleARB	lighting_vert;
	GLhandleARB	lighting_frag;
	GLhandleARB	lighting_program;

	/* Textures */
	Texture		textures[MAX_TEXTURES];
	unsigned int	num_textures;

	GLuint		fbo;
	GLuint		fbotex;
	GLuint		fbodepth;
	
	/* Swirlyness stuff */
	GLhandleARB	swirly_vert;
	GLhandleARB	swirly_frag;
	GLhandleARB	swirly_program;
	GLuint		swirly_fbo;
        GLuint		swirly_texture;
	
	GLfloat         aspect;
	int             width;
	int             height;

	GLfloat		*hemisphere_v;
	GLfloat		*hemisphere_n;
	GLfloat		*hemisphere_t;

} RenderContext;

typedef struct {

	
} AudioContext;

typedef struct {
	int rx;
	int ry;
	int rz;
} Connection;

typedef struct {
	GLfloat x;
	GLfloat y;
	GLfloat z;
} Light;

typedef struct {

	ModelInstance **objects;
	int num_objects;
	
	int rx;
	int ry;
	int rz;
	
	int needed_this_time;
	Connection connected[MAX_ROOMS];
	int num_connected;
	
	Light lights[MAX_LIGHTS];
	int num_lights;
	
} Room;

typedef struct {

	unsigned int thrusting;
	unsigned int turn_left;
	unsigned int turn_right;
	unsigned int forward;
	unsigned int reverse;
	
	Uint32 tlast;			/* Time at which the last physics step was performed */
	
	ModelInstance *lander;
	
	ModelContext *models;
	RenderContext *render;
	AudioContext *audio;
	
	int cur_room_x;
	int cur_room_y;
	int cur_room_z;
	
	Room *rooms[MAX_ROOMS];
	int num_rooms;
	
	float view_angle;
	float view_dist;
	int paused;
	int pause_rel;
	
	int		frames;
	Uint32		t_fps;
	int		fps;
	
	GLfloat		radiation;
	GLfloat		fuel;
		
} Game;

#endif	/* TYPES_H */