/* * types.h * * All the data types - avoid circular reference silliness * * (c) 2008 Thomas White * * thrust3d - a silly game * */ #ifdef HAVE_CONFIG_H #include #endif #ifndef TYPES_H #define TYPES_H #include #include /* 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 */ } PrimitiveAttrib; typedef struct { GLenum type; int num_vertices; GLfloat *vertices; GLfloat *normals; GLfloat *texcoords; PrimitiveAttrib attribs; GLfloat col_r; GLfloat col_g; GLfloat col_b; char *texture; } 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; int frames; Uint32 t_fps; int fps; } RenderContext; 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 */ int frame_delay; /* Delay between frames */ int frame_delay_fiddled; /* frame_delay has been fiddled since the last FPS calculation */ ModelInstance *lander; ModelContext *models; RenderContext *render; 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; } Game; #endif /* TYPES_H */