1 module godot.abi.types;
2 
3 //import godot.abi.api;
4 import godot.api.types;
5 public import core.stdc.stddef : wchar_t;
6 
7 @nogc nothrow:
8 extern (C):
9 
10 ////// Error
11 
12 enum godot_error {
13     GODOT_OK,
14     GODOT_FAILED, ///< Generic fail error
15     GODOT_ERR_UNAVAILABLE, ///< What is requested is unsupported/unavailable
16     GODOT_ERR_UNCONFIGURED, ///< The object being used hasnt been properly set up yet
17     GODOT_ERR_UNAUTHORIZED, ///< Missing credentials for requested resource
18     GODOT_ERR_PARAMETER_RANGE_ERROR, ///< Parameter given out of range (5)
19     GODOT_ERR_OUT_OF_MEMORY, ///< Out of memory
20     GODOT_ERR_FILE_NOT_FOUND,
21     GODOT_ERR_FILE_BAD_DRIVE,
22     GODOT_ERR_FILE_BAD_PATH,
23     GODOT_ERR_FILE_NO_PERMISSION, // (10)
24     GODOT_ERR_FILE_ALREADY_IN_USE,
25     GODOT_ERR_FILE_CANT_OPEN,
26     GODOT_ERR_FILE_CANT_WRITE,
27     GODOT_ERR_FILE_CANT_READ,
28     GODOT_ERR_FILE_UNRECOGNIZED, // (15)
29     GODOT_ERR_FILE_CORRUPT,
30     GODOT_ERR_FILE_MISSING_DEPENDENCIES,
31     GODOT_ERR_FILE_EOF,
32     GODOT_ERR_CANT_OPEN, ///< Can't open a resource/socket/file
33     GODOT_ERR_CANT_CREATE, // (20)
34     GODOT_ERR_QUERY_FAILED,
35     GODOT_ERR_ALREADY_IN_USE,
36     GODOT_ERR_LOCKED, ///< resource is locked
37     GODOT_ERR_TIMEOUT,
38     GODOT_ERR_CANT_CONNECT, // (25)
39     GODOT_ERR_CANT_RESOLVE,
40     GODOT_ERR_CONNECTION_ERROR,
41     GODOT_ERR_CANT_ACQUIRE_RESOURCE,
42     GODOT_ERR_CANT_FORK,
43     GODOT_ERR_INVALID_DATA, ///< Data passed is invalid	(30)
44     GODOT_ERR_INVALID_PARAMETER, ///< Parameter passed is invalid
45     GODOT_ERR_ALREADY_EXISTS, ///< When adding, item already exists
46     GODOT_ERR_DOES_NOT_EXIST, ///< When retrieving/erasing, it item does not exist
47     GODOT_ERR_DATABASE_CANT_READ, ///< database is full
48     GODOT_ERR_DATABASE_CANT_WRITE, ///< database is full	(35)
49     GODOT_ERR_COMPILATION_FAILED,
50     GODOT_ERR_METHOD_NOT_FOUND,
51     GODOT_ERR_LINK_FAILED,
52     GODOT_ERR_SCRIPT_FAILED,
53     GODOT_ERR_CYCLIC_LINK, // (40)
54     GODOT_ERR_INVALID_DECLARATION,
55     GODOT_ERR_DUPLICATE_SYMBOL,
56     GODOT_ERR_PARSE_ERROR,
57     GODOT_ERR_BUSY,
58     GODOT_ERR_SKIP, // (45)
59     GODOT_ERR_HELP, ///< user requested help!!
60     GODOT_ERR_BUG, ///< a bug in the software certainly happened, due to a double check failing or unexpected behavior.
61     GODOT_ERR_PRINTER_ON_FIRE, /// the parallel port printer is engulfed in flames
62     GODOT_ERR_OMFG_THIS_IS_VERY_VERY_BAD, ///< shit happens, has never been used, though
63     GODOT_ERR_WTF = GODOT_ERR_OMFG_THIS_IS_VERY_VERY_BAD ///< short version of the above
64 }
65 
66 ////// bool
67 
68 alias godot_bool = bool;
69 
70 enum GODOT_TRUE = 1;
71 enum GODOT_FALSE = 0;
72 
73 /////// int
74 
75 alias godot_int = int;
76 
77 /////// real
78 version (GODOT_USE_DOUBLE)
79     alias godot_real_t = double;
80 else
81     alias godot_real_t = float;
82 
83 // TODO: use proper config for GODOT_USE_DOUBLE
84 alias godot_float = double;
85 
86 alias uint64 = ulong;
87 alias uint64_t = uint64;
88 alias int64 = long;
89 alias int64_t = int64;
90 alias uint32 = uint;
91 alias uint32_t = uint32;
92 alias int32 = int;
93 alias int32_t = int32;
94 alias uint16 = ushort;
95 alias uint16_t = uint16;
96 alias int16 = short;
97 alias int16_t = int16;
98 alias uint8 = ubyte;
99 alias uint8_t = uint8;
100 alias int8 = byte;
101 alias int8_t = int8;
102 
103 // FIXME overriding D alias?
104 // AFAIK this is not related to godot_float and always has fixed size
105 //alias real_t = double;
106 alias real_t = godot.api.types.real_t;
107 
108 // internal godot id
109 struct ObjectID {
110     uint64_t id;
111 }
112 
113 alias char16_t = ushort;
114 alias char32_t = uint;
115 
116 /////// Object reference (type-safe void pointer)
117 struct godot_object {
118     package(godot) void* ptr;
119 }
120 
121 // core types
122 // NOTE: quite a few of these have sizes that cause D to generate incorrect
123 // calling convention for SysV ABI (bugs 5570 & 13207). Partial workaround is
124 // using larger integers instead of byte arrays. Needs fixing eventually...
125 
126 struct godot_array {
127     size_t _opaque;
128 }
129 
130 struct godot_basis {
131     uint[9] _opaque;
132 }
133 
134 struct godot_color {
135     ulong[2] _opaque;
136 }
137 
138 struct godot_dictionary {
139     size_t _opaque;
140 }
141 
142 struct godot_node_path {
143     ubyte[8] _opaque;
144 }
145 
146 struct godot_plane {
147     ubyte[4 * godot_real_t.sizeof] _opaque;
148 }
149 
150 mixin template PackedArray(Type, string name) {
151     mixin("struct godot_packed_" ~ name ~ "_array { size_t _opaque; }");
152     //mixin("struct godot_packed_"~name~"_array_read_access { ubyte _opaque; }");
153     //mixin("struct godot_packed_"~name~"_array_write_access { ubyte _opaque; }");
154 }
155 
156 mixin PackedArray!(ubyte, "byte");
157 mixin PackedArray!(int, "int32");
158 mixin PackedArray!(long, "int64");
159 mixin PackedArray!(float, "float32");
160 mixin PackedArray!(double, "float64");
161 mixin PackedArray!(godot_string, "string");
162 mixin PackedArray!(godot_vector2, "vector2");
163 mixin PackedArray!(godot_vector3, "vector3");
164 mixin PackedArray!(godot_color, "color");
165 
166 // Alignment hardcoded in `core/variant/callable.h`.
167 enum GODOT_CALLABLE_SIZE = 16;
168 
169 struct godot_callable {
170     ubyte[GODOT_CALLABLE_SIZE] _opaque;
171 }
172 
173 struct godot_quaternion {
174     ubyte[4 * godot_real_t.sizeof] _opaque;
175 }
176 
177 struct godot_rect2 {
178     ubyte[4 * godot_real_t.sizeof] _opaque;
179 }
180 
181 struct godot_rect2i {
182     ubyte[4 * int.sizeof] _opaque;
183 }
184 
185 struct godot_aabb {
186     ubyte[6 * godot_real_t.sizeof] _opaque;
187 }
188 
189 struct godot_rid {
190     ulong _opaque;
191 }
192 
193 struct godot_string {
194     size_t _opaque;
195 }
196 
197 struct godot_char_string {
198     size_t _opaque;
199 }
200 
201 struct godot_transform3d {
202     ubyte[12 * godot_real_t.sizeof] _opaque;
203 }
204 
205 struct godot_transform2d {
206     ubyte[6 * godot_real_t.sizeof] _opaque;
207 }
208 
209 struct godot_variant {
210     ubyte[24] _opaque;
211 }
212 
213 enum godot_variant_type {
214     GODOT_VARIANT_TYPE_NIL,
215 
216     // atomic types
217     GODOT_VARIANT_TYPE_BOOL,
218     GODOT_VARIANT_TYPE_INT,
219     GODOT_VARIANT_TYPE_FLOAT,
220     GODOT_VARIANT_TYPE_STRING,
221 
222     // math types
223 
224     GODOT_VARIANT_TYPE_VECTOR2, // 5
225     GODOT_VARIANT_TYPE_VECTOR2I,
226     GODOT_VARIANT_TYPE_RECT2,
227     GODOT_VARIANT_TYPE_RECT2I,
228     GODOT_VARIANT_TYPE_VECTOR3,
229     GODOT_VARIANT_TYPE_VECTOR3I, // 10
230     GODOT_VARIANT_TYPE_TRANSFORM2D,
231     GODOT_VARIANT_TYPE_VECTOR4,
232     GODOT_VARIANT_TYPE_VECTOR4I, // 10
233     GODOT_VARIANT_TYPE_PLANE,
234     GODOT_VARIANT_TYPE_QUATERNION,
235     GODOT_VARIANT_TYPE_AABB,
236     GODOT_VARIANT_TYPE_BASIS, // 15
237     GODOT_VARIANT_TYPE_TRANSFORM3D,
238     GODOT_VARIANT_TYPE_PROJECTION,
239 
240     // misc types
241     GODOT_VARIANT_TYPE_COLOR,
242     GODOT_VARIANT_TYPE_STRING_NAME,
243     GODOT_VARIANT_TYPE_NODE_PATH,
244     GODOT_VARIANT_TYPE_RID, // 20
245     GODOT_VARIANT_TYPE_OBJECT,
246     GODOT_VARIANT_TYPE_CALLABLE,
247     GODOT_VARIANT_TYPE_SIGNAL,
248     GODOT_VARIANT_TYPE_DICTIONARY,
249     GODOT_VARIANT_TYPE_ARRAY, // 25
250 
251     // arrays
252     GODOT_VARIANT_TYPE_PACKED_BYTE_ARRAY,
253     GODOT_VARIANT_TYPE_PACKED_INT32_ARRAY,
254     GODOT_VARIANT_TYPE_PACKED_INT64_ARRAY,
255     GODOT_VARIANT_TYPE_PACKED_FLOAT32_ARRAY,
256     GODOT_VARIANT_TYPE_PACKED_FLOAT64_ARRAY, // 30
257     GODOT_VARIANT_TYPE_PACKED_STRING_ARRAY,
258     GODOT_VARIANT_TYPE_PACKED_VECTOR2_ARRAY,
259     GODOT_VARIANT_TYPE_PACKED_VECTOR3_ARRAY,
260     GODOT_VARIANT_TYPE_PACKED_COLOR_ARRAY,
261 }
262 
263 enum godot_variant_call_error_error {
264     GODOT_CALL_ERROR_CALL_OK,
265     GODOT_CALL_ERROR_CALL_ERROR_INVALID_METHOD,
266     GODOT_CALL_ERROR_CALL_ERROR_INVALID_ARGUMENT,
267     GODOT_CALL_ERROR_CALL_ERROR_TOO_MANY_ARGUMENTS,
268     GODOT_CALL_ERROR_CALL_ERROR_TOO_FEW_ARGUMENTS,
269     GODOT_CALL_ERROR_CALL_ERROR_INSTANCE_IS_NULL,
270 }
271 
272 struct godot_variant_call_error {
273     godot_variant_call_error_error error;
274     int argument;
275     godot_variant_type expected;
276 }
277 
278 enum godot_variant_operator {
279     // comparison
280     GODOT_VARIANT_OP_EQUAL,
281     GODOT_VARIANT_OP_NOT_EQUAL,
282     GODOT_VARIANT_OP_LESS,
283     GODOT_VARIANT_OP_LESS_EQUAL,
284     GODOT_VARIANT_OP_GREATER,
285     GODOT_VARIANT_OP_GREATER_EQUAL,
286 
287     // mathematic
288     GODOT_VARIANT_OP_ADD,
289     GODOT_VARIANT_OP_SUBTRACT,
290     GODOT_VARIANT_OP_MULTIPLY,
291     GODOT_VARIANT_OP_DIVIDE,
292     GODOT_VARIANT_OP_NEGATE,
293     GODOT_VARIANT_OP_POSITIVE,
294     GODOT_VARIANT_OP_MODULE,
295     //GODOT_VARIANT_OP_STRING_CONCAT,
296 
297     // bitwise
298     GODOT_VARIANT_OP_SHIFT_LEFT,
299     GODOT_VARIANT_OP_SHIFT_RIGHT,
300     GODOT_VARIANT_OP_BIT_AND,
301     GODOT_VARIANT_OP_BIT_OR,
302     GODOT_VARIANT_OP_BIT_XOR,
303     GODOT_VARIANT_OP_BIT_NEGATE,
304 
305     // logic
306     GODOT_VARIANT_OP_AND,
307     GODOT_VARIANT_OP_OR,
308     GODOT_VARIANT_OP_XOR,
309     GODOT_VARIANT_OP_NOT,
310 
311     // containment
312     GODOT_VARIANT_OP_IN,
313 
314     GODOT_VARIANT_OP_MAX,
315 }
316 
317 enum godot_variant_utility_function_type {
318     GODOT_UTILITY_FUNC_TYPE_MATH,
319     GODOT_UTILITY_FUNC_TYPE_RANDOM,
320     GODOT_UTILITY_FUNC_TYPE_GENERAL
321 }
322 
323 struct godot_vector2 {
324     ubyte[2 * godot_real_t.sizeof] _opaque;
325 }
326 
327 struct godot_vector2i {
328     uint[2] _opaque;
329 }
330 
331 struct godot_vector3 {
332     ubyte[3 * godot_real_t.sizeof] _opaque;
333 }
334 
335 struct godot_vector3i {
336     uint[3] _opaque;
337 }
338 
339 struct godot_vector4 {
340     ubyte[4 * godot_real_t.sizeof] _opaque;
341 }
342 
343 struct godot_vector4i {
344     uint[4] _opaque;
345 }
346 
347 struct godot_projection {
348     godot_vector4[4] _opaque;
349 }
350 
351 enum godot_vector3_axis {
352     GODOT_VECTOR3_AXIS_X,
353     GODOT_VECTOR3_AXIS_Y,
354     GODOT_VECTOR3_AXIS_Z,
355 }
356 
357 // Packed arrays
358 struct godot_packed_byte_array {
359     size_t[2] _opaque;
360 }
361 
362 struct godot_packed_int32_array {
363     size_t[2] _opaque;
364 }
365 
366 struct godot_packed_int64_array {
367     size_t[2] _opaque;
368 }
369 
370 struct godot_packed_float32_array {
371     size_t[2] _opaque;
372 }
373 
374 struct godot_packed_float64_array {
375     size_t[2] _opaque;
376 }
377 
378 struct godot_packed_string_array {
379     size_t[2] _opaque;
380 }
381 
382 struct godot_packed_vector2_array {
383     size_t[2] _opaque;
384 }
385 
386 struct godot_packed_vector2i_array {
387     size_t[2] _opaque;
388 }
389 
390 struct godot_packed_vector3_array {
391     size_t[2] _opaque;
392 }
393 
394 struct godot_packed_vector3i_array {
395     size_t[2] _opaque;
396 }
397 
398 struct godot_packed_color_array {
399     size_t[2] _opaque;
400 }