aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortaw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5>2008-05-13 23:03:53 +0000
committertaw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5>2008-05-13 23:03:53 +0000
commit1cb8424a50f47fbc0cd087ccdaef51af26c60446 (patch)
tree6e3a9bbbde1f3b08c3cfb9ced06ccbbead7f6fe2 /src
parent14e45c579c33d482e822b781061711f578ee3b2d (diff)
Stuff
git-svn-id: svn://cook.msm.cam.ac.uk:745/thrust3d/thrust3d@7 84d2e878-0bd5-11dd-ad15-13eda11d74c5
Diffstat (limited to 'src')
-rw-r--r--src/game.c5
-rw-r--r--src/game.h2
-rw-r--r--src/main.c16
-rw-r--r--src/render.c24
-rw-r--r--src/render.h2
-rw-r--r--src/types.h1
6 files changed, 40 insertions, 10 deletions
diff --git a/src/game.c b/src/game.c
index 9f0ef0c..189688e 100644
--- a/src/game.c
+++ b/src/game.c
@@ -218,7 +218,7 @@ static void game_load_all_connected(Game *game) {
}
/* Create a new "game" structure */
-Game *game_new() {
+Game *game_new(int width, int height) {
Game *g;
@@ -236,11 +236,12 @@ Game *game_new() {
g->cur_room_z = 0;
g->num_rooms = 0;
g->view_angle = deg2rad(+20.0);
+ g->view_dist = 5.0;
g->paused = 0;
g->pause_rel = 1;
/* Renderer setup */
- g->render = render_setup();
+ g->render = render_setup(width, height);
if ( g->render == NULL ) {
fprintf(stderr, "Couldn't initialise renderer\n");
free(g);
diff --git a/src/game.h b/src/game.h
index d69562c..75e624b 100644
--- a/src/game.h
+++ b/src/game.h
@@ -21,7 +21,7 @@
#include "types.h"
extern void game_check_handoff(Game *game);
-extern Game *game_new(void);
+extern Game *game_new(int width, int height);
extern Room *game_find_room(Game *game, int rx, int ry, int rz);
extern void game_pause(Game *game);
diff --git a/src/main.c b/src/main.c
index 6d1e8b6..3f44095 100644
--- a/src/main.c
+++ b/src/main.c
@@ -14,6 +14,7 @@
#endif
#include <stdlib.h>
+#include <unistd.h>
#include <SDL.h>
#include <gl.h>
#include <glu.h>
@@ -29,6 +30,7 @@ int main(int argc, char *argv[]) {
SDL_Event event;
int finished;
SDL_Surface *screen;
+ int width, height;
/* SDL initial setup */
if ( SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0 ) {
@@ -36,17 +38,22 @@ int main(int argc, char *argv[]) {
return 1;
}
atexit(SDL_Quit);
+
+ width = 1600;//1024;
+ height = 1050;//768;
+
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
- screen = SDL_SetVideoMode(640, 480, 16, SDL_OPENGL);
+ screen = SDL_SetVideoMode(width, height, 16, SDL_OPENGL | SDL_FULLSCREEN);
if (screen == NULL) {
fprintf(stderr, "Couldn't set video mode: %s\n", SDL_GetError());
return 1;
}
SDL_WM_SetCaption("Thrust3D", "Thrust3D");
+ SDL_ShowCursor(SDL_DISABLE);
/* World setup */
Game *game;
- game = game_new();
+ game = game_new(width, height);
/* Main loop */
finished = 0;
@@ -62,6 +69,7 @@ int main(int argc, char *argv[]) {
if ( event.key.keysym.sym == SDLK_DOWN ) game->reverse = 1;
}
if ( event.key.keysym.sym == SDLK_p ) game_pause(game);
+ if ( event.key.keysym.sym == SDLK_q ) finished = 1;
break;
case SDL_KEYUP :
if ( !game->paused ) {
@@ -85,6 +93,10 @@ int main(int argc, char *argv[]) {
physics_step(game);
render_draw(game);
}
+
+ /* Sleep for around 8ms to avoid hogging the CPU. This value gives about 100fps on my (rather modest) machine. */
+ usleep(8000);
+
}
render_shutdown(game->render);
diff --git a/src/render.c b/src/render.c
index b45634d..81d5ba3 100644
--- a/src/render.c
+++ b/src/render.c
@@ -79,7 +79,7 @@ static void render_delete_shaders(RenderContext *ctx) {
}
/* OpenGL initial setup */
-RenderContext *render_setup() {
+RenderContext *render_setup(width, height) {
RenderContext *ctx;
@@ -87,7 +87,7 @@ RenderContext *render_setup() {
if ( ctx == NULL ) return NULL;
glClearColor(0.0, 0.0, 0.0, 1.0);
- glViewport(0, 0, 640, 480);
+ glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
@@ -268,6 +268,20 @@ static void render_setup_lighting(Game *game, Room *room_current) {
}
#endif
+static void render_draw_line(GLfloat x1, GLfloat y1, GLfloat z1, GLfloat x2, GLfloat y2, GLfloat z2) {
+
+ GLfloat red[] = {1.0, 0.0, 0.0, 1.0};
+
+ glMaterialfv(GL_FRONT, GL_EMISSION, red);
+ glColor3f(0.0, 0.0, 0.0);
+
+ glBegin(GL_LINES);
+ glVertex3f(x1, y1, z1);
+ glVertex3f(x2, y2, z2);
+ glEnd();
+
+}
+
void render_draw(Game *game) {
int i;
@@ -279,8 +293,9 @@ void render_draw(Game *game) {
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
- gluLookAt(game->lander->x-(1.5*sinf(game->lander->yaw)*cosf(game->view_angle)),
- game->lander->y-(1.5*cosf(game->lander->yaw)*cosf(game->view_angle)), game->lander->z+(1.5*sinf(game->view_angle)),
+ gluLookAt(game->lander->x-(game->view_dist*sinf(game->lander->yaw)*cosf(game->view_angle)),
+ game->lander->y-(game->view_dist*cosf(game->lander->yaw)*cosf(game->view_angle)),
+ game->lander->z+(game->view_dist*sinf(game->view_angle)),
game->lander->x, game->lander->y, game->lander->z,
sqrtf(2.0)*sinf(game->lander->yaw)*sinf(game->view_angle),
sqrtf(2.0)*cosf(game->lander->yaw)*sinf(game->view_angle), sqrtf(2.0)*cosf(game->view_angle));
@@ -331,6 +346,7 @@ void render_draw(Game *game) {
}
/* Finally, the lander */
render_model_instance_draw(game->lander, t, game->render);
+ render_draw_line(game->lander->x, game->lander->y, game->lander->z, game->lander->x, game->lander->y, game->lander->z-200.0);
//glUseProgramObjectARB(0);
SDL_GL_SwapBuffers();
diff --git a/src/render.h b/src/render.h
index 96fe690..8b89374 100644
--- a/src/render.h
+++ b/src/render.h
@@ -18,7 +18,7 @@
#include "types.h"
-extern RenderContext *render_setup(void);
+extern RenderContext *render_setup(int width, int height);
extern void render_shutdown(RenderContext *ctx);
extern void render_draw(Game *game);
diff --git a/src/types.h b/src/types.h
index 78864a9..deb083a 100644
--- a/src/types.h
+++ b/src/types.h
@@ -165,6 +165,7 @@ typedef struct {
int num_rooms;
float view_angle;
+ float view_dist;
int paused;
int pause_rel;