src/ascension/scene_node.h

Thu, 17 Jul 2025 20:26:39 +0200

author
Mike Becker <universe@uap-core.de>
date
Thu, 17 Jul 2025 20:26:39 +0200
changeset 213
3d252dbd7c8e
parent 210
3021616e5772
permissions
-rw-r--r--

add a tiled game field

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
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
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
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
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
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
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
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
80 void *user_data;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
81 const CxAllocator *user_data_allocator;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
82 /**
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
83 * A free function that takes the allocator as the first argument and the data as the second.
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
84 */
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
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
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
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
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
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
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
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
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
188 * Sets the name of a node.
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
189 *
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
190 * @param node the node
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
191 * @param name the new name of the node
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
192 */
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
193 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
194
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
195 /**
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
196 * Returns the name of the node.
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
197 *
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
198 * Names are not necessarily unique.
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
199 *
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
200 * @param node the node
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
201 * @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
202 */
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
203 cxstring asc_scene_node_get_name(AscSceneNode *node);
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
204
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
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
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
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
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
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
210
3021616e5772 improve asc_scene_node_allocate_data()
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
230 /**
3021616e5772 improve asc_scene_node_allocate_data()
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
231 * Allocates user data for the specified node.
3021616e5772 improve asc_scene_node_allocate_data()
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
232 *
3021616e5772 improve asc_scene_node_allocate_data()
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
233 * Also registers a corresponding free-function.
3021616e5772 improve asc_scene_node_allocate_data()
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
234 *
3021616e5772 improve asc_scene_node_allocate_data()
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
235 * @param node the node
3021616e5772 improve asc_scene_node_allocate_data()
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
236 * @param n the size of the user data
3021616e5772 improve asc_scene_node_allocate_data()
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
237 * @return the user data pointer
3021616e5772 improve asc_scene_node_allocate_data()
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
238 */
3021616e5772 improve asc_scene_node_allocate_data()
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
239 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
240
102
0d94fd280c6e remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents: 95
diff changeset
241 /**
0d94fd280c6e remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents: 95
diff changeset
242 * 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
243 * 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
244 */
0d94fd280c6e remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents: 95
diff changeset
245 #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
246
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
247 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
248 node->position = position;
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
249 asc_scene_node_update_transform(node);
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
250 }
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
251
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
252 static inline void asc_scene_node_move(AscSceneNode *node, asc_vec3f offset) {
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
253 node->position.x += offset.x;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
254 node->position.y += offset.y;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
255 node->position.z += offset.z;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
256 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
257 }
be5cf64b5c29 rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents: 200
diff changeset
258
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
259 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
260 node->scale = scale;
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
261 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
262 }
be5cf64b5c29 rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents: 200
diff changeset
263
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
264 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
265 node->origin = origin;
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
266 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
267 }
be5cf64b5c29 rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents: 200
diff changeset
268
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
269 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
270 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
271 node->position.y = position.y;
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
272 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
273 }
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
274
213
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
275 /**
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
276 * Sets the z-index of a 2D scene node.
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
277 *
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
278 * The index is relative to the parent nodes and by default one.
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
279 * This means, children of a 2D node by default stack onto the parent node.
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
280 *
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
281 * @param node the 2D node
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
282 * @param n the local z-index (default: 1)
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
283 */
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
284 static inline void asc_scene_node_set_zindex(AscSceneNode *node, int n) {
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
285 node->position.z = n*ASC_SCENE_2D_DEPTH_OFFSET;
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
286 asc_scene_node_update_transform(node);
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
287 }
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
288
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
289 static inline void asc_scene_node_move2f(AscSceneNode *node, asc_vec2f offset) {
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
290 node->position.x += offset.x;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
291 node->position.y += offset.y;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
292 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
293 }
be5cf64b5c29 rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents: 200
diff changeset
294
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
295 static inline void asc_scene_node_set_scale2f(AscSceneNode *node, asc_vec2f scale) {
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
296 node->scale.width = scale.width;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
297 node->scale.height = scale.height;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
298 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
299 }
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
300
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
301 static inline void asc_scene_node_set_origin2f(AscSceneNode *node, asc_vec2f origin) {
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
302 node->origin.x = origin.x;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
303 node->origin.y = origin.y;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
304 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
305 }
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
306
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
307 static inline void asc_scene_node_set_rotation(AscSceneNode *node, asc_transform rotation) {
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
308 memcpy(node->rotation, rotation, ASC_TRANSFORM_SIZE);
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
309 asc_scene_node_update_transform(node);
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
310 }
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
311
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
312 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
313 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
314 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
315 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
316 asc_transform_copy(node->rotation, d);
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
317 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
318 }
133
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
319
82
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
320 #endif

mercurial