Ejemplo n.º 1
0
bool terrain_deinit ()
{	
	terrain_t *t;

	for (t = terrain_list.next; t != &terrain_list; t = t->next)
		terrain_del (t);
	
	return true;
}
Ejemplo n.º 2
0
void map_gen (void) {
  int i, j, k, l;
  terrain_init ();
  for (l = 0; l < arrlen (chunks); ++l)
    for (i = 0; i < CHUNK_DX; ++i)
      for (j = 0; j < CHUNK_DY; ++j)
        for (k = 0; k < CHUNK_DZ; ++k)
          chunks[l][i][j][k] = rng_f () < 0.05;
  terrain_del ();
}
Ejemplo n.º 3
0
terrain_t *terrain_add (int x, int y, int z)
{
	terrain_t *t;
	
	/* kontrola, zda neexistuje teren na stejne pozici */
	for (t = terrain_list.next; t != &terrain_list; t = t->next) {
		if (t->origin_x == x && t->origin_y == y && t->origin_z == z) {
			//printf ("teren: %d %d %d existuje!\n", x, y, z);
			return 0;
		}
	}
	
	t = (terrain_t *) calloc (sizeof (terrain_t), 1);

	if (!t)
		return NULL;
	
	t->state = TERRAIN_STATE_ACTIVE;

	t->vbo_id = 0;
	
	t->origin_x = x;
	t->origin_y = y;
	t->origin_z = z;
	
	t->dim_x = t->dim_y = t->dim_z = TERRAIN_DIM;

	t->data = (voxel_t *) malloc (sizeof (voxel_t) * (t->dim_x+2) * (t->dim_y+2) * (t->dim_z+2));
		
	if (!t->data) {
		free (t);
		return NULL;
	}
	
	/* pridame teren do seznamu jeste pred generovanim, abychom mohli generovat za behu */
	t->next = &terrain_list;
	t->prev = terrain_list.prev;
	t->prev->next = t;
	t->next->prev = t;
	
	if (!terrain_gen (t)) {
		terrain_del (t);
		return NULL;
	}

	/* pripravime teren k vykresleni - polygonizujeme voxely */
	gl_prepare_terrain (t);
	
	//free (t->data);
	//t->data = NULL;
	
	return t;
}
Ejemplo n.º 4
0
Archivo: gl.cpp Proyecto: ZeXx86/gen
void gl_render ()
{
	fps_stick = SDL_GetTicks ();
	
	glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity ();
	
	camera_update ();
	
	/* Ziskame nasi kameru */
	camera_t *c = camera_get ();
	
	/* Vykreslovani SkyBoxu */
	gl_render_skybox (c);
	
	terrain_t *t;	
	for (t = terrain_list.next; t != &terrain_list; t = t->next) {
		if (!t->gl_buf_len) {
			/* mazani kontextu terenu z pameti */
			terrain_t *tmp = t->prev;
			if (terrain_del (t))
				t = tmp;
			
			continue;
		}

		gl_render_terrain (t, c);	
	}

	/* Vykreslovani vody */
	gl_water_render ();

	/* Vykreslovani HUD/textu */
	char sfps[32];
	sprintf (sfps, "FPS: %.0f", 1.0f/(fps_dtick/1000.0f));
	font_render (0.500, -0.400, sfps);
	
	glFlush ();
	
	 /* Prohodi predni a zadni buffer */
	SDL_GL_SwapWindow (g_window);

	/* vypocitame hodnotu FPS na zaklade soucasneho casu a casu z predchoziho cyklu */
	fps_dtick = SDL_GetTicks () - fps_stick;

	/* Omezime shora FPS, protoze nam vyssi uz nic neprinese */
	if (1000/FPS_MAX > fps_dtick)
		SDL_Delay (1000.0f/FPS_MAX - fps_dtick);
}
Ejemplo n.º 5
0
/* Deinitialize World */
void world_del(struct World * self){
	terrain_del(self->altitude);
	climate_del(self->climate);
	climate_del(self->evil);
    mm_free(self);
}