Initial commit.
This commit is contained in:
parent
2438d7e257
commit
9dde2827ed
|
@ -0,0 +1,26 @@
|
|||
#pragma once
|
||||
|
||||
#include <l3tde/map/header.h>
|
||||
#include <l3tde/map/node.h>
|
||||
#include <l3tde/map/interface.h>
|
||||
#include <l3tde/map/warp.h>
|
||||
|
||||
// Types in interface.h to avoid recursive inclusion in warp.h
|
||||
struct L3TDEMap {
|
||||
// Must be rectangular.
|
||||
size_t nodes_x_len;
|
||||
size_t nodes_y_len;
|
||||
size_t warps_len;
|
||||
|
||||
L3TDEMapHeaderPtr header;
|
||||
L3TDEMapNodePtr **nodes;
|
||||
L3TDEMapWarpPtr *warps;
|
||||
};
|
||||
|
||||
L3TDEMapPtr
|
||||
l3tde_map_create (L3TDEMapHeaderPtr header,
|
||||
L3TDEMapNodePtr **nodes, size_t nodes_x_len, size_t nodes_y_len,
|
||||
L3TDEMapWarpPtr *warps, size_t warps_len);
|
||||
|
||||
void
|
||||
l3tde_map_destroy (L3TDEMap *self);
|
|
@ -0,0 +1,18 @@
|
|||
#pragma once
|
||||
#include <stddef.h>
|
||||
|
||||
typedef struct {
|
||||
size_t name_len;
|
||||
size_t description_len;
|
||||
|
||||
char *name;
|
||||
char *description;
|
||||
} L3TDEMapHeader;
|
||||
|
||||
typedef L3TDEMapHeader *L3TDEMapHeaderPtr;
|
||||
|
||||
L3TDEMapHeaderPtr
|
||||
l3tde_map_header_create (const char *name, const size_t name_len,
|
||||
const char *description, const size_t description_len);
|
||||
void
|
||||
l3tde_map_header_destroy (L3TDEMapHeaderPtr header);
|
|
@ -0,0 +1,5 @@
|
|||
#pragma once
|
||||
|
||||
struct L3TDEMap;
|
||||
typedef struct L3TDEMap L3TDEMap;
|
||||
typedef L3TDEMap *L3TDEMapPtr;
|
|
@ -0,0 +1,21 @@
|
|||
#pragma once
|
||||
|
||||
#include <l3tde/map/terrain.h>
|
||||
|
||||
typedef enum {
|
||||
L3TDE_MAP_NODE_NAVIGATION_WALKABLE = 1,
|
||||
L3TDE_MAP_NODE_NAVIGATION_FLYABLE = 2,
|
||||
} L3TDEMapNodeNavigation;
|
||||
|
||||
typedef struct {
|
||||
L3TDEMapTerrainPtr terrain;
|
||||
L3TDEMapNodeNavigation navigation;
|
||||
} L3TDEMapNode;
|
||||
typedef L3TDEMapNode *L3TDEMapNodePtr;
|
||||
|
||||
L3TDEMapNodePtr
|
||||
l3tde_map_node_create (const L3TDEMapTerrainPtr terrain,
|
||||
L3TDEMapNodeNavigation navigation);
|
||||
|
||||
void
|
||||
l3tde_map_node_destroy (L3TDEMapNodePtr self);
|
|
@ -0,0 +1,19 @@
|
|||
#pragma once
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
typedef struct {
|
||||
size_t name_len;
|
||||
char *name;
|
||||
|
||||
char symbol;
|
||||
short foreground, background;
|
||||
} L3TDEMapTerrain;
|
||||
typedef L3TDEMapTerrain *L3TDEMapTerrainPtr;
|
||||
|
||||
L3TDEMapTerrainPtr
|
||||
l3tde_map_terrain_create (const char *name, size_t name_len,
|
||||
char symbol, short foreground, short background);
|
||||
|
||||
void
|
||||
l3tde_map_terrain_destroy (L3TDEMapTerrain *self);
|
|
@ -0,0 +1,24 @@
|
|||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <l3tde/map/interface.h>
|
||||
|
||||
typedef struct {
|
||||
L3TDEMapPtr parent;
|
||||
size_t destination_map;
|
||||
bool can_be_crossed;
|
||||
size_t location_x, location_y;
|
||||
size_t destination_warp_number;
|
||||
} L3TDEMapWarp;
|
||||
typedef L3TDEMapWarp *L3TDEMapWarpPtr;
|
||||
|
||||
L3TDEMapWarpPtr
|
||||
l3tde_map_warp_create (L3TDEMapPtr parent,
|
||||
size_t destination_map,
|
||||
bool can_be_crossed,
|
||||
size_t location_x, size_t location_y,
|
||||
size_t destination_warp_number);
|
||||
|
||||
void
|
||||
l3tde_map_warp_destroy (L3TDEMapWarpPtr warp);
|
|
@ -0,0 +1,5 @@
|
|||
#pragma once
|
||||
#include <stddef.h>
|
||||
|
||||
char *
|
||||
copy_string (const char *input, size_t input_len);
|
|
@ -0,0 +1,28 @@
|
|||
project('l3tde', 'c')
|
||||
|
||||
inc = include_directories('include')
|
||||
|
||||
l3tdedeps = [
|
||||
dependency('ncurses'),
|
||||
]
|
||||
|
||||
sources = [
|
||||
'src/main.c',
|
||||
'src/map.c',
|
||||
'src/map/warp.c',
|
||||
'src/map/node.c',
|
||||
'src/map/header.c',
|
||||
'src/map/terrain.c',
|
||||
'src/util/string.c',
|
||||
]
|
||||
|
||||
link_arguments = [
|
||||
]
|
||||
|
||||
executable('l3tde',
|
||||
sources,
|
||||
dependencies : l3tdedeps,
|
||||
include_directories : inc,
|
||||
install : true,
|
||||
link_args : link_arguments
|
||||
)
|
|
@ -0,0 +1,60 @@
|
|||
#include <stdlib.h>
|
||||
#include <ncurses.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <l3tde/map.h>
|
||||
#include <l3tde/map/terrain.h>
|
||||
#include <l3tde/map/node.h>
|
||||
#include <l3tde/map/header.h>
|
||||
|
||||
int
|
||||
main () {
|
||||
L3TDEMapNodePtr **nodes;
|
||||
L3TDEMapHeaderPtr header;
|
||||
L3TDEMapTerrainPtr terrain;
|
||||
L3TDEMapPtr map;
|
||||
|
||||
const char *terrain_name = "grass";
|
||||
const char *header_name = "all_green";
|
||||
const char *header_description = "This is dummy map where all is green.";
|
||||
|
||||
size_t nodes_len = 80;
|
||||
size_t terrain_name_len = strlen (terrain_name);
|
||||
size_t header_name_len = strlen (header_name);
|
||||
size_t header_descrition_len = strlen (header_description);
|
||||
|
||||
nodes = malloc (sizeof *nodes * nodes_len);
|
||||
|
||||
header = l3tde_map_header_create (
|
||||
header_name, header_name_len,
|
||||
header_description, header_descrition_len);
|
||||
|
||||
terrain = l3tde_map_terrain_create (
|
||||
terrain_name, terrain_name_len, '.', 0, 0);
|
||||
|
||||
for (int i = 0; i < nodes_len; i++) {
|
||||
nodes[i] = malloc (sizeof **nodes * nodes_len);
|
||||
L3TDEMapNodePtr *y_nodes = nodes[i];
|
||||
for (int j = 0; j < nodes_len; j++) {
|
||||
y_nodes[j] = l3tde_map_node_create (terrain,
|
||||
L3TDE_MAP_NODE_NAVIGATION_WALKABLE);
|
||||
}
|
||||
}
|
||||
|
||||
map = l3tde_map_create (header, nodes, nodes_len, nodes_len, NULL, 0);
|
||||
|
||||
initscr ();
|
||||
raw ();;
|
||||
keypad (stdscr, TRUE);
|
||||
noecho ();
|
||||
|
||||
refresh ();
|
||||
endwin ();
|
||||
|
||||
l3tde_map_destroy (map);
|
||||
l3tde_map_terrain_destroy (terrain);
|
||||
|
||||
map = NULL;
|
||||
terrain = NULL;
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,83 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <l3tde/map.h>
|
||||
#include <l3tde/map/header.h>
|
||||
#include <l3tde/map/node.h>
|
||||
#include <l3tde/map/warp.h>
|
||||
|
||||
static void
|
||||
destroy_nodes (L3TDEMapNodePtr ***nodes, size_t x_len, size_t y_len);
|
||||
static void
|
||||
destroy_header (L3TDEMapHeaderPtr *header);
|
||||
static void
|
||||
destroy_warps (L3TDEMapWarpPtr **warps, size_t warps_len);
|
||||
|
||||
L3TDEMapPtr
|
||||
l3tde_map_create (L3TDEMapHeaderPtr header,
|
||||
L3TDEMapNodePtr **nodes, size_t nodes_x_len, size_t nodes_y_len,
|
||||
L3TDEMapWarpPtr *warps, size_t warps_len) {
|
||||
L3TDEMapPtr self = malloc (sizeof *self);
|
||||
|
||||
self->nodes_x_len = nodes_x_len;
|
||||
self->nodes_y_len = nodes_y_len;
|
||||
self->warps_len = warps_len;
|
||||
|
||||
self->header = header;
|
||||
self->nodes = nodes;
|
||||
self->warps = warps;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
void
|
||||
l3tde_map_destroy (L3TDEMapPtr self) {
|
||||
destroy_nodes (&self->nodes,
|
||||
self->nodes_x_len, self->nodes_y_len);
|
||||
destroy_header (&self->header);
|
||||
destroy_warps (&self->warps, self->warps_len);
|
||||
free (self);
|
||||
}
|
||||
|
||||
static void
|
||||
destroy_warps (L3TDEMapWarpPtr **warps, size_t warps_len) {
|
||||
if (*warps) {
|
||||
for (size_t i = 0; i < warps_len; i++) {
|
||||
if ((*warps)[i]) {
|
||||
l3tde_map_warp_destroy ((*warps)[i]);
|
||||
(*warps)[i] = NULL;
|
||||
}
|
||||
}
|
||||
free (*warps);
|
||||
warps = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
destroy_header (L3TDEMapHeaderPtr *header) {
|
||||
if (*header) {
|
||||
l3tde_map_header_destroy (*header);
|
||||
}
|
||||
header = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
destroy_nodes (L3TDEMapNodePtr ***nodes,
|
||||
size_t x_len, size_t y_len) {
|
||||
if (*nodes) {
|
||||
for (size_t i = 0; i < x_len; i++) {
|
||||
if ((*nodes)[i]) {
|
||||
for (size_t j = 0; j < y_len; j++) {
|
||||
if ((*nodes)[i][j]) {
|
||||
l3tde_map_node_destroy ((*nodes)[i][j]);
|
||||
(*nodes)[i][j] = NULL;
|
||||
}
|
||||
}
|
||||
free ((*nodes)[i]);
|
||||
(*nodes)[i] = NULL;
|
||||
}
|
||||
}
|
||||
free ((*nodes));
|
||||
nodes = NULL;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <l3tde/map/header.h>
|
||||
#include <l3tde/util/string.h>
|
||||
|
||||
L3TDEMapHeaderPtr
|
||||
l3tde_map_header_create (const char *name, const size_t name_len,
|
||||
const char *description, const size_t description_len) {
|
||||
L3TDEMapHeaderPtr self = malloc (sizeof *self);
|
||||
|
||||
self->name = copy_string (name, name_len);
|
||||
self->name_len = name_len;
|
||||
|
||||
self->description = copy_string (description, description_len);
|
||||
self->description_len = description_len;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
void
|
||||
l3tde_map_header_destroy (L3TDEMapHeaderPtr header) {
|
||||
free (header->name);
|
||||
free (header->description);
|
||||
|
||||
header->name = NULL;
|
||||
header->description = NULL;
|
||||
|
||||
free (header);
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
#include <stdlib.h>
|
||||
|
||||
#include <l3tde/map/node.h>
|
||||
#include <l3tde/map/terrain.h>
|
||||
|
||||
L3TDEMapNodePtr
|
||||
l3tde_map_node_create (const L3TDEMapTerrainPtr terrain,
|
||||
L3TDEMapNodeNavigation navigation) {
|
||||
L3TDEMapNodePtr self = malloc (sizeof *self);
|
||||
|
||||
self->terrain = terrain;
|
||||
self->navigation = navigation;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
void
|
||||
l3tde_map_node_destroy (L3TDEMapNodePtr self) {
|
||||
free (self);
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <l3tde/map/terrain.h>
|
||||
#include <l3tde/util/string.h>
|
||||
|
||||
L3TDEMapTerrainPtr
|
||||
l3tde_map_terrain_create (const char *name, size_t name_len,
|
||||
char symbol, short foreground, short background) {
|
||||
L3TDEMapTerrainPtr self = malloc (sizeof *self);
|
||||
|
||||
self->name = copy_string (name, name_len);
|
||||
self->name_len = name_len;
|
||||
self->symbol = symbol;
|
||||
self->foreground = foreground;
|
||||
self->background = background;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
void
|
||||
l3tde_map_terrain_destroy (L3TDEMapTerrainPtr self) {
|
||||
if (self->name) {
|
||||
free (self->name);
|
||||
self->name = NULL;
|
||||
}
|
||||
|
||||
free (self);
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <l3tde/map.h>
|
||||
#include <l3tde/map/warp.h>
|
||||
|
||||
L3TDEMapWarpPtr
|
||||
l3tde_map_warp_create (L3TDEMapPtr parent,
|
||||
size_t destination_map,
|
||||
bool can_be_crossed,
|
||||
size_t location_x, size_t location_y,
|
||||
size_t destination_warp_number) {
|
||||
L3TDEMapWarpPtr self = malloc (sizeof *self);
|
||||
self->parent = parent;
|
||||
self->destination_map = destination_map;
|
||||
self->can_be_crossed = can_be_crossed;
|
||||
self->location_x = location_x;
|
||||
self->location_y = location_y;
|
||||
if (!(parent->nodes_x_len > self->location_x)
|
||||
|| !(parent->nodes_y_len > self->location_y) ) {
|
||||
// TODO: Add more possible bug information.
|
||||
// TODO: Log to a file?
|
||||
fprintf (stderr, "The warp is out of the map.");
|
||||
}
|
||||
self->destination_warp_number = destination_warp_number;
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
void
|
||||
l3tde_map_warp_destroy (L3TDEMapWarpPtr warp) {
|
||||
free (warp);
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <l3tde/util/string.h>
|
||||
|
||||
char *
|
||||
copy_string (const char *input, size_t input_len) {
|
||||
char *return_value = malloc ((input_len + 1) * sizeof *return_value);
|
||||
|
||||
for (int i = 0; i < input_len; i++) {
|
||||
return_value[i] = input[i];
|
||||
}
|
||||
return_value[input_len] = '\0';
|
||||
|
||||
return return_value;
|
||||
}
|
Loading…
Reference in New Issue