src/ascension/scene_node.h

Sat, 14 Jun 2025 12:38:37 +0200

author
Mike Becker <universe@uap-core.de>
date
Sat, 14 Jun 2025 12:38:37 +0200
changeset 150
3045f61bc4eb
parent 144
43636d6a6e25
permissions
-rw-r--r--

make draw function dynamic

required to solve issue #384

82
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 * Copyright 2025 Mike Becker. All rights reserved.
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 *
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 * Redistribution and use in source and binary forms, with or without
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * modification, are permitted provided that the following conditions are met:
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 *
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 * 1. Redistributions of source code must retain the above copyright
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * notice, this list of conditions and the following disclaimer.
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 *
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 * 2. Redistributions in binary form must reproduce the above copyright
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * notice, this list of conditions and the following disclaimer in the
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * documentation and/or other materials provided with the distribution.
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 *
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * POSSIBILITY OF SUCH DAMAGE.
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 */
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28 #ifndef ASCENSION_SCENE_NODE_H
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29 #define ASCENSION_SCENE_NODE_H
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
31 #include <cx/list.h>
114
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
32 #include <cx/string.h>
82
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
34 #include "datatypes.h"
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
35 #include "transform.h"
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37 typedef struct asc_scene_node_s AscSceneNode;
150
3045f61bc4eb make draw function dynamic
Mike Becker <universe@uap-core.de>
parents: 144
diff changeset
38 typedef struct asc_camera_s AscCamera; // opaque declared
82
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
39
113
71ba88258ea0 change node's free function to a destroy function
Mike Becker <universe@uap-core.de>
parents: 108
diff changeset
40 typedef void(*asc_scene_node_destroy_func)(AscSceneNode*);
71ba88258ea0 change node's free function to a destroy function
Mike Becker <universe@uap-core.de>
parents: 108
diff changeset
41 typedef void(*asc_scene_node_update_func)(AscSceneNode*);
150
3045f61bc4eb make draw function dynamic
Mike Becker <universe@uap-core.de>
parents: 144
diff changeset
42 typedef void(*asc_scene_node_draw_func)(const AscCamera*,const AscSceneNode*);
82
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
43
144
43636d6a6e25 do not try to use one distinct render group for each different shader
Mike Becker <universe@uap-core.de>
parents: 137
diff changeset
44 // TODO: rework the concept of render groups, because currently it is only half abstract, half hard-coded
82
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
45 enum AscRenderGroup {
95
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
46 ASC_RENDER_GROUP_NONE = -1,
150
3045f61bc4eb make draw function dynamic
Mike Becker <universe@uap-core.de>
parents: 144
diff changeset
47 ASC_RENDER_GROUP_2D_OPAQUE,
3045f61bc4eb make draw function dynamic
Mike Becker <universe@uap-core.de>
parents: 144
diff changeset
48 ASC_RENDER_GROUP_2D_BLEND,
82
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
49 ASC_RENDER_GROUP_COUNT
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
50 };
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
51
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
52 struct asc_scene_node_s {
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
53 AscSceneNode *parent;
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
54 AscSceneNode *prev;
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
55 AscSceneNode *next;
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
56 AscSceneNode *children;
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
57 AscSceneNode *last_child;
114
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
58 cxmutstr name;
108
d619bf7dd87b add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents: 105
diff changeset
59 /**
d619bf7dd87b add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents: 105
diff changeset
60 * List of AscBehavior structs.
d619bf7dd87b add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents: 105
diff changeset
61 * Not a pointer list!
d619bf7dd87b add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents: 105
diff changeset
62 */
82
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
63 CxList *behaviors;
113
71ba88258ea0 change node's free function to a destroy function
Mike Becker <universe@uap-core.de>
parents: 108
diff changeset
64 asc_scene_node_destroy_func destroy_func;
71ba88258ea0 change node's free function to a destroy function
Mike Becker <universe@uap-core.de>
parents: 108
diff changeset
65 asc_scene_node_update_func update_func;
150
3045f61bc4eb make draw function dynamic
Mike Becker <universe@uap-core.de>
parents: 144
diff changeset
66 asc_scene_node_draw_func draw_func;
82
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
67 asc_vec3f position;
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
68 asc_vec3f rotation;
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
69 asc_vec3f scale;
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
70 asc_transform transform;
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
71 asc_transform world_transform;
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
72 enum AscRenderGroup render_group;
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
73 /**
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
74 * Custom flags for this node.
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
75 * The #ASC_SCENE_NODE_FLAGS_MASK bits are reserved for general flags.
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
76 */
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
77 uint32_t flags;
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
78 };
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
79
94
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
80
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
81 /**
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
82 * The reserved bits for general flags.
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
83 */
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
84 #define ASC_SCENE_NODE_FLAGS_MASK 0xFF000000
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
85 /**
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
86 * Set when a graphics update is needed in this frame.
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
87 */
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
88 #define ASC_SCENE_NODE_UPDATE_GRAPHICS 0x01000000
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
89 /**
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
90 * Set when a graphics updated happened last frame.
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
91 */
108
d619bf7dd87b add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents: 105
diff changeset
92 #define ASC_SCENE_NODE_GRAPHICS_UPDATED 0x02000000
94
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
93 /**
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
94 * Set when a transform update is needed in this frame.
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
95 */
108
d619bf7dd87b add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents: 105
diff changeset
96 #define ASC_SCENE_NODE_UPDATE_TRANSFORM 0x04000000
94
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
97 /**
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
98 * Set when a transform update happened last frame.
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
99 */
108
d619bf7dd87b add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents: 105
diff changeset
100 #define ASC_SCENE_NODE_TRANSFORM_UPDATED 0x08000000
d619bf7dd87b add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents: 105
diff changeset
101 /**
133
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
102 * Set when the node's transform is directly manipulated via matrix operations.
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
103 * When this flag is set, position/rotation/scale values won't be used to
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
104 * calculate the transform matrix.
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
105 */
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
106 #define ASC_SCENE_NODE_CUSTOM_TRANSFORM 0x10000000
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
107 /**
108
d619bf7dd87b add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents: 105
diff changeset
108 * Set when the node is not supposed to be shown on screen.
d619bf7dd87b add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents: 105
diff changeset
109 */
d619bf7dd87b add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents: 105
diff changeset
110 #define ASC_SCENE_BEHAVIOR_PAUSED 0x40000000
94
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
111 /**
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
112 * Set when the node is not supposed to be shown on screen.
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
113 */
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
114 #define ASC_SCENE_NODE_HIDDEN 0x80000000
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
115
24bd333be668 fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents: 82
diff changeset
116
95
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
117 /**
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
118 * Creates an empty node that may serve as a container for other nodes.
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
119 *
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
120 * The free_func of this node will be a simple free().
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
121 *
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
122 * @return the new node
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
123 */
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
124 AscSceneNode *asc_scene_node_empty(void);
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
125
114
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
126 // TODO: create a common init-function that all "subclasses" use, which also debug-logs the assigned name
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
127
95
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
128 /**
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
129 * Unlinks the node from its parent and frees the entire subtree.
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
130 *
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
131 * The free_func of this node and all child nodes is called, starting
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
132 * with the leaf nodes and terminating with \p node.
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
133 *
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
134 * @param node the node to unlink
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
135 */
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
136 void asc_scene_node_free(AscSceneNode *node);
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
137
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
138 /**
114
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
139 * Sets the name of a node.
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
140 *
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
141 * @param node the node
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
142 * @param name the new name of the node
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
143 */
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
144 void asc_scene_node_name(AscSceneNode *node, const char *name);
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
145
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
146 /**
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
147 * Returns the name of the node.
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
148 *
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
149 * Names are not necessarily unique.
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
150 *
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
151 * @param node the node
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
152 * @return the node's name or a calculated name if it does not have one
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
153 */
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
154 cxstring asc_scene_node_get_name(AscSceneNode *node);
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
155
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
156 /**
95
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
157 * Links a node to a (new) parent.
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
158 *
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
159 * @param parent the (new) parent
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
160 * @param node the node to link
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
161 */
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
162 void asc_scene_node_link(
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
163 AscSceneNode *restrict parent,
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
164 AscSceneNode *restrict node
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
165 );
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
166
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
167 /**
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
168 * Unlinks a node from its parent.
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
169 *
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
170 * This might be useful to temporarily remove a subtree from a scene.
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
171 * To permanently remove the node use asc_scene_node_free().
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
172 *
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
173 * @param node the node to unlink
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
174 */
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
175 void asc_scene_node_unlink(AscSceneNode *node);
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
176
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
177 void asc_node_update(AscSceneNode *node);
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
178
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
179 void asc_node_update_transform(AscSceneNode *node);
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
180
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
181
102
0d94fd280c6e remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents: 95
diff changeset
182 /**
0d94fd280c6e remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents: 95
diff changeset
183 * This is the z-position a simple 2D element should have to allow
0d94fd280c6e remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents: 95
diff changeset
184 * stacking 2D elements with depth-test.
0d94fd280c6e remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents: 95
diff changeset
185 */
0d94fd280c6e remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents: 95
diff changeset
186 #define ASC_SCENE_2D_DEPTH_OFFSET 0.0078125f
0d94fd280c6e remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents: 95
diff changeset
187
125
0a8747b02df8 remove GCC attributes which are rarely helpful - resolves #663
Mike Becker <universe@uap-core.de>
parents: 122
diff changeset
188 ASC_TRANFORM_FUNC void asc_set_position(AscSceneNode *node, float x, float y, float z) {
95
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
189 node->position.x = x;
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
190 node->position.y = y;
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
191 node->position.z = z;
133
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
192 asc_clear_flag(node->flags, ASC_SCENE_NODE_CUSTOM_TRANSFORM);
95
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
193 asc_node_update_transform(node);
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
194 }
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
195
125
0a8747b02df8 remove GCC attributes which are rarely helpful - resolves #663
Mike Becker <universe@uap-core.de>
parents: 122
diff changeset
196 ASC_TRANFORM_FUNC void asc_set_position2d(AscSceneNode *node, int x, int y) {
95
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
197 node->position.x = (float)x;
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
198 node->position.y = (float)y;
133
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
199 asc_clear_flag(node->flags, ASC_SCENE_NODE_CUSTOM_TRANSFORM);
95
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
200 asc_node_update_transform(node);
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
201 }
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
202
125
0a8747b02df8 remove GCC attributes which are rarely helpful - resolves #663
Mike Becker <universe@uap-core.de>
parents: 122
diff changeset
203 ASC_TRANFORM_FUNC asc_vec2i asc_get_position2d(AscSceneNode *node) {
105
2b7f92ff2c15 improve datatypes
Mike Becker <universe@uap-core.de>
parents: 102
diff changeset
204 return asc_vec2i_new(node->position.x, node->position.y);
95
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
205 }
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
206
134
42dcc8134a68 rename parameters of asc_set_rotation()
Mike Becker <universe@uap-core.de>
parents: 133
diff changeset
207 ASC_TRANFORM_FUNC void asc_set_rotation(AscSceneNode *node, float pitch, float yaw, float roll) {
42dcc8134a68 rename parameters of asc_set_rotation()
Mike Becker <universe@uap-core.de>
parents: 133
diff changeset
208 node->rotation.pitch = pitch;
42dcc8134a68 rename parameters of asc_set_rotation()
Mike Becker <universe@uap-core.de>
parents: 133
diff changeset
209 node->rotation.yaw = yaw;
42dcc8134a68 rename parameters of asc_set_rotation()
Mike Becker <universe@uap-core.de>
parents: 133
diff changeset
210 node->rotation.roll = roll;
133
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
211 asc_clear_flag(node->flags, ASC_SCENE_NODE_CUSTOM_TRANSFORM);
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
212 asc_node_update_transform(node);
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
213 }
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
214
125
0a8747b02df8 remove GCC attributes which are rarely helpful - resolves #663
Mike Becker <universe@uap-core.de>
parents: 122
diff changeset
215 ASC_TRANFORM_FUNC void asc_set_scale(AscSceneNode *node, float width, float height, float depth) {
95
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
216 node->scale.width = width;
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
217 node->scale.height = height;
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
218 node->scale.depth = depth;
133
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
219 asc_clear_flag(node->flags, ASC_SCENE_NODE_CUSTOM_TRANSFORM);
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
220 asc_node_update_transform(node);
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
221 }
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
222
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
223
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
224 /**
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
225 * Directly modifies the transformation matrix by multiplying it with another matrix.
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
226 * This will set the node to use the custom transform mode.
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
227 *
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
228 * @param node the node to modify
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
229 * @param matrix the matrix to multiply with the current transform
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
230 */
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
231 ASC_TRANFORM_FUNC void asc_transform_multiply(AscSceneNode *node, const asc_transform matrix) {
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
232 asc_set_flag(node->flags, ASC_SCENE_NODE_CUSTOM_TRANSFORM);
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
233 asc_mat4f_mulst(node->transform, node->transform, matrix);
95
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
234 asc_node_update_transform(node);
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
235 }
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
236
133
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
237 /**
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
238 * Directly sets the transformation matrix.
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
239 * This will set the node to use the custom transform mode.
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
240 *
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
241 * @param node the node to modify
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
242 * @param matrix the matrix to set as the transform
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
243 */
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
244 ASC_TRANFORM_FUNC void asc_transform_set_matrix(AscSceneNode *node, const asc_transform matrix) {
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
245 asc_set_flag(node->flags, ASC_SCENE_NODE_CUSTOM_TRANSFORM);
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
246 memcpy(node->transform, matrix, sizeof(asc_transform));
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
247 asc_node_update_transform(node);
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
248 }
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
249
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
250 /**
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
251 * Resets the node to use component-based transformation.
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
252 * This will recalculate the transform matrix from position, rotation, and scale.
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
253 *
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
254 * @param node the node to modify
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
255 */
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
256 ASC_TRANFORM_FUNC void asc_transform_reset_to_components(AscSceneNode *node) {
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
257 asc_clear_flag(node->flags, ASC_SCENE_NODE_CUSTOM_TRANSFORM);
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
258 asc_node_update_transform(node);
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
259 }
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
260
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
261
82
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
262 #endif

mercurial