Sun, 01 Jun 2025 14:28:30 +0200
add possibility to modify the node's transformation matrix
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 | 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; |
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
38 | |
113
71ba88258ea0
change node's free function to a destroy function
Mike Becker <universe@uap-core.de>
parents:
108
diff
changeset
|
39 | 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
|
40 | typedef void(*asc_scene_node_update_func)(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
|
41 | |
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
42 | enum AscRenderGroup { |
95
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
43 | ASC_RENDER_GROUP_NONE = -1, |
82
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
44 | ASC_RENDER_GROUP_SPRITE_OPAQUE, |
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
45 | ASC_RENDER_GROUP_SPRITE_BLEND, |
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
46 | 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
|
47 | }; |
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
48 | |
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
49 | 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
|
50 | 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
|
51 | 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
|
52 | 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
|
53 | 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
|
54 | AscSceneNode *last_child; |
114 | 55 | cxmutstr name; |
108
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
56 | /** |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
57 | * List of AscBehavior structs. |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
58 | * Not a pointer list! |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
59 | */ |
82
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
60 | CxList *behaviors; |
113
71ba88258ea0
change node's free function to a destroy function
Mike Becker <universe@uap-core.de>
parents:
108
diff
changeset
|
61 | 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
|
62 | asc_scene_node_update_func update_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
|
63 | 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
|
64 | 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
|
65 | 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
|
66 | 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
|
67 | 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
|
68 | 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
|
69 | /** |
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
70 | * 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
|
71 | * 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
|
72 | */ |
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
73 | 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
|
74 | }; |
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
75 | |
94
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
76 | |
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
77 | /** |
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
78 | * 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
|
79 | */ |
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
80 | #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
|
81 | /** |
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
82 | * 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
|
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_UPDATE_GRAPHICS 0x01000000 |
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 updated happened last frame. |
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
87 | */ |
108
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
88 | #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
|
89 | /** |
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
90 | * 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
|
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_UPDATE_TRANSFORM 0x04000000 |
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 happened last 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_TRANSFORM_UPDATED 0x08000000 |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
97 | /** |
133
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
98 | * 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
|
99 | * 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
|
100 | * calculate the transform matrix. |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
101 | */ |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
102 | #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
|
103 | /** |
108
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
104 | * 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
|
105 | */ |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
106 | #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
|
107 | /** |
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
108 | * 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
|
109 | */ |
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
110 | #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
|
111 | |
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
112 | |
95
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
113 | /** |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
114 | * 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
|
115 | * |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
116 | * 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
|
117 | * |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
118 | * @return the new node |
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 | 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
|
121 | |
114 | 122 | // TODO: create a common init-function that all "subclasses" use, which also debug-logs the assigned name |
123 | ||
95
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
124 | /** |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
125 | * 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
|
126 | * |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
127 | * 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
|
128 | * 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
|
129 | * |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
130 | * @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
|
131 | */ |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
132 | 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
|
133 | |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
134 | /** |
114 | 135 | * Sets the name of a node. |
136 | * | |
137 | * @param node the node | |
138 | * @param name the new name of the node | |
139 | */ | |
140 | void asc_scene_node_name(AscSceneNode *node, const char *name); | |
141 | ||
142 | /** | |
143 | * Returns the name of the node. | |
144 | * | |
145 | * Names are not necessarily unique. | |
146 | * | |
147 | * @param node the node | |
148 | * @return the node's name or a calculated name if it does not have one | |
149 | */ | |
150 | cxstring asc_scene_node_get_name(AscSceneNode *node); | |
151 | ||
152 | /** | |
95
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
153 | * 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
|
154 | * |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
155 | * @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
|
156 | * @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
|
157 | */ |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
158 | 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
|
159 | AscSceneNode *restrict parent, |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
160 | AscSceneNode *restrict node |
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 | |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
163 | /** |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
164 | * 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
|
165 | * |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
166 | * 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
|
167 | * 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
|
168 | * |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
169 | * @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
|
170 | */ |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
171 | 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
|
172 | |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
173 | 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
|
174 | |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
175 | 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
|
176 | |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
177 | |
102
0d94fd280c6e
remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
178 | /** |
0d94fd280c6e
remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
179 | * 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
|
180 | * 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
|
181 | */ |
0d94fd280c6e
remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
182 | #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
|
183 | |
125
0a8747b02df8
remove GCC attributes which are rarely helpful - resolves #663
Mike Becker <universe@uap-core.de>
parents:
122
diff
changeset
|
184 | 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
|
185 | node->position.x = x; |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
186 | node->position.y = y; |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
187 | 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
|
188 | 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
|
189 | 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
|
190 | } |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
191 | |
125
0a8747b02df8
remove GCC attributes which are rarely helpful - resolves #663
Mike Becker <universe@uap-core.de>
parents:
122
diff
changeset
|
192 | 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
|
193 | 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
|
194 | 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
|
195 | 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
|
196 | 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
|
197 | } |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
198 | |
125
0a8747b02df8
remove GCC attributes which are rarely helpful - resolves #663
Mike Becker <universe@uap-core.de>
parents:
122
diff
changeset
|
199 | ASC_TRANFORM_FUNC asc_vec2i asc_get_position2d(AscSceneNode *node) { |
105 | 200 | 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
|
201 | } |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
202 | |
133
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
203 | ASC_TRANFORM_FUNC void asc_set_rotation(AscSceneNode *node, float x, float y, float z) { |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
204 | node->rotation.x = x; |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
205 | node->rotation.y = y; |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
206 | node->rotation.z = z; |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
207 | 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
|
208 | 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
|
209 | } |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
210 | |
125
0a8747b02df8
remove GCC attributes which are rarely helpful - resolves #663
Mike Becker <universe@uap-core.de>
parents:
122
diff
changeset
|
211 | 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
|
212 | node->scale.width = width; |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
213 | node->scale.height = height; |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
214 | 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
|
215 | 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
|
216 | 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
|
217 | } |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
218 | |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
219 | |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
220 | /** |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
221 | * 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
|
222 | * 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
|
223 | * |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
224 | * @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
|
225 | * @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
|
226 | */ |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
227 | 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
|
228 | 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
|
229 | 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
|
230 | 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
|
231 | } |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
232 | |
133
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
233 | /** |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
234 | * 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
|
235 | * 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
|
236 | * |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
237 | * @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
|
238 | * @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
|
239 | */ |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
240 | 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
|
241 | 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
|
242 | 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
|
243 | 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
|
244 | } |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
245 | |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
246 | /** |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
247 | * 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
|
248 | * 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
|
249 | * |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
250 | * @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
|
251 | */ |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
252 | 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
|
253 | 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
|
254 | 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
|
255 | } |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
256 | |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
257 | |
82
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
258 | #endif |