World data structure
This commit is contained in:
+1
-1
@@ -1,4 +1,4 @@
|
||||
/build/
|
||||
/wschod
|
||||
/librefront
|
||||
/perf.data*
|
||||
/massif.out*
|
||||
+11
-2
@@ -6,8 +6,11 @@
|
||||
|
||||
#include "util.h"
|
||||
|
||||
SDL_Window *sdl_window;
|
||||
SDL_Renderer *sdl_renderer;
|
||||
#include "world.h"
|
||||
|
||||
static SDL_Window *sdl_window;
|
||||
static SDL_Renderer *sdl_renderer;
|
||||
/* static World *world; */
|
||||
|
||||
SDL_AppResult
|
||||
SDL_AppInit (void **appstate, int argc, char **argv)
|
||||
@@ -24,6 +27,8 @@ SDL_AppInit (void **appstate, int argc, char **argv)
|
||||
SDL_SetAppMetadata ("LibreFront", "0.1",
|
||||
"https://git.cfpi-fpsi.eu:8443/chopin-interactive/librefront");
|
||||
|
||||
g_info ("Welcome to LibreFront");
|
||||
|
||||
if (!SDL_Init (SDL_INIT_VIDEO))
|
||||
{
|
||||
g_error ("Couldn't initialize SDL: %s", SDL_GetError ());
|
||||
@@ -43,6 +48,8 @@ SDL_AppInit (void **appstate, int argc, char **argv)
|
||||
g_error ("Couldn't create renderer: %s", SDL_GetError ());
|
||||
}
|
||||
|
||||
/* world = World_random (128, 128); */
|
||||
|
||||
return SDL_APP_CONTINUE;
|
||||
}
|
||||
|
||||
@@ -64,7 +71,9 @@ SDL_AppIterate (void *appstate)
|
||||
{
|
||||
UNUSED (appstate);
|
||||
|
||||
/* World_update (world); */
|
||||
SDL_RenderClear (sdl_renderer);
|
||||
/* World_render (world, sdl_renderer); */
|
||||
SDL_RenderPresent (sdl_renderer);
|
||||
|
||||
return SDL_APP_CONTINUE;
|
||||
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
#include "world.h"
|
||||
|
||||
World *
|
||||
World_random (unsigned int width, unsigned int height)
|
||||
{
|
||||
World *w = g_new0 (World, 1);
|
||||
w->width = width;
|
||||
w->height = height;
|
||||
w->tiles = g_array_sized_new (FALSE, TRUE, sizeof (MapTile), width * height);
|
||||
|
||||
for (unsigned int i = 0; i < w->tiles->len; ++i)
|
||||
{
|
||||
/* This should actually be allocated on the heap and be a
|
||||
pointer, because it's gonna be modified a lot. Just change
|
||||
all the MapTile things in g_array_* functions to MapTile*,
|
||||
and allocate with g_new0/g_new here. */
|
||||
MapTile mt;
|
||||
mt.terrain_type = rand () > 0.5 ? TERRAIN_FLAT : TERRAIN_HILL;
|
||||
g_array_append_val (w->tiles, mt);
|
||||
}
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
void
|
||||
World_update (World *w)
|
||||
{
|
||||
UNUSED (w);
|
||||
}
|
||||
|
||||
void
|
||||
World_render (World *w, SDL_Renderer *renderer)
|
||||
{
|
||||
UNUSED (w);
|
||||
|
||||
for (unsigned int y = 0; y < w->height; ++y)
|
||||
{
|
||||
for (unsigned int x = 0; x < w->width; ++x)
|
||||
{
|
||||
unsigned int i = y * w->width + x;
|
||||
MapTile mt = g_array_index (w->tiles, MapTile, i);
|
||||
|
||||
switch (mt.terrain_type)
|
||||
{
|
||||
case TERRAIN_HILL:
|
||||
SDL_SetRenderDrawColor (renderer, 255, 0, 0, 255);
|
||||
break;
|
||||
default:
|
||||
SDL_SetRenderDrawColor (renderer, 0, 255, 0, 255);
|
||||
break;
|
||||
}
|
||||
|
||||
/* Very unoptimized --- for now. */
|
||||
SDL_FRect pixel = {
|
||||
.x = x,
|
||||
.y = y,
|
||||
.w = 1,
|
||||
.h = 1
|
||||
};
|
||||
|
||||
SDL_RenderFillRect (renderer, &pixel);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
#pragma once
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
#include <glib-2.0/glib.h>
|
||||
|
||||
#include "util.h"
|
||||
|
||||
typedef enum TerrainType
|
||||
{
|
||||
TERRAIN_FLAT,
|
||||
TERRAIN_HILL,
|
||||
TERRAIN_MOUNTAIN
|
||||
} TerrainType;
|
||||
|
||||
typedef enum BuildingType
|
||||
{
|
||||
BUILDING_NONE,
|
||||
BUILDING_PORT,
|
||||
BUILDING_CITY,
|
||||
BUILDING_FORT
|
||||
} BuildingType;
|
||||
|
||||
typedef struct MapTile
|
||||
{
|
||||
int player_id;
|
||||
TerrainType terrain_type;
|
||||
BuildingType building_type;
|
||||
|
||||
gboolean is_radiated;
|
||||
gboolean is_defended;
|
||||
} MapTile;
|
||||
|
||||
typedef struct World
|
||||
{
|
||||
unsigned int width, height;
|
||||
GArray *tiles;
|
||||
} World;
|
||||
|
||||
World *World_random (unsigned int width, unsigned int height);
|
||||
void World_update (World *w);
|
||||
void World_render (World *w, SDL_Renderer *renderer);
|
||||
Reference in New Issue
Block a user