84 lines
2.0 KiB
C
84 lines
2.0 KiB
C
#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;
|
|
}
|
|
}
|