Wed, 16 Jul 2025 23:27:34 +0200
add asc_scene_node_init() - fixes #695
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 | |
206 | 31 | #include <cx/allocator.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
|
32 | #include <cx/list.h> |
114 | 33 | #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
|
34 | |
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 "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
|
36 | #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
|
37 | |
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
38 | typedef struct asc_scene_node_s AscSceneNode; |
167
8e6a661c87db
add functions to upload common uniforms
Mike Becker <universe@uap-core.de>
parents:
150
diff
changeset
|
39 | typedef struct asc_camera_s AscCamera; // avoids full include of camera.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
|
40 | |
113
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_destroy_func)(AscSceneNode*); |
71ba88258ea0
change node's free function to a destroy function
Mike Becker <universe@uap-core.de>
parents:
108
diff
changeset
|
42 | typedef void(*asc_scene_node_update_func)(AscSceneNode*); |
150
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
144
diff
changeset
|
43 | 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
|
44 | |
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
|
45 | // 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
|
46 | enum AscRenderGroup { |
95
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
47 | ASC_RENDER_GROUP_NONE = -1, |
150
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
144
diff
changeset
|
48 | ASC_RENDER_GROUP_2D_OPAQUE, |
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
144
diff
changeset
|
49 | 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
|
50 | 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
|
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 | |
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
53 | 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
|
54 | 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
|
55 | 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
|
56 | 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
|
57 | 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
|
58 | AscSceneNode *last_child; |
114 | 59 | cxmutstr name; |
108
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
60 | /** |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
61 | * List of AscBehavior structs. |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
62 | * Not a pointer list! |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
63 | */ |
82
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
64 | CxList *behaviors; |
113
71ba88258ea0
change node's free function to a destroy function
Mike Becker <universe@uap-core.de>
parents:
108
diff
changeset
|
65 | 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
|
66 | asc_scene_node_update_func update_func; |
150
3045f61bc4eb
make draw function dynamic
Mike Becker <universe@uap-core.de>
parents:
144
diff
changeset
|
67 | 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
|
68 | 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
|
69 | asc_transform world_transform; |
204
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
70 | asc_vec3f position; |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
71 | asc_vec3f scale; |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
72 | asc_vec3f origin; |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
73 | asc_transform rotation; |
82
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
74 | 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
|
75 | /** |
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
76 | * 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
|
77 | * 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
|
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 | uint32_t flags; |
206 | 80 | void *user_data; |
81 | const CxAllocator *user_data_allocator; | |
82 | /** | |
83 | * A free function that takes the allocator as the first argument and the data as the second. | |
84 | */ | |
85 | cx_destructor_func2 user_data_free_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
|
86 | }; |
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
87 | |
94
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
88 | |
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 | * 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
|
91 | */ |
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
92 | #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
|
93 | /** |
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
94 | * 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
|
95 | */ |
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
96 | #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
|
97 | /** |
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
98 | * 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
|
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_GRAPHICS_UPDATED 0x02000000 |
94
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
101 | /** |
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
102 | * 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
|
103 | */ |
108
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
104 | #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
|
105 | /** |
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
106 | * 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
|
107 | */ |
108
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
108 | #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
|
109 | /** |
94
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
110 | * 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
|
111 | */ |
24bd333be668
fix scene node flags defined in incorrect header
Mike Becker <universe@uap-core.de>
parents:
82
diff
changeset
|
112 | #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
|
113 | |
207
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
114 | |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
115 | struct asc_scene_node_init_args { |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
116 | asc_scene_node_draw_func draw_func; |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
117 | asc_scene_node_update_func update_func; |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
118 | asc_scene_node_destroy_func destroy_func; |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
119 | asc_transform rotation; |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
120 | asc_vec3f pos3d; |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
121 | asc_vec3f scale3d; |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
122 | asc_vec3f origin3d; |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
123 | asc_vec2i pos2d; |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
124 | asc_vec2u scale2d; |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
125 | asc_vec2i origin2d; |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
126 | enum AscRenderGroup render_group; |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
127 | const char *name; |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
128 | }; |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
129 | |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
130 | /** |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
131 | * Convenience macro to specify draw, update, and destroy func with a common prefix. |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
132 | * |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
133 | * @param prefix prefix for the draw, update, destroy funcs |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
134 | */ |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
135 | #define ASC_SCENE_NODE_FUNCS(prefix) .draw_func = prefix##_draw, .update_func = prefix##_update, .destroy_func = prefix##_destroy |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
136 | |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
137 | /** |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
138 | * See asc_scene_node_init(). |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
139 | * |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
140 | * @param node the node to initialize |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
141 | * @param args the arguments |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
142 | */ |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
143 | void asc_scene_node_init_(AscSceneNode *node, struct asc_scene_node_init_args args); |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
144 | |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
145 | /** |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
146 | * Initializes a node with default arguments. |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
147 | * |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
148 | * The minimum set of mandatory arguments are the draw, update, and destroy functions, as well as the render group. |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
149 | * |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
150 | * @param node the node to initialize |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
151 | * @param ... the arguments |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
152 | */ |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
153 | #define asc_scene_node_init(node, ...) asc_scene_node_init_(node, (struct asc_scene_node_init_args){__VA_ARGS__}) |
4d184a8706b1
add asc_scene_node_init() - fixes #695
Mike Becker <universe@uap-core.de>
parents:
206
diff
changeset
|
154 | |
95
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
155 | /** |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
156 | * 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
|
157 | * |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
158 | * 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
|
159 | * |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
160 | * @return the new 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 | 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
|
163 | |
189
2c063b225183
remove separate vectors for position, rotation, scale from scene node
Mike Becker <universe@uap-core.de>
parents:
175
diff
changeset
|
164 | // TODO: issue #695 - create a common init-function that all "subclasses" use, which also debug-logs the assigned name |
114 | 165 | |
95
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 | * 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
|
168 | * |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
169 | * 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
|
170 | * 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
|
171 | * |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
172 | * @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
|
173 | */ |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
174 | 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
|
175 | |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
176 | /** |
204
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
177 | * Calculates the transformation matrix from components. |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
178 | * |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
179 | * Used internally, usually you never need to call this. |
206 | 180 | * Use asc_scene_node_update_transform() to trigger a recalculation. |
204
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
181 | * |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
182 | * @param node the node |
206 | 183 | * @see asc_scene_node_update_transform() |
204
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
184 | */ |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
185 | void asc_scene_node_calculate_transform(AscSceneNode *node); |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
186 | |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
187 | /** |
114 | 188 | * Sets the name of a node. |
189 | * | |
190 | * @param node the node | |
191 | * @param name the new name of the node | |
192 | */ | |
193 | void asc_scene_node_name(AscSceneNode *node, const char *name); | |
194 | ||
195 | /** | |
196 | * Returns the name of the node. | |
197 | * | |
198 | * Names are not necessarily unique. | |
199 | * | |
200 | * @param node the node | |
201 | * @return the node's name or a calculated name if it does not have one | |
202 | */ | |
203 | cxstring asc_scene_node_get_name(AscSceneNode *node); | |
204 | ||
205 | /** | |
95
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
206 | * 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
|
207 | * |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
208 | * @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
|
209 | * @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
|
210 | */ |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
211 | 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
|
212 | AscSceneNode *restrict parent, |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
213 | AscSceneNode *restrict node |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
214 | ); |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
215 | |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
216 | /** |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
217 | * 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
|
218 | * |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
219 | * 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
|
220 | * 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
|
221 | * |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
222 | * @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
|
223 | */ |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
224 | 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
|
225 | |
206 | 226 | void asc_scene_node_update(AscSceneNode *node); |
95
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
227 | |
206 | 228 | void asc_scene_node_update_transform(AscSceneNode *node); |
95
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
229 | |
206 | 230 | void asc_scene_node_allocate_data(AscSceneNode *node, size_t n); |
95
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
231 | |
102
0d94fd280c6e
remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
232 | /** |
0d94fd280c6e
remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
233 | * 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
|
234 | * 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
|
235 | */ |
0d94fd280c6e
remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents:
95
diff
changeset
|
236 | #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
|
237 | |
206 | 238 | static inline void asc_scene_node_set_position(AscSceneNode *node, asc_vec3f position) { |
204
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
239 | node->position = position; |
206 | 240 | asc_scene_node_update_transform(node); |
241 | } | |
242 | ||
243 | static inline void asc_scene_node_move(AscSceneNode *node, asc_vec3f offset) { | |
244 | node->position.x += offset.x; | |
245 | node->position.y += offset.y; | |
246 | node->position.z += offset.z; | |
247 | asc_scene_node_update_transform(node); | |
204
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
248 | } |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
249 | |
206 | 250 | static inline void asc_scene_node_set_scale(AscSceneNode *node, asc_vec3f scale) { |
204
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
251 | node->scale = scale; |
206 | 252 | asc_scene_node_update_transform(node); |
204
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
253 | } |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
254 | |
206 | 255 | static inline void asc_scene_node_set_origin(AscSceneNode *node, asc_vec3f origin) { |
204
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
256 | node->origin = origin; |
206 | 257 | asc_scene_node_update_transform(node); |
204
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
258 | } |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
259 | |
206 | 260 | static inline void asc_scene_node_set_position2f(AscSceneNode *node, asc_vec2f position) { |
204
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
261 | node->position.x = position.x; |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
262 | node->position.y = position.y; |
206 | 263 | asc_scene_node_update_transform(node); |
95
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
264 | } |
622887f7e954
in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents:
94
diff
changeset
|
265 | |
206 | 266 | static inline void asc_scene_node_move2f(AscSceneNode *node, asc_vec2f offset) { |
267 | node->position.x += offset.x; | |
268 | node->position.y += offset.y; | |
269 | asc_scene_node_update_transform(node); | |
204
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
270 | } |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
271 | |
206 | 272 | static inline void asc_scene_node_set_scale2f(AscSceneNode *node, asc_vec2f scale) { |
273 | node->scale.width = scale.width; | |
274 | node->scale.height = scale.height; | |
275 | asc_scene_node_update_transform(node); | |
133
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
276 | } |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
277 | |
206 | 278 | static inline void asc_scene_node_set_origin2f(AscSceneNode *node, asc_vec2f origin) { |
279 | node->origin.x = origin.x; | |
280 | node->origin.y = origin.y; | |
281 | asc_scene_node_update_transform(node); | |
133
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
282 | } |
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
283 | |
206 | 284 | static inline void asc_scene_node_set_rotation(AscSceneNode *node, asc_transform rotation) { |
285 | memcpy(node->rotation, rotation, ASC_TRANSFORM_SIZE); | |
286 | asc_scene_node_update_transform(node); | |
287 | } | |
288 | ||
289 | static inline void asc_scene_node_roll_deg(AscSceneNode *node, float angle) { | |
204
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
290 | asc_transform r, d; |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
291 | asc_transform_roll(r, asc_rad(angle)); |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
292 | asc_transform_apply(d, r, node->rotation); |
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
293 | asc_transform_copy(node->rotation, d); |
206 | 294 | asc_scene_node_update_transform(node); |
204
be5cf64b5c29
rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents:
200
diff
changeset
|
295 | } |
133
823626940dc9
add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents:
126
diff
changeset
|
296 | |
82
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
297 | #endif |