void initTexture(gDisplay *d) { GLint min_filter; char texname[120]; int i, j; update_splash(splash, 0.16, "init texture"); if(game->settings->use_mipmaps) { if(game->settings->mipmap_filter == TRILINEAR) min_filter = GL_LINEAR_MIPMAP_LINEAR; else min_filter = GL_LINEAR_MIPMAP_NEAREST; } else min_filter = GL_LINEAR; checkGLError("texture.c initTexture - start"); /* todo: move that somewhere else */ glGenTextures(game_textures, d->textures); checkGLError("texture.c initTexture - creating textures"); for(i = 0; i < n_textures; i++) { for( j = 0; j < textures[i].count; j++) { glBindTexture(GL_TEXTURE_2D, d->textures[ textures[i].id + j ]); /* todo: snprintf would be safer, but win32 doesn't have it */ if(textures[i].count == 1) { sprintf(texname, "%s%s", textures[i].name, TEX_SUFFIX); } else { sprintf(texname, "%s%d%s", textures[i].name, j, TEX_SUFFIX); } glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, textures[i].wrap_s); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, textures[i].wrap_t); loadTexture(texname, textures[i].type); checkGLError("texture.c initTextures"); update_splash(splash, 0.16+i/1000, texname); } } }
void update(enum e_game_state *game_state, int *end) { static SDL_Event event; SDL_PollEvent(&event); switch (*game_state) { case SPLASH: update_splash(event, game_state); break; case MENU: update_menu(event, game_state, end); break; case GAME: update_game(event, game_state, end); break; case PAUSE: update_pause(event, game_state); break; default: break; } }
void initGameStructures() { /* called only once */ /* default art names */ char *path; /* init game screen */ /* init players. for each player: */ /* init model */ /* init display */ /* init ai */ /* create data */ /* create trails */ /* create camera */ gDisplay *d; int i; /* int onScreen; */ /* Data *data; */ /* Camera *c; */ /* Model *m; */ AI *ai; Player *p; game->winner = -1; game->screen = (gDisplay*) malloc(sizeof(gDisplay)); d = game->screen; d->h = game->settings->height; d->w = game->settings->width; d->vp_x = 0; d->vp_y = 0; d->vp_w = d->w; d->vp_h = d->h; d->blending = 1; d->fog = 0; d->shademodel = GL_SMOOTH; d->wall = 1; d->onScreen = -1; d->textures = (unsigned int*) malloc(game_textures * sizeof(unsigned int)); //Setup display here setupDisplay(game->screen); game->players = PLAYERS; game->player = (Player *) malloc(MAX_PLAYERS * sizeof(Player)); for(i = 0; i < game->players; i++) { p = (game->player + i); p->model = (Model*) malloc(sizeof(Model)); p->display = (gDisplay*) malloc(sizeof(gDisplay)); p->ai = (AI*) malloc(sizeof(AI)); p->data = (Data*) malloc(sizeof(Data)); p->data->trails = (line*) malloc(MAX_TRAIL * sizeof(line)); p->camera = (Camera*) malloc(sizeof(Camera)); p->camera->type = (CameraType*) malloc(sizeof(CameraType)); /* init model & display & ai */ update_splash(splash, 0.3+i*.1, "init model"); initModel(p, i); ai = p->ai; if(game->settings->screenSaver) { ai->active = AI_COMPUTER; } else { switch(i) { case 0: ai->active = game->settings->ai_player1; break; case 1: ai->active = game->settings->ai_player2; break; case 2: ai->active = game->settings->ai_player3; break; case 3: ai->active = game->settings->ai_player4; break; default: fprintf(stderr, "player index #%d not caught!\n", i); ai->active = AI_NONE; } } ai->tdiff = 0; ai->moves = 0; ai->danger = 0; ai->lastx = 0; ai->lasty = 0; } /* load recognizer model */ update_splash(splash, 0.7, "loading recognizer"); path = getFullPath("recognizer.obj"); if(path != NULL) // recognizer = loadModel(path, RECOGNIZER_HEIGHT, 0); // recognizer = loadModel(path, 60, MODEL_NORMALIZE | MODEL_INVERT_NORMALS); recognizer = loadModel(path, 60, MODEL_NORMALIZE ); else { printf("fatal: could not load recognizer - exiting...\n"); exit(1); } free(path); changeDisplay(); game2->events.next = NULL; game2->mode = GAME_SINGLE; }