Kemena3D
Loading...
Searching...
No Matches
kdatatype.h
Go to the documentation of this file.
1
5
6#ifndef KDATATYPE_H
7#define KDATATYPE_H
8
9#include "kmd5.h"
10
11#include <string>
12#include <vector>
13#include <iostream>
14#include <random>
15#include <sstream>
16#include <fstream>
17#include <iomanip>
18
19#include <glm/glm.hpp>
20#define GLM_ENABLE_EXPERIMENTAL
21#include <glm/gtx/quaternion.hpp>
22
23// Tell SDL not to mess with main()
24#define SDL_MAIN_HANDLED
25#include <SDL3/SDL.h>
26#include <SDL3/SDL_main.h>
27
28namespace kemena
29{
32 typedef glm::vec2 kVec2;
33 typedef glm::vec3 kVec3;
34 typedef glm::vec4 kVec4;
35 typedef glm::ivec2 kIvec2;
36 typedef glm::ivec3 kIvec3;
37 typedef glm::ivec4 kIvec4;
38 typedef glm::mat3 kMat3;
39 typedef glm::mat4 kMat4;
40 typedef glm::quat kQuat;
41
42 typedef std::string kString;
44
46#define MAX_BONE_INFLUENCE 4
48#define MAX_BONES 128
49
57
71
81
92
101
110
120
131
140
143#define K_EVENT_QUIT 256
144#define K_EVENT_KEYDOWN 768
145#define K_EVENT_KEYUP 769
146#define K_EVENT_MOUSEMOTION 1024
147#define K_EVENT_MOUSEBUTTONDOWN 1025
148#define K_EVENT_MOUSEBUTTONUP 1026
149#define K_EVENT_MOUSEWHEEL 1027
151
154#define K_MOUSEBUTTON_LEFT 1
155#define K_MOUSEBUTTON_MIDDLE 2
156#define K_MOUSEBUTTON_RIGHT 3
158
159// Key Code (OS key location)
160#define K_KEY_UNKNOWN 0
161#define K_KEY_BACKSPACE 8
162#define K_KEY_TAB 9
163#define K_KEY_RETURN 13
164#define K_KEY_ESCAPE 27
165#define K_KEY_SPACE 32
166#define K_KEY_EXCLAIM 33 // !
167#define K_KEY_QUOTEDBL 34 // "
168#define K_KEY_HASH 35 // #
169#define K_KEY_DOLLAR 36 // $
170#define K_KEY_PERCENT 37 // %
171#define K_KEY_AMPERSAND 38 // &
172#define K_KEY_QUOTE 39 // '
173#define K_KEY_LEFTPAREN 40 // (
174#define K_KEY_RIGHTPAREN 41 // )
175#define K_KEY_ASTERISK 42 // *
176#define K_KEY_PLUS 43 // +
177#define K_KEY_COMMA 44 // ,
178#define K_KEY_MINUS 45 // -
179#define K_KEY_PERIOD 46 // .
180#define K_KEY_SLASH 47 // /
181#define K_KEY_0 48
182#define K_KEY_1 49
183#define K_KEY_2 50
184#define K_KEY_3 51
185#define K_KEY_4 52
186#define K_KEY_5 53
187#define K_KEY_6 54
188#define K_KEY_7 55
189#define K_KEY_8 56
190#define K_KEY_9 57
191#define K_KEY_A 97
192#define K_KEY_B 98
193#define K_KEY_C 99
194#define K_KEY_D 100
195#define K_KEY_E 101
196#define K_KEY_F 102
197#define K_KEY_G 103
198#define K_KEY_H 104
199#define K_KEY_I 105
200#define K_KEY_J 106
201#define K_KEY_K 107
202#define K_KEY_L 108
203#define K_KEY_M 109
204#define K_KEY_N 110
205#define K_KEY_O 111
206#define K_KEY_P 112
207#define K_KEY_Q 113
208#define K_KEY_R 114
209#define K_KEY_S 115
210#define K_KEY_T 116
211#define K_KEY_U 117
212#define K_KEY_V 118
213#define K_KEY_W 119
214#define K_KEY_X 120
215#define K_KEY_Y 121
216#define K_KEY_Z 122
217
218// Function keys
219#define K_KEY_F1 1073741882
220#define K_KEY_F2 1073741883
221#define K_KEY_F3 1073741884
222#define K_KEY_F4 1073741885
223#define K_KEY_F5 1073741886
224#define K_KEY_F6 1073741887
225#define K_KEY_F7 1073741888
226#define K_KEY_F8 1073741889
227#define K_KEY_F9 1073741890
228#define K_KEY_F10 1073741891
229#define K_KEY_F11 1073741892
230#define K_KEY_F12 1073741893
231
232// Modifier keys
233#define K_KEY_CAPSLOCK 1073741881
234#define K_KEY_LSHIFT 1073742049
235#define K_KEY_RSHIFT 1073742053
236#define K_KEY_LCTRL 1073742048
237#define K_KEY_RCTRL 1073742052
238#define K_KEY_LALT 1073742050
239#define K_KEY_RALT 1073742054
240#define K_KEY_LGUI 1073742051 // Windows / Command key
241#define K_KEY_RGUI 1073742055
242
243// Navigation / Editing
244#define K_KEY_INSERT 1073741897
245#define K_KEY_DELETE 127
246#define K_KEY_HOME 1073741898
247#define K_KEY_END 1073741901
248#define K_KEY_PAGEUP 1073741899
249#define K_KEY_PAGEDOWN 1073741902
250
251// Arrow keys
252#define K_KEY_RIGHT 1073741903
253#define K_KEY_LEFT 1073741904
254#define K_KEY_DOWN 1073741905
255#define K_KEY_UP 1073741906
256
257// Keypad (Numpads)
258#define K_KEY_NUMLOCKCLEAR 1073741907
259#define K_KEY_KP_DIVIDE 1073741908
260#define K_KEY_KP_MULTIPLY 1073741909
261#define K_KEY_KP_MINUS 1073741910
262#define K_KEY_KP_PLUS 1073741911
263#define K_KEY_KP_ENTER 1073741912
264#define K_KEY_KP_1 1073741913
265#define K_KEY_KP_2 1073741914
266#define K_KEY_KP_3 1073741915
267#define K_KEY_KP_4 1073741916
268#define K_KEY_KP_5 1073741917
269#define K_KEY_KP_6 1073741918
270#define K_KEY_KP_7 1073741919
271#define K_KEY_KP_8 1073741920
272#define K_KEY_KP_9 1073741921
273#define K_KEY_KP_0 1073741922
274#define K_KEY_KP_PERIOD 1073741923
275
276// Others
277#define K_KEY_PRINTSCREEN 1073741894
278#define K_KEY_SCROLLLOCK 1073741895
279#define K_KEY_PAUSE 1073741896
280
281// Scan Code (physical key location)
282#define K_SCANCODE_UNKNOWN 0
283#define K_SCANCODE_A 4
284#define K_SCANCODE_B 5
285#define K_SCANCODE_C 6
286#define K_SCANCODE_D 7
287#define K_SCANCODE_E 8
288#define K_SCANCODE_F 9
289#define K_SCANCODE_G 10
290#define K_SCANCODE_H 11
291#define K_SCANCODE_I 12
292#define K_SCANCODE_J 13
293#define K_SCANCODE_K 14
294#define K_SCANCODE_L 15
295#define K_SCANCODE_M 16
296#define K_SCANCODE_N 17
297#define K_SCANCODE_O 18
298#define K_SCANCODE_P 19
299#define K_SCANCODE_Q 20
300#define K_SCANCODE_R 21
301#define K_SCANCODE_S 22
302#define K_SCANCODE_T 23
303#define K_SCANCODE_U 24
304#define K_SCANCODE_V 25
305#define K_SCANCODE_W 26
306#define K_SCANCODE_X 27
307#define K_SCANCODE_Y 28
308#define K_SCANCODE_Z 29
309#define K_SCANCODE_1 30
310#define K_SCANCODE_2 31
311#define K_SCANCODE_3 32
312#define K_SCANCODE_4 33
313#define K_SCANCODE_5 34
314#define K_SCANCODE_6 35
315#define K_SCANCODE_7 36
316#define K_SCANCODE_8 37
317#define K_SCANCODE_9 38
318#define K_SCANCODE_0 39
319#define K_SCANCODE_RETURN 40
320#define K_SCANCODE_ESCAPE 41
321#define K_SCANCODE_BACKSPACE 42
322#define K_SCANCODE_TAB 43
323#define K_SCANCODE_SPACE 44
324#define K_SCANCODE_MINUS 45
325#define K_SCANCODE_EQUALS 46
326#define K_SCANCODE_LEFTBRACKET 47
327#define K_SCANCODE_RIGHTBRACKET 48
328#define K_SCANCODE_BACKSLASH 49
329#define K_SCANCODE_NONUSHASH 50
330#define K_SCANCODE_SEMICOLON 51
331#define K_SCANCODE_APOSTROPHE 52
332#define K_SCANCODE_GRAVE 53
333#define K_SCANCODE_COMMA 54
334#define K_SCANCODE_PERIOD 55
335#define K_SCANCODE_SLASH 56
336#define K_SCANCODE_CAPSLOCK 57
337#define K_SCANCODE_F1 58
338#define K_SCANCODE_F2 59
339#define K_SCANCODE_F3 60
340#define K_SCANCODE_F4 61
341#define K_SCANCODE_F5 62
342#define K_SCANCODE_F6 63
343#define K_SCANCODE_F7 64
344#define K_SCANCODE_F8 65
345#define K_SCANCODE_F9 66
346#define K_SCANCODE_F10 67
347#define K_SCANCODE_F11 68
348#define K_SCANCODE_F12 69
349#define K_SCANCODE_PRINTSCREEN 70
350#define K_SCANCODE_SCROLLLOCK 71
351#define K_SCANCODE_PAUSE 72
352#define K_SCANCODE_INSERT 73
353#define K_SCANCODE_HOME 74
354#define K_SCANCODE_PAGEUP 75
355#define K_SCANCODE_DELETE 76
356#define K_SCANCODE_END 77
357#define K_SCANCODE_PAGEDOWN 78
358#define K_SCANCODE_RIGHT 79
359#define K_SCANCODE_LEFT 80
360#define K_SCANCODE_DOWN 81
361#define K_SCANCODE_UP 82
362#define K_SCANCODE_NUMLOCKCLEAR 83
363#define K_SCANCODE_KP_DIVIDE 84
364#define K_SCANCODE_KP_MULTIPLY 85
365#define K_SCANCODE_KP_MINUS 86
366#define K_SCANCODE_KP_PLUS 87
367#define K_SCANCODE_KP_ENTER 88
368#define K_SCANCODE_KP_1 89
369#define K_SCANCODE_KP_2 90
370#define K_SCANCODE_KP_3 91
371#define K_SCANCODE_KP_4 92
372#define K_SCANCODE_KP_5 93
373#define K_SCANCODE_KP_6 94
374#define K_SCANCODE_KP_7 95
375#define K_SCANCODE_KP_8 96
376#define K_SCANCODE_KP_9 97
377#define K_SCANCODE_KP_0 98
378#define K_SCANCODE_KP_PERIOD 99
379#define K_SCANCODE_NONUSBACKSLASH 100
380#define K_SCANCODE_APPLICATION 101
381#define K_SCANCODE_KP_EQUALS 103
382#define K_SCANCODE_F13 104
383#define K_SCANCODE_F14 105
384#define K_SCANCODE_F15 106
385#define K_SCANCODE_F16 107
386#define K_SCANCODE_F17 108
387#define K_SCANCODE_F18 109
388#define K_SCANCODE_F19 110
389#define K_SCANCODE_F20 111
390#define K_SCANCODE_F21 112
391#define K_SCANCODE_F22 113
392#define K_SCANCODE_F23 114
393#define K_SCANCODE_F24 115
394#define K_SCANCODE_EXECUTE 116
395#define K_SCANCODE_HELP 117
396#define K_SCANCODE_MENU 118
397#define K_SCANCODE_SELECT 119
398#define K_SCANCODE_STOP 120
399#define K_SCANCODE_AGAIN 121
400#define K_SCANCODE_UNDO 122
401#define K_SCANCODE_CUT 123
402#define K_SCANCODE_COPY 124
403#define K_SCANCODE_PASTE 125
404#define K_SCANCODE_FIND 126
405#define K_SCANCODE_MUTE 127
406#define K_SCANCODE_VOLUMEUP 128
407#define K_SCANCODE_VOLUMEDOWN 129
408#define K_SCANCODE_KP_COMMA 133
409#define K_SCANCODE_KP_EQUALSAS400 134
410#define K_SCANCODE_LCTRL 224
411#define K_SCANCODE_LSHIFT 225
412#define K_SCANCODE_LALT 226
413#define K_SCANCODE_LGUI 227
414#define K_SCANCODE_RCTRL 228
415#define K_SCANCODE_RSHIFT 229
416#define K_SCANCODE_RALT 230
417#define K_SCANCODE_RGUI 231
418
427 {
428 SDL_Event event;
429 std::vector<unsigned int> keys;
430
432 SDL_Event *getSdlEvent()
433 {
434 return &event;
435 }
436
441 bool hasEvent()
442 {
443 if (SDL_PollEvent(&event))
444 {
445 return true;
446 }
447 return false;
448 }
449
454 unsigned int getType()
455 {
456 if (event.type == K_EVENT_KEYDOWN)
457 {
458 unsigned int key = getKeyButton();
459
460 // Put key into array
461 bool found = false;
462 if (keys.size() > 0)
463 {
464 for (size_t i = 0; i < keys.size(); ++i)
465 {
466 if (keys.at(i) == key)
467 {
468 found = true;
469 break;
470 }
471 }
472 }
473 if (!found)
474 {
475 keys.push_back(key);
476 }
477 }
478 else if (event.type == K_EVENT_KEYUP)
479 {
480 unsigned int key = getKeyButton();
481
482 // Remove key from array
483 if (keys.size() > 0)
484 {
485 for (size_t i = keys.size(); i-- > 0;)
486 {
487 if (keys[i] == key)
488 {
489 keys.erase(keys.begin() + i);
490 break;
491 }
492 }
493 }
494 }
495
496 return event.type;
497 }
498
500 unsigned int getMouseButton()
501 {
502 return event.button.button;
503 }
504
506 float getMouseX()
507 {
508 return event.button.x;
509 }
510
512 float getMouseY()
513 {
514 return event.button.y;
515 }
516
519 {
520 return event.motion.x;
521 }
522
525 {
526 return event.motion.y;
527 }
528
530 unsigned int getKeyButton()
531 {
532 return event.key.key;
533 }
534
539 bool getKeyDown(unsigned int key)
540 {
541 if (keys.empty())
542 return false;
543
544 for (size_t i = 0; i < keys.size(); ++i)
545 {
546 if (keys[i] == key)
547 {
548 return true;
549 }
550 }
551
552 return false;
553 }
554
557 {
558 return event.wheel.x;
559 }
560
563 {
564 return event.wheel.y;
565 }
566 };
567
571 struct kAABB
572 {
573 kVec3 min = kVec3( 1e30f);
574 kVec3 max = kVec3(-1e30f);
575
577 kAABB() = default;
578
585
587 kVec3 center() const { return (min + max) * 0.5f; }
588
590 kVec3 halfExtents() const { return (max - min) * 0.5f; }
591
593 bool isValid() const { return min.x <= max.x && min.y <= max.y && min.z <= max.z; }
594
599 void expandBy(const kVec3 &point) {
600 min = glm::min(min, point);
601 max = glm::max(max, point);
602 }
603
608 void merge(const kAABB &other) {
609 min = glm::min(min, other.min);
610 max = glm::max(max, other.max);
611 }
612
618 kAABB expanded(float amount) const {
619 return { min - kVec3(amount), max + kVec3(amount) };
620 }
621
627 bool contains(const kAABB &other) const {
628 return other.min.x >= min.x && other.max.x <= max.x
629 && other.min.y >= min.y && other.max.y <= max.y
630 && other.min.z >= min.z && other.max.z <= max.z;
631 }
632
638 bool overlaps(const kAABB &other) const {
639 return min.x <= other.max.x && max.x >= other.min.x
640 && min.y <= other.max.y && max.y >= other.min.y
641 && min.z <= other.max.z && max.z >= other.min.z;
642 }
643 };
644
659
664 {
665 int id;
667 };
668
671 {
673 float timeStamp;
674 };
675
678 {
680 float timeStamp;
681 };
682
685 {
687 float timeStamp;
688 };
689
700 {
704 std::vector<kNodeData> children;
705 };
706
711 {
712 float ax;
713 float lsb;
714 float tx, ty;
715 int w, h;
716 int xoff, yoff;
717 };
718
724 inline kString generateFileChecksum(const kString &fileName)
725 {
726 std::ifstream file(fileName, std::ios::binary);
727 if (!file.is_open())
728 return "";
729
730 const size_t bufferSize = 8192;
731 std::vector<uint8_t> buffer(bufferSize);
732
733 kMD5 md5;
734
735 while (file)
736 {
737 file.read(reinterpret_cast<char *>(buffer.data()), bufferSize);
738 std::streamsize bytesRead = file.gcount();
739 if (bytesRead > 0)
740 {
741 md5.update(buffer.data(), static_cast<size_t>(bytesRead));
742 }
743 }
744
745 return md5.final();
746 }
747
753 inline kString generateRandomString(int stringLength)
754 {
755 const kString possibleCharacters("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
756
757 kString randomString;
758 randomString.reserve(stringLength);
759
760 std::random_device rd;
761 std::mt19937 gen(rd());
762 std::uniform_int_distribution<> dist(0, (int)possibleCharacters.length() - 1);
763
764 for (int i = 0; i < stringLength; ++i)
765 {
766 char nextChar = possibleCharacters.at(dist(gen));
767 randomString.push_back(nextChar);
768 }
769
770 return randomString;
771 }
772
778 {
779 // Generates UUID v4
780 static std::random_device rd;
781 static std::mt19937_64 gen(rd());
782 static std::uniform_int_distribution<uint64_t> dist;
783
784 // Generate 128 bits (UUID is 128-bit)
785 uint64_t high = dist(gen);
786 uint64_t low = dist(gen);
787
788 // Set version (UUID v4 -> bits 12–15 of time_hi_and_version)
789 high &= 0xFFFFFFFFFFFF0FFFULL;
790 high |= 0x0000000000004000ULL;
791
792 // Set variant (10xx -> bits 62–63)
793 low &= 0x3FFFFFFFFFFFFFFFULL;
794 low |= 0x8000000000000000ULL;
795
796 std::stringstream ss;
797 ss << std::hex << std::setfill('0');
798
799 ss << std::setw(8) << (uint32_t)(high >> 32);
800 ss << "-";
801 ss << std::setw(4) << (uint16_t)(high >> 16);
802 ss << "-";
803 ss << std::setw(4) << (uint16_t)(high);
804 ss << "-";
805 ss << std::setw(4) << (uint16_t)(low >> 48);
806 ss << "-";
807 ss << std::setw(12) << (low & 0x0000FFFFFFFFFFFFULL);
808
809 return ss.str();
810 }
811
812}; // namespace kemena
813
814#endif // KDATATYPE_H
Streaming MD5 message-digest implementation.
Definition kmd5.h:26
void update(const uint8_t *input, size_t length)
Feeds a block of raw bytes into the running digest.
Definition kmd5.h:226
std::string final()
Finalises the digest and returns it as a lowercase hex string.
Definition kmd5.h:248
#define K_EVENT_KEYDOWN
Definition kdatatype.h:144
#define MAX_BONE_INFLUENCE
Maximum number of bones a single vertex can be influenced by.
Definition kdatatype.h:46
#define K_EVENT_KEYUP
Definition kdatatype.h:145
Top-level Kemena3D engine namespace.
Definition kanimation.h:23
kCameraType
Camera behaviour mode.
Definition kdatatype.h:97
@ CAMERA_TYPE_LOCKED
Orbit; always looks at a fixed target point.
Definition kdatatype.h:99
@ CAMERA_TYPE_FREE
Free-fly; position and orientation are set independently.
Definition kdatatype.h:98
kString generateRandomString(int stringLength)
Generates a cryptographically random alphanumeric kString.
Definition kdatatype.h:753
kLightType
Light source variety.
Definition kdatatype.h:115
@ LIGHT_TYPE_POINT
Omnidirectional point light.
Definition kdatatype.h:117
@ LIGHT_TYPE_SPOT
Cone-shaped spotlight.
Definition kdatatype.h:118
@ LIGHT_TYPE_SUN
Directional (infinite-distance) light.
Definition kdatatype.h:116
glm::ivec2 kIvec2
2-component integer vector.
Definition kdatatype.h:35
std::string kString
Standard string alias.
Definition kdatatype.h:42
glm::mat3 kMat3
3x3 float matrix.
Definition kdatatype.h:38
kString generateFileChecksum(const kString &fileName)
Computes an MD5 checksum of the given file.
Definition kdatatype.h:724
glm::quat kQuat
Unit quaternion.
Definition kdatatype.h:40
kString generateUuid()
Generates a random UUID v4 kString.
Definition kdatatype.h:777
kWindowType
Window creation mode.
Definition kdatatype.h:76
@ WINDOW_DEFAULT
Normal windowed mode.
Definition kdatatype.h:77
@ WINDOW_FULLSCREEN
Exclusive fullscreen.
Definition kdatatype.h:78
@ WINDOW_BORDERLESS
Borderless/windowed fullscreen.
Definition kdatatype.h:79
glm::ivec3 kIvec3
3-component integer vector.
Definition kdatatype.h:36
kRenderMode
Selects the debug visualization mode for the scene viewport.
Definition kdatatype.h:62
@ RENDER_MODE_NORMALS
World normals visualized as RGB.
Definition kdatatype.h:65
@ RENDER_MODE_FULL
Normal fully-lit render.
Definition kdatatype.h:63
@ RENDER_MODE_ALBEDO
Albedo / diffuse texture only, no lighting.
Definition kdatatype.h:64
@ RENDER_MODE_FULL_WIREFRAME
Full lit render with wireframe overlay.
Definition kdatatype.h:69
@ RENDER_MODE_DEPTH
Linearized depth as greyscale.
Definition kdatatype.h:67
@ RENDER_MODE_OBJECT_IDS
Color-coded object ID picking buffer.
Definition kdatatype.h:68
@ RENDER_MODE_WIREFRAME
Flat-color wireframe only.
Definition kdatatype.h:66
kRendererType
Identifies the graphics backend used by kRenderer.
Definition kdatatype.h:54
@ RENDERER_GL
OpenGL renderer.
Definition kdatatype.h:55
glm::vec2 kVec2
2-component float vector.
Definition kdatatype.h:32
kNodeType
Scene-graph node type tag.
Definition kdatatype.h:86
@ NODE_TYPE_LIGHT
Light source.
Definition kdatatype.h:90
@ NODE_TYPE_MESH
Renderable mesh.
Definition kdatatype.h:88
@ NODE_TYPE_CAMERA
Camera.
Definition kdatatype.h:89
@ NODE_TYPE_OBJECT
Generic empty object.
Definition kdatatype.h:87
glm::vec4 kVec4
4-component float vector.
Definition kdatatype.h:34
kTextureType
Distinguishes 2D from cube-map textures.
Definition kdatatype.h:136
@ TEX_TYPE_2D
Standard 2-dimensional texture.
Definition kdatatype.h:137
@ TEX_TYPE_CUBE
Cube-map texture (six faces).
Definition kdatatype.h:138
glm::vec3 kVec3
3-component float vector.
Definition kdatatype.h:33
kTextureFormat
Texture upload format (internal precision / colour-space).
Definition kdatatype.h:125
@ TEX_FORMAT_SRGB
8-bit RGB, sRGB colour-space (gamma-corrected).
Definition kdatatype.h:128
@ TEX_FORMAT_SRGBA
8-bit RGBA, sRGB colour-space.
Definition kdatatype.h:129
@ TEX_FORMAT_RGB
8-bit RGB, linear colour-space.
Definition kdatatype.h:126
@ TEX_FORMAT_RGBA
8-bit RGBA, linear colour-space.
Definition kdatatype.h:127
kTransparentType
Transparency/blending mode for a material.
Definition kdatatype.h:106
@ TRANSP_TYPE_BLEND
Alpha blending (src-alpha / one-minus-src-alpha).
Definition kdatatype.h:108
@ TRANSP_TYPE_NONE
Opaque — no blending.
Definition kdatatype.h:107
glm::ivec4 kIvec4
4-component integer vector.
Definition kdatatype.h:37
glm::mat4 kMat4
4x4 float matrix.
Definition kdatatype.h:39
kAABB expanded(float amount) const
Returns a copy of the box uniformly expanded outward by the given amount on every side.
Definition kdatatype.h:618
void merge(const kAABB &other)
Grows the box so that it encloses another box.
Definition kdatatype.h:608
kVec3 min
Minimum corner; initialised to +inf so the box starts empty/invalid.
Definition kdatatype.h:573
bool overlaps(const kAABB &other) const
Tests whether this box intersects another box.
Definition kdatatype.h:638
void expandBy(const kVec3 &point)
Grows the box so that it encloses the given point.
Definition kdatatype.h:599
bool isValid() const
Returns true if min is component-wise less than or equal to max (i.e. the box is non-degenerate).
Definition kdatatype.h:593
kVec3 center() const
Returns the geometric centre of the box.
Definition kdatatype.h:587
kVec3 halfExtents() const
Returns half the size of the box along each axis.
Definition kdatatype.h:590
kVec3 max
Maximum corner; initialised to -inf so the box starts empty/invalid.
Definition kdatatype.h:574
kAABB()=default
Constructs an empty (invalid) bounding box.
bool contains(const kAABB &other) const
Tests whether this box fully contains another box.
Definition kdatatype.h:627
kAABB(kVec3 min, kVec3 max)
Constructs a bounding box from explicit corners.
Definition kdatatype.h:584
Stores the per-bone offset matrix and its index in the palette.
Definition kdatatype.h:664
int id
Index into the final bone-matrix palette.
Definition kdatatype.h:665
kMat4 offset
Transforms from model space to bone-local space.
Definition kdatatype.h:666
Glyph metrics for a single character in a bitmap font atlas.
Definition kdatatype.h:711
int w
Definition kdatatype.h:715
float ax
Horizontal advance (pen advance after drawing the glyph).
Definition kdatatype.h:712
int h
Width and height of the glyph in pixels.
Definition kdatatype.h:715
float tx
Definition kdatatype.h:714
int yoff
Pixel offset from the glyph origin.
Definition kdatatype.h:716
int xoff
Definition kdatatype.h:716
float ty
UV coordinates of the glyph within the atlas texture.
Definition kdatatype.h:714
float lsb
Left side bearing.
Definition kdatatype.h:713
A single position keyframe for skeletal animation.
Definition kdatatype.h:671
float timeStamp
Time (in ticks) at which this keyframe occurs.
Definition kdatatype.h:673
kVec3 position
World-space position at this keyframe.
Definition kdatatype.h:672
A single rotation keyframe for skeletal animation.
Definition kdatatype.h:678
kQuat orientation
Rotation quaternion at this keyframe.
Definition kdatatype.h:679
float timeStamp
Time (in ticks) at which this keyframe occurs.
Definition kdatatype.h:680
A single scale keyframe for skeletal animation.
Definition kdatatype.h:685
kVec3 scale
Non-uniform scale at this keyframe.
Definition kdatatype.h:686
float timeStamp
Time (in ticks) at which this keyframe occurs.
Definition kdatatype.h:687
Node in a skeletal-animation hierarchy (one per scene-graph joint).
Definition kdatatype.h:700
kMat4 transformation
Local-space transform for this node.
Definition kdatatype.h:701
kString name
Node name (used to look up bones by name).
Definition kdatatype.h:702
std::vector< kNodeData > children
Child nodes.
Definition kdatatype.h:704
int childrenCount
Number of child nodes.
Definition kdatatype.h:703
Wraps an SDL_Event and provides helper accessors for input polling.
Definition kdatatype.h:427
SDL_Event event
Underlying SDL event.
Definition kdatatype.h:428
bool hasEvent()
Polls one event from the SDL queue.
Definition kdatatype.h:441
bool getKeyDown(unsigned int key)
Returns true if the given key is currently held down.
Definition kdatatype.h:539
float getMouseMoveX()
Returns the absolute X position from the last motion event.
Definition kdatatype.h:518
float getMouseX()
Returns the X position from the last mouse-button event.
Definition kdatatype.h:506
float getMouseWheelY()
Returns vertical scroll delta from the last wheel event.
Definition kdatatype.h:562
float getMouseMoveY()
Returns the absolute Y position from the last motion event.
Definition kdatatype.h:524
std::vector< unsigned int > keys
Currently-held key codes.
Definition kdatatype.h:429
unsigned int getType()
Returns the event type and maintains the held-key list.
Definition kdatatype.h:454
unsigned int getMouseButton()
Returns the mouse button index from the last button event.
Definition kdatatype.h:500
float getMouseY()
Returns the Y position from the last mouse-button event.
Definition kdatatype.h:512
SDL_Event * getSdlEvent()
Returns a pointer to the internal SDL_Event.
Definition kdatatype.h:432
unsigned int getKeyButton()
Returns the key code from the last key event.
Definition kdatatype.h:530
float getMouseWheelX()
Returns horizontal scroll delta from the last wheel event.
Definition kdatatype.h:556
Full per-vertex data layout used internally by the asset manager.
Definition kdatatype.h:649
kVec3 tangent
Tangent vector (for normal mapping).
Definition kdatatype.h:653
kVec3 position
Vertex position in model space.
Definition kdatatype.h:650
kVec3 normal
Vertex normal.
Definition kdatatype.h:651
int boneIDs[MAX_BONE_INFLUENCE]
Indices of influencing bones.
Definition kdatatype.h:656
float weights[MAX_BONE_INFLUENCE]
Blend weights for each bone.
Definition kdatatype.h:657
kVec2 texCoords
UV texture coordinates.
Definition kdatatype.h:652
kVec3 bitangent
Bitangent vector (for normal mapping).
Definition kdatatype.h:654