LibGame  v0.4.0
The LG Game Engine - Copyright (C) 2024-2025 ETMSoftware
lg_landscape.h
1 /*
2  * LibGame - Copyright (C) Emmanuel Thomas-Maurin 2011-2025
3  * All rights reserved
4  */
5 
6 #ifndef LG_LANDSCAPE_H
7 #define LG_LANDSCAPE_H
8 
9 #define QUADTREE_NAME_MAX_LEN (64 - 1)
10 
11 #define QUADTREE_MAX_DEPTH 32
12 #define QUADTREE_PRINTOUT_MAX_DEPTH 8
13 
14 #define QUADTREE_TO_SCENENODE_ID_SHIFT 1000
15 
16 /* QuadTree quadrants */
17 typedef enum {
18  LG_NW = 0,
19  LG_NE,
20  LG_SW,
21  LG_SE,
22  LG_QUADRANT_UNDEFINDED
23 } lg_quadrant;
24 
25 /* LG_QTNode = LG QuadTree Node */
26 typedef struct LG_QTNode LG_QTNode;
27 
28 struct LG_QTNode {
29  int id; /* User-defined */
30  char name[QUADTREE_NAME_MAX_LEN + 1];
31  LG_QTNode *parent;
32  LG_QTNode *child[4]; /* N-W, N-E, S-W, S-E */
33  int quadrant; /* LG_NW, LG_NE, LG_SW, LG_SE */
34  Rec2Df bounds; /* Actually a bounding square, ie w = h */
35  Point2Df center;
36  float altitude;
37  zboolean is_leaf;
38  void *data; /* Usually a mesh */
39 };
40 
41 LG_QTNode lg_qtnode(int, const char *, Rec2Df *, void *);
42 
43 void lg_qtnode_set_altitude(LG_QTNode *, float);
44 
45 void lg_qtnode_add_child(LG_QTNode *, LG_QTNode *, int, float);
46 
48 
50 
51 void lg_traverse_landscape(LG_QTNode *, int (*)(LG_QTNode *));
52 
54 
56 
58 
59 #endif /* LG_LANDSCAPE_H */
Rec2Df
Definition: lg_gr_func.h:56
lg_qtnode
LG_QTNode lg_qtnode(int id, const char *name, Rec2Df *bounds, void *data)
Definition: lg_landscape.c:74
lg_qtnode_get_root
LG_QTNode * lg_qtnode_get_root(LG_QTNode *node)
Definition: lg_landscape.c:175
Point2Df
Definition: lg_gr_func.h:20
lg_traverse_printout_landscape
void lg_traverse_printout_landscape(LG_QTNode *node, zboolean extra_info)
Definition: lg_landscape.c:361
LG_SceneNode
Definition: lg_scene_graph.h:29
LG_QTNode
Definition: lg_landscape.h:28
lg_qtnode_info
void lg_qtnode_info(LG_QTNode *node)
Definition: lg_landscape.c:372
lg_qtnode_info2
int lg_qtnode_info2(LG_QTNode *node)
Definition: lg_landscape.c:424
lg_traverse_landscape
void lg_traverse_landscape(LG_QTNode *node, int(*func)(LG_QTNode *))
Definition: lg_landscape.c:295
lg_add_scenenode_from_qtnode
void lg_add_scenenode_from_qtnode(LG_SceneNode *top_scene_node, LG_QTNode *qt_node)
Definition: lg_landscape.c:249
lg_qtnode_add_child
void lg_qtnode_add_child(LG_QTNode *node, LG_QTNode *child, int quadrant, float altitude)
Definition: lg_landscape.c:136
lg_qtnode_set_altitude
void lg_qtnode_set_altitude(LG_QTNode *node, float altitude)
Definition: lg_landscape.c:117