libtcod
Loading...
Searching...
No Matches
bsp.h
Go to the documentation of this file.
1/* BSD 3-Clause License
2 *
3 * Copyright © 2008-2025, Jice and the libtcod contributors.
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright notice,
10 * this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright notice,
13 * this list of conditions and the following disclaimer in the documentation
14 * and/or other materials provided with the distribution.
15 *
16 * 3. Neither the name of the copyright holder nor the names of its
17 * contributors may be used to endorse or promote products derived from
18 * this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
31 */
34#pragma once
35#ifndef TCOD_BSP_H_
36#define TCOD_BSP_H_
37
38#include "mersenne_types.h"
39#include "portability.h"
40#include "tree.h"
41
44#ifdef __cplusplus
45extern "C" {
46#endif
47typedef struct {
48 TCOD_tree_t tree; /* pseudo oop : bsp inherit tree */
49 int x, y, w, h; /* node position & size */
50 int position; /* position of splitting */
51 uint8_t level; /* level in the tree */
52 bool horizontal; /* horizontal splitting ? */
54
55typedef bool (*TCOD_bsp_callback_t)(TCOD_bsp_t* node, void* userData);
56
57TCODLIB_API TCOD_bsp_t* TCOD_bsp_new(void);
58TCODLIB_API TCOD_bsp_t* TCOD_bsp_new_with_size(int x, int y, int w, int h);
59TCODLIB_API void TCOD_bsp_delete(TCOD_bsp_t* node);
60
61TCODLIB_API TCOD_bsp_t* TCOD_bsp_left(TCOD_bsp_t* node);
62TCODLIB_API TCOD_bsp_t* TCOD_bsp_right(TCOD_bsp_t* node);
63TCODLIB_API TCOD_bsp_t* TCOD_bsp_father(TCOD_bsp_t* node);
64
65TCODLIB_API bool TCOD_bsp_is_leaf(TCOD_bsp_t* node);
66TCODLIB_API bool TCOD_bsp_traverse_pre_order(TCOD_bsp_t* node, TCOD_bsp_callback_t listener, void* userData);
67TCODLIB_API bool TCOD_bsp_traverse_in_order(TCOD_bsp_t* node, TCOD_bsp_callback_t listener, void* userData);
68TCODLIB_API bool TCOD_bsp_traverse_post_order(TCOD_bsp_t* node, TCOD_bsp_callback_t listener, void* userData);
69TCODLIB_API bool TCOD_bsp_traverse_level_order(TCOD_bsp_t* node, TCOD_bsp_callback_t listener, void* userData);
70TCODLIB_API bool TCOD_bsp_traverse_inverted_level_order(TCOD_bsp_t* node, TCOD_bsp_callback_t listener, void* userData);
71TCODLIB_API bool TCOD_bsp_contains(TCOD_bsp_t* node, int x, int y);
72TCODLIB_API TCOD_bsp_t* TCOD_bsp_find_node(TCOD_bsp_t* node, int x, int y);
73TCODLIB_API void TCOD_bsp_resize(TCOD_bsp_t* node, int x, int y, int w, int h);
74TCODLIB_API void TCOD_bsp_split_once(TCOD_bsp_t* node, bool horizontal, int position);
75TCODLIB_API void TCOD_bsp_split_recursive(
76 TCOD_bsp_t* node, TCOD_Random* randomizer, int nb, int minHSize, int minVSize, float maxHRatio, float maxVRatio);
77TCODLIB_API void TCOD_bsp_remove_sons(TCOD_bsp_t* node);
78#ifdef __cplusplus
79}
80#endif
82#endif // TCOD_BSP_H_
Random number generator types.
Miscellaneous tools needed across platforms.
Definition bsp.h:47
Definition tree.h:43
Internal tree container.
Pseudorandom number generator toolkit, all attributes are private.
Definition mersenne_types.h:87