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 }