src/ascension/scene_node.h

Thu, 31 Jul 2025 22:14:27 +0200

author
Mike Becker <universe@uap-core.de>
date
Thu, 31 Jul 2025 22:14:27 +0200
changeset 234
a1d70b8018c1
parent 219
62508d957a22
permissions
-rw-r--r--

improve structure of the game code and add a function to set the player position

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
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
164 /**
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
165 * 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
166 *
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
167 * 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
168 * 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
169 *
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
170 * @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
171 */
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
172 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
173
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
174 /**
204
be5cf64b5c29 rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents: 200
diff changeset
175 * 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
176 *
be5cf64b5c29 rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents: 200
diff changeset
177 * Used internally, usually you never need to call this.
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
178 * 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
179 *
be5cf64b5c29 rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents: 200
diff changeset
180 * @param node the node
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
181 * @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
182 */
be5cf64b5c29 rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents: 200
diff changeset
183 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
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 /**
114
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
186 * Sets the name of a node.
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
187 *
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
188 * @param node the node
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
189 * @param name the new name of the node
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
190 */
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
191 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
192
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
193 /**
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
194 * Returns the name of the node.
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 * Names are not necessarily unique.
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 * @param node the node
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
199 * @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
200 */
5b91bbab1ac0 give them nodes names
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
201 cxstring asc_scene_node_get_name(AscSceneNode *node);
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 /**
95
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
204 * 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
205 *
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
206 * @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
207 * @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
208 */
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
209 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
210 AscSceneNode *restrict parent,
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
211 AscSceneNode *restrict node
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
212 );
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
213
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 * 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
216 *
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
217 * 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
218 * 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
219 *
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
220 * @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
221 */
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
222 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
223
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
224 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
225
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
226 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
227
210
3021616e5772 improve asc_scene_node_allocate_data()
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
228 /**
3021616e5772 improve asc_scene_node_allocate_data()
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
229 * Allocates user data for the specified node.
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 * Also registers a corresponding free-function.
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 * @param node the node
3021616e5772 improve asc_scene_node_allocate_data()
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
234 * @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
235 * @return the user data pointer
3021616e5772 improve asc_scene_node_allocate_data()
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
236 */
3021616e5772 improve asc_scene_node_allocate_data()
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
237 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
238
102
0d94fd280c6e remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents: 95
diff changeset
239 /**
0d94fd280c6e remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents: 95
diff changeset
240 * 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
241 * 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
242 */
0d94fd280c6e remove separate depth attribute and use the z-coordinate instead
Mike Becker <universe@uap-core.de>
parents: 95
diff changeset
243 #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
244
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
245 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
246 node->position = position;
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
247 asc_scene_node_update_transform(node);
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
248 }
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
249
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
250 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
251 node->position.x += offset.x;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
252 node->position.y += offset.y;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
253 node->position.z += offset.z;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
254 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
255 }
be5cf64b5c29 rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents: 200
diff changeset
256
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
257 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
258 node->scale = scale;
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
259 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
260 }
be5cf64b5c29 rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents: 200
diff changeset
261
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
262 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
263 node->origin = origin;
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
264 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
265 }
be5cf64b5c29 rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents: 200
diff changeset
266
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
267 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
268 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
269 node->position.y = position.y;
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
270 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
271 }
622887f7e954 in preparation of more scenes, bring back AscScene struct
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
272
213
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
273 /**
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
274 * 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
275 *
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
276 * 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
277 * 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
278 *
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
279 * @param node the 2D node
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
280 * @param n the local z-index (default: 1)
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
281 */
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
282 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
283 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
284 asc_scene_node_update_transform(node);
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
285 }
3d252dbd7c8e add a tiled game field
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
286
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
287 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
288 node->position.x += offset.x;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
289 node->position.y += offset.y;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
290 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
291 }
be5cf64b5c29 rework how transformations work to allow rotations around a point of origin
Mike Becker <universe@uap-core.de>
parents: 200
diff changeset
292
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
293 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
294 node->scale.width = scale.width;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
295 node->scale.height = scale.height;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
296 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
297 }
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
298
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
299 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
300 node->origin.x = origin.x;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
301 node->origin.y = origin.y;
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
302 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
303 }
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
304
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
305 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
306 memcpy(node->rotation, rotation, ASC_TRANSFORM_SIZE);
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
307 asc_scene_node_update_transform(node);
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
308 }
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
309
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
310 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
311 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
312 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
313 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
314 asc_transform_copy(node->rotation, d);
206
26726b7a89a7 complete basic movement
Mike Becker <universe@uap-core.de>
parents: 204
diff changeset
315 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
316 }
133
823626940dc9 add possibility to modify the node's transformation matrix
Mike Becker <universe@uap-core.de>
parents: 126
diff changeset
317
82
4e1e698f4b0d add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
diff changeset
318 #endif

mercurial