sliver-engine 0.0.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/README.md +99 -0
  2. package/dist/Assets/Shapes/Arrow.d.ts +12 -0
  3. package/dist/Assets/Shapes/Arrow.d.ts.map +1 -0
  4. package/dist/Assets/Shapes/Arrow.js +32 -0
  5. package/dist/Assets/Shapes/Arrow.js.map +1 -0
  6. package/dist/Assets/Shapes/index.d.ts +4 -0
  7. package/dist/Assets/Shapes/index.d.ts.map +1 -0
  8. package/dist/Assets/Shapes/index.js +2 -0
  9. package/dist/Assets/Shapes/index.js.map +1 -0
  10. package/dist/CanvasController/SpriteLibrary.d.ts +27 -0
  11. package/dist/CanvasController/SpriteLibrary.d.ts.map +1 -0
  12. package/dist/CanvasController/SpriteLibrary.js +113 -0
  13. package/dist/CanvasController/SpriteLibrary.js.map +1 -0
  14. package/dist/CanvasController/Transformations.d.ts +5 -0
  15. package/dist/CanvasController/Transformations.d.ts.map +1 -0
  16. package/dist/CanvasController/Transformations.js +19 -0
  17. package/dist/CanvasController/Transformations.js.map +1 -0
  18. package/dist/CanvasController/index.d.ts +214 -0
  19. package/dist/CanvasController/index.d.ts.map +1 -0
  20. package/dist/CanvasController/index.js +347 -0
  21. package/dist/CanvasController/index.js.map +1 -0
  22. package/dist/Context/index.d.ts +53 -0
  23. package/dist/Context/index.d.ts.map +1 -0
  24. package/dist/Context/index.js +103 -0
  25. package/dist/Context/index.js.map +1 -0
  26. package/dist/Events/decorators.d.ts +61 -0
  27. package/dist/Events/decorators.d.ts.map +1 -0
  28. package/dist/Events/decorators.js +368 -0
  29. package/dist/Events/decorators.js.map +1 -0
  30. package/dist/Events/index.d.ts +50 -0
  31. package/dist/Events/index.d.ts.map +1 -0
  32. package/dist/Events/index.js +73 -0
  33. package/dist/Events/index.js.map +1 -0
  34. package/dist/Events/keyAccumulator.d.ts +9 -0
  35. package/dist/Events/keyAccumulator.d.ts.map +1 -0
  36. package/dist/Events/keyAccumulator.js +17 -0
  37. package/dist/Events/keyAccumulator.js.map +1 -0
  38. package/dist/Game/Saves/index.d.ts +39 -0
  39. package/dist/Game/Saves/index.d.ts.map +1 -0
  40. package/dist/Game/Saves/index.js +213 -0
  41. package/dist/Game/Saves/index.js.map +1 -0
  42. package/dist/Game/index.d.ts +45 -0
  43. package/dist/Game/index.d.ts.map +1 -0
  44. package/dist/Game/index.js +101 -0
  45. package/dist/Game/index.js.map +1 -0
  46. package/dist/GameObject/Decorators/index.d.ts +8 -0
  47. package/dist/GameObject/Decorators/index.d.ts.map +1 -0
  48. package/dist/GameObject/Decorators/index.js +65 -0
  49. package/dist/GameObject/Decorators/index.js.map +1 -0
  50. package/dist/GameObject/Hitboxes/ColisionHandler.d.ts +23 -0
  51. package/dist/GameObject/Hitboxes/ColisionHandler.d.ts.map +1 -0
  52. package/dist/GameObject/Hitboxes/ColisionHandler.js +458 -0
  53. package/dist/GameObject/Hitboxes/ColisionHandler.js.map +1 -0
  54. package/dist/GameObject/Hitboxes/index.d.ts +50 -0
  55. package/dist/GameObject/Hitboxes/index.d.ts.map +1 -0
  56. package/dist/GameObject/Hitboxes/index.js +306 -0
  57. package/dist/GameObject/Hitboxes/index.js.map +1 -0
  58. package/dist/GameObject/Library/Button.d.ts +15 -0
  59. package/dist/GameObject/Library/Button.d.ts.map +1 -0
  60. package/dist/GameObject/Library/Button.js +45 -0
  61. package/dist/GameObject/Library/Button.js.map +1 -0
  62. package/dist/GameObject/Library/Clickableshape.d.ts +14 -0
  63. package/dist/GameObject/Library/Clickableshape.d.ts.map +1 -0
  64. package/dist/GameObject/Library/Clickableshape.js +36 -0
  65. package/dist/GameObject/Library/Clickableshape.js.map +1 -0
  66. package/dist/GameObject/Library/FloatingView.d.ts +20 -0
  67. package/dist/GameObject/Library/FloatingView.d.ts.map +1 -0
  68. package/dist/GameObject/Library/FloatingView.js +39 -0
  69. package/dist/GameObject/Library/FloatingView.js.map +1 -0
  70. package/dist/GameObject/Library/Group.d.ts +8 -0
  71. package/dist/GameObject/Library/Group.d.ts.map +1 -0
  72. package/dist/GameObject/Library/Group.js +26 -0
  73. package/dist/GameObject/Library/Group.js.map +1 -0
  74. package/dist/GameObject/Library/HoverableShape.d.ts +15 -0
  75. package/dist/GameObject/Library/HoverableShape.d.ts.map +1 -0
  76. package/dist/GameObject/Library/HoverableShape.js +41 -0
  77. package/dist/GameObject/Library/HoverableShape.js.map +1 -0
  78. package/dist/GameObject/Library/SceneTranslator.d.ts +14 -0
  79. package/dist/GameObject/Library/SceneTranslator.d.ts.map +1 -0
  80. package/dist/GameObject/Library/SceneTranslator.js +104 -0
  81. package/dist/GameObject/Library/SceneTranslator.js.map +1 -0
  82. package/dist/GameObject/Library/ScrollView.d.ts +41 -0
  83. package/dist/GameObject/Library/ScrollView.d.ts.map +1 -0
  84. package/dist/GameObject/Library/ScrollView.js +112 -0
  85. package/dist/GameObject/Library/ScrollView.js.map +1 -0
  86. package/dist/GameObject/Library/ShowOnHover.d.ts +13 -0
  87. package/dist/GameObject/Library/ShowOnHover.d.ts.map +1 -0
  88. package/dist/GameObject/Library/ShowOnHover.js +33 -0
  89. package/dist/GameObject/Library/ShowOnHover.js.map +1 -0
  90. package/dist/GameObject/Library/Text.d.ts +25 -0
  91. package/dist/GameObject/Library/Text.d.ts.map +1 -0
  92. package/dist/GameObject/Library/Text.js +35 -0
  93. package/dist/GameObject/Library/Text.js.map +1 -0
  94. package/dist/GameObject/Library/TextBox.d.ts +86 -0
  95. package/dist/GameObject/Library/TextBox.d.ts.map +1 -0
  96. package/dist/GameObject/Library/TextBox.js +344 -0
  97. package/dist/GameObject/Library/TextBox.js.map +1 -0
  98. package/dist/GameObject/Library/index.d.ts +11 -0
  99. package/dist/GameObject/Library/index.d.ts.map +1 -0
  100. package/dist/GameObject/Library/index.js +11 -0
  101. package/dist/GameObject/Library/index.js.map +1 -0
  102. package/dist/GameObject/Walker.d.ts +66 -0
  103. package/dist/GameObject/Walker.d.ts.map +1 -0
  104. package/dist/GameObject/Walker.js +461 -0
  105. package/dist/GameObject/Walker.js.map +1 -0
  106. package/dist/GameObject/index.d.ts +97 -0
  107. package/dist/GameObject/index.d.ts.map +1 -0
  108. package/dist/GameObject/index.js +368 -0
  109. package/dist/GameObject/index.js.map +1 -0
  110. package/dist/Lib/Math.d.ts +2 -0
  111. package/dist/Lib/Math.d.ts.map +1 -0
  112. package/dist/Lib/Math.js +4 -0
  113. package/dist/Lib/Math.js.map +1 -0
  114. package/dist/Lib/MinHeap/index.d.ts +12 -0
  115. package/dist/Lib/MinHeap/index.d.ts.map +1 -0
  116. package/dist/Lib/MinHeap/index.js +64 -0
  117. package/dist/Lib/MinHeap/index.js.map +1 -0
  118. package/dist/Lib/PathfindingProxy/index.d.ts +16 -0
  119. package/dist/Lib/PathfindingProxy/index.d.ts.map +1 -0
  120. package/dist/Lib/PathfindingProxy/index.js +48 -0
  121. package/dist/Lib/PathfindingProxy/index.js.map +1 -0
  122. package/dist/Lib/Vector/index.d.ts +24 -0
  123. package/dist/Lib/Vector/index.d.ts.map +1 -0
  124. package/dist/Lib/Vector/index.js +94 -0
  125. package/dist/Lib/Vector/index.js.map +1 -0
  126. package/dist/Lib/index.d.ts +5 -0
  127. package/dist/Lib/index.d.ts.map +1 -0
  128. package/dist/Lib/index.js +5 -0
  129. package/dist/Lib/index.js.map +1 -0
  130. package/dist/Scenes/SceneManager/Transitions.d.ts +37 -0
  131. package/dist/Scenes/SceneManager/Transitions.d.ts.map +1 -0
  132. package/dist/Scenes/SceneManager/Transitions.js +165 -0
  133. package/dist/Scenes/SceneManager/Transitions.js.map +1 -0
  134. package/dist/Scenes/SceneManager/index.d.ts +24 -0
  135. package/dist/Scenes/SceneManager/index.d.ts.map +1 -0
  136. package/dist/Scenes/SceneManager/index.js +136 -0
  137. package/dist/Scenes/SceneManager/index.js.map +1 -0
  138. package/dist/Scenes/index.d.ts +36 -0
  139. package/dist/Scenes/index.d.ts.map +1 -0
  140. package/dist/Scenes/index.js +196 -0
  141. package/dist/Scenes/index.js.map +1 -0
  142. package/dist/ScriptedEvents/Combinators.d.ts +17 -0
  143. package/dist/ScriptedEvents/Combinators.d.ts.map +1 -0
  144. package/dist/ScriptedEvents/Combinators.js +127 -0
  145. package/dist/ScriptedEvents/Combinators.js.map +1 -0
  146. package/dist/ScriptedEvents/Library/TextBoxSequence.d.ts +13 -0
  147. package/dist/ScriptedEvents/Library/TextBoxSequence.d.ts.map +1 -0
  148. package/dist/ScriptedEvents/Library/TextBoxSequence.js +41 -0
  149. package/dist/ScriptedEvents/Library/TextBoxSequence.js.map +1 -0
  150. package/dist/ScriptedEvents/Library/WalkCharacter.d.ts +4 -0
  151. package/dist/ScriptedEvents/Library/WalkCharacter.d.ts.map +1 -0
  152. package/dist/ScriptedEvents/Library/WalkCharacter.js +14 -0
  153. package/dist/ScriptedEvents/Library/WalkCharacter.js.map +1 -0
  154. package/dist/ScriptedEvents/index.d.ts +38 -0
  155. package/dist/ScriptedEvents/index.d.ts.map +1 -0
  156. package/dist/ScriptedEvents/index.js +58 -0
  157. package/dist/ScriptedEvents/index.js.map +1 -0
  158. package/dist/SoundManager/index.d.ts +69 -0
  159. package/dist/SoundManager/index.d.ts.map +1 -0
  160. package/dist/SoundManager/index.js +208 -0
  161. package/dist/SoundManager/index.js.map +1 -0
  162. package/dist/index.d.ts +19 -0
  163. package/dist/index.d.ts.map +1 -0
  164. package/dist/index.js +19 -0
  165. package/dist/index.js.map +1 -0
  166. package/package.json +32 -0
@@ -0,0 +1,213 @@
1
+ const getLocalStorage = () => {
2
+ if (typeof window === "undefined") {
3
+ return null;
4
+ }
5
+ try {
6
+ return window.localStorage ?? null;
7
+ }
8
+ catch {
9
+ return null;
10
+ }
11
+ };
12
+ const encodeUtf8ToBase64 = (value) => {
13
+ // Prefer Node/Bun (tests, tooling) if available.
14
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
+ const maybeBuffer = globalThis.Buffer;
16
+ if (maybeBuffer) {
17
+ return maybeBuffer.from(value, "utf-8").toString("base64");
18
+ }
19
+ if (typeof TextEncoder !== "undefined" && typeof btoa !== "undefined") {
20
+ const bytes = new TextEncoder().encode(value);
21
+ let binary = "";
22
+ const chunkSize = 0x8000;
23
+ for (let i = 0; i < bytes.length; i += chunkSize) {
24
+ const chunk = bytes.subarray(i, i + chunkSize);
25
+ binary += String.fromCharCode(...chunk);
26
+ }
27
+ return btoa(binary);
28
+ }
29
+ if (typeof btoa !== "undefined") {
30
+ return btoa(unescape(encodeURIComponent(value)));
31
+ }
32
+ throw new Error("Base64 encoding is not available in this environment.");
33
+ };
34
+ const decodeBase64ToUtf8 = (base64) => {
35
+ // Prefer Node/Bun (tests, tooling) if available.
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ const maybeBuffer = globalThis.Buffer;
38
+ if (maybeBuffer) {
39
+ return maybeBuffer.from(base64, "base64").toString("utf-8");
40
+ }
41
+ if (typeof atob !== "undefined") {
42
+ const binary = atob(base64);
43
+ if (typeof TextDecoder !== "undefined") {
44
+ const bytes = new Uint8Array(binary.length);
45
+ for (let i = 0; i < binary.length; i++) {
46
+ bytes[i] = binary.charCodeAt(i);
47
+ }
48
+ return new TextDecoder().decode(bytes);
49
+ }
50
+ return decodeURIComponent(escape(binary));
51
+ }
52
+ throw new Error("Base64 decoding is not available in this environment.");
53
+ };
54
+ const encodeJsonToBase64 = (data) => {
55
+ return encodeUtf8ToBase64(JSON.stringify(data));
56
+ };
57
+ const decodeBase64ToJson = (base64) => {
58
+ return JSON.parse(decodeBase64ToUtf8(base64));
59
+ };
60
+ const generateSaveId = () => {
61
+ if (typeof crypto !== "undefined" && "randomUUID" in crypto) {
62
+ return crypto.randomUUID();
63
+ }
64
+ return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
65
+ };
66
+ class GameSaves {
67
+ namespace;
68
+ onLoadSaveFileCallback = null;
69
+ constructor(options) {
70
+ this.namespace = options?.namespace ?? "sliver-engine";
71
+ }
72
+ onLoadSaveFile(callback) {
73
+ this.onLoadSaveFileCallback = callback;
74
+ return this;
75
+ }
76
+ create(data, options) {
77
+ const id = options?.id ?? generateSaveId();
78
+ this.write(id, data, { label: options?.label, createIfMissing: true });
79
+ return id;
80
+ }
81
+ write(id, data, options) {
82
+ const storage = getLocalStorage();
83
+ if (!storage) {
84
+ return;
85
+ }
86
+ const now = Date.now();
87
+ const index = this.readIndex(storage);
88
+ const existing = index.find((s) => s.id === id);
89
+ if (!existing && options?.createIfMissing === false) {
90
+ return;
91
+ }
92
+ const createdAt = existing?.createdAt ?? now;
93
+ const entry = {
94
+ id,
95
+ createdAt,
96
+ updatedAt: now,
97
+ label: options?.label ?? existing?.label,
98
+ };
99
+ const payload = encodeJsonToBase64(data);
100
+ storage.setItem(this.saveKey(id), payload);
101
+ const nextIndex = [
102
+ ...index.filter((s) => s.id !== id),
103
+ entry,
104
+ ].sort((a, b) => b.updatedAt - a.updatedAt);
105
+ this.writeIndex(storage, nextIndex);
106
+ }
107
+ read(id) {
108
+ const storage = getLocalStorage();
109
+ if (!storage) {
110
+ return null;
111
+ }
112
+ const index = this.readIndex(storage);
113
+ const entry = index.find((s) => s.id === id);
114
+ if (!entry) {
115
+ return null;
116
+ }
117
+ const encoded = storage.getItem(this.saveKey(id));
118
+ if (!encoded) {
119
+ return null;
120
+ }
121
+ try {
122
+ const data = decodeBase64ToJson(encoded);
123
+ return { ...entry, data };
124
+ }
125
+ catch {
126
+ return null;
127
+ }
128
+ }
129
+ list() {
130
+ const storage = getLocalStorage();
131
+ if (!storage) {
132
+ return [];
133
+ }
134
+ return this.readIndex(storage);
135
+ }
136
+ loadAll() {
137
+ const storage = getLocalStorage();
138
+ if (!storage) {
139
+ return [];
140
+ }
141
+ const index = this.readIndex(storage);
142
+ const loaded = [];
143
+ for (const entry of index) {
144
+ const encoded = storage.getItem(this.saveKey(entry.id));
145
+ if (!encoded)
146
+ continue;
147
+ try {
148
+ const data = decodeBase64ToJson(encoded);
149
+ const save = { ...entry, data };
150
+ loaded.push(save);
151
+ this.onLoadSaveFileCallback?.(save);
152
+ }
153
+ catch {
154
+ continue;
155
+ }
156
+ }
157
+ return loaded;
158
+ }
159
+ delete(id) {
160
+ const storage = getLocalStorage();
161
+ if (!storage) {
162
+ return;
163
+ }
164
+ storage.removeItem(this.saveKey(id));
165
+ const index = this.readIndex(storage).filter((s) => s.id !== id);
166
+ this.writeIndex(storage, index);
167
+ }
168
+ clear() {
169
+ const storage = getLocalStorage();
170
+ if (!storage) {
171
+ return;
172
+ }
173
+ const index = this.readIndex(storage);
174
+ for (const entry of index) {
175
+ storage.removeItem(this.saveKey(entry.id));
176
+ }
177
+ storage.removeItem(this.indexKey());
178
+ }
179
+ indexKey() {
180
+ return `${this.namespace}:saves:index`;
181
+ }
182
+ saveKey(id) {
183
+ return `${this.namespace}:saves:${id}`;
184
+ }
185
+ readIndex(storage) {
186
+ const raw = storage.getItem(this.indexKey());
187
+ if (!raw) {
188
+ return [];
189
+ }
190
+ try {
191
+ const parsed = JSON.parse(raw);
192
+ if (!Array.isArray(parsed)) {
193
+ return [];
194
+ }
195
+ return parsed
196
+ .filter((s) => {
197
+ return (!!s &&
198
+ typeof s.id === "string" &&
199
+ typeof s.createdAt === "number" &&
200
+ typeof s.updatedAt === "number");
201
+ })
202
+ .sort((a, b) => b.updatedAt - a.updatedAt);
203
+ }
204
+ catch {
205
+ return [];
206
+ }
207
+ }
208
+ writeIndex(storage, index) {
209
+ storage.setItem(this.indexKey(), JSON.stringify(index));
210
+ }
211
+ }
212
+ export { GameSaves };
213
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Game/Saves/index.ts"],"names":[],"mappings":"AAiBA,MAAM,eAAe,GAAG,GAAmB,EAAE;IAC3C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAU,EAAE;IACnD,iDAAiD;IACjD,8DAA8D;IAC9D,MAAM,WAAW,GAAI,UAAkB,CAAC,MAE3B,CAAC;IACd,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,OAAO,WAAW,KAAK,WAAW,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE,CAAC;QACtE,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE9C,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,MAAM,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YACjD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;YAC/C,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAU,EAAE;IACpD,iDAAiD;IACjD,8DAA8D;IAC9D,MAAM,WAAW,GAAI,UAAkB,CAAC,MAE3B,CAAC;IACd,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAE5B,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,IAAa,EAAU,EAAE;IACnD,OAAO,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAW,EAAE;IACrD,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,GAAW,EAAE;IAClC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,YAAY,IAAI,MAAM,EAAE,CAAC;QAC5D,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACjF,CAAC,CAAC;AAEF,MAAM,SAAS;IACL,SAAS,CAAS;IAClB,sBAAsB,GAAsC,IAAI,CAAC;IAEzE,YAAY,OAA0B;QACpC,IAAI,CAAC,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,eAAe,CAAC;IACzD,CAAC;IAED,cAAc,CAAC,QAA2C;QACxD,IAAI,CAAC,sBAAsB,GAAG,QAAQ,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAc,IAAO,EAAE,OAAyC;QACpE,MAAM,EAAE,GAAG,OAAO,EAAE,EAAE,IAAI,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CACH,EAAU,EACV,IAAO,EACP,OAAuD;QAEvD,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAEhD,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE,eAAe,KAAK,KAAK,EAAE,CAAC;YACpD,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,QAAQ,EAAE,SAAS,IAAI,GAAG,CAAC;QAC7C,MAAM,KAAK,GAAmB;YAC5B,EAAE;YACF,SAAS;YACT,SAAS,EAAE,GAAG;YACd,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,KAAK;SACzC,CAAC;QAEF,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAE3C,MAAM,SAAS,GAAG;YAChB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;YACnC,KAAK;SACN,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,CAAc,EAAU;QAC1B,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAM,CAAC;YAC9C,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAI;QACF,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,OAAO;QACL,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,MAAM,GAAe,EAAE,CAAC;QAE9B,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAa,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;gBAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClB,IAAI,CAAC,sBAAsB,EAAE,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,EAAU;QACf,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,KAAK;QACH,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACtC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;YAC1B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtC,CAAC;IAEO,QAAQ;QACd,OAAO,GAAG,IAAI,CAAC,SAAS,cAAc,CAAC;IACzC,CAAC;IAEO,OAAO,CAAC,EAAU;QACxB,OAAO,GAAG,IAAI,CAAC,SAAS,UAAU,EAAE,EAAE,CAAC;IACzC,CAAC;IAEO,SAAS,CAAC,OAAgB;QAChC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,OAAO,MAAM;iBACV,MAAM,CAAC,CAAC,CAAC,EAAuB,EAAE;gBACjC,OAAO,CACL,CAAC,CAAC,CAAC;oBACH,OAAQ,CAAoB,CAAC,EAAE,KAAK,QAAQ;oBAC5C,OAAQ,CAAoB,CAAC,SAAS,KAAK,QAAQ;oBACnD,OAAQ,CAAoB,CAAC,SAAS,KAAK,QAAQ,CACpD,CAAC;YACJ,CAAC,CAAC;iBACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,OAAgB,EAAE,KAAuB;QAC1D,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC;CACF;AAED,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { CanvasController } from "../CanvasController";
2
+ import type { GameEvent } from "../Events";
3
+ import type { SceneManager } from "../Scenes/SceneManager";
4
+ import { GameContext } from "../Context";
5
+ import { KeyAccumulator } from "../Events";
6
+ import { SoundManager } from "../SoundManager";
7
+ import { GameSaves, type SaveFile } from "./Saves";
8
+ type GameOptions = {
9
+ canvas: CanvasController;
10
+ scenes: SceneManager;
11
+ soundManager: SoundManager;
12
+ ticksPerSecond?: number;
13
+ saveNamespace?: string;
14
+ };
15
+ declare class Game {
16
+ canvas: CanvasController;
17
+ private scenes;
18
+ private ticksPerSecond;
19
+ private lastTickTime;
20
+ private didSetup;
21
+ context: GameContext;
22
+ private keyAccumulator;
23
+ private eventsDispatcher;
24
+ saves: GameSaves;
25
+ constructor({ canvas, scenes, ticksPerSecond, soundManager, saveNamespace, }: GameOptions);
26
+ setup(): void;
27
+ onLoadSaveFile(callback: ((save: SaveFile) => void) | null): this;
28
+ saveGame<T = unknown>(data: T, options?: {
29
+ label?: string;
30
+ id?: string;
31
+ }): string;
32
+ protected onSetup(): void;
33
+ start(): void;
34
+ render(): void;
35
+ protected onTick(): void;
36
+ handleEvent(event: GameEvent): void;
37
+ getContext(): GameContext;
38
+ getTickRate(): number;
39
+ getKeyAccumulator(): KeyAccumulator;
40
+ }
41
+ export { Game };
42
+ export type { GameOptions };
43
+ export { GameSaves };
44
+ export type { SaveFile };
45
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Game/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAwB,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnD,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,cAAM,IAAI;IACD,MAAM,EAAE,gBAAgB,CAAC;IAChC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAkB;IAC3B,OAAO,EAAE,WAAW,CAAC;IAC5B,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,gBAAgB,CAAuB;IACxC,KAAK,EAAE,SAAS,CAAC;gBAEZ,EACV,MAAM,EACN,MAAM,EACN,cAAc,EACd,YAAY,EACZ,aAAa,GACd,EAAE,WAAW;IAgBd,KAAK;IAWL,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;IAKjE,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAOjF,SAAS,CAAC,OAAO,IAAI,IAAI;IAEzB,KAAK;IAyBL,MAAM;IASN,SAAS,CAAC,MAAM,IAAI,IAAI;IAExB,WAAW,CAAC,KAAK,EAAE,SAAS;IAS5B,UAAU,IAAI,WAAW;IAIzB,WAAW,IAAI,MAAM;IAIrB,iBAAiB,IAAI,cAAc;CAGpC;AAED,OAAO,EAAE,IAAI,EAAE,CAAC;AAChB,YAAY,EAAE,WAAW,EAAE,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,YAAY,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,101 @@
1
+ import { GameContext } from "../Context";
2
+ import { GameEventsdispatcher, KeyAccumulator } from "../Events";
3
+ import { SoundManager } from "../SoundManager";
4
+ import { GameSaves } from "./Saves";
5
+ class Game {
6
+ canvas;
7
+ scenes;
8
+ ticksPerSecond = 60;
9
+ lastTickTime = 0;
10
+ didSetup = false;
11
+ context;
12
+ keyAccumulator = new KeyAccumulator();
13
+ eventsDispatcher;
14
+ saves;
15
+ constructor({ canvas, scenes, ticksPerSecond, soundManager, saveNamespace, }) {
16
+ this.canvas = canvas;
17
+ this.scenes = scenes;
18
+ this.ticksPerSecond = ticksPerSecond || this.ticksPerSecond;
19
+ this.context = new GameContext({
20
+ game: this,
21
+ canvas,
22
+ sceneManager: scenes,
23
+ keyAccumulator: this.keyAccumulator,
24
+ soundManager: soundManager,
25
+ });
26
+ this.scenes.bindContext(this.context);
27
+ this.eventsDispatcher = new GameEventsdispatcher(this, this.keyAccumulator);
28
+ this.saves = new GameSaves({ namespace: saveNamespace });
29
+ }
30
+ setup() {
31
+ if (this.didSetup) {
32
+ return;
33
+ }
34
+ this.didSetup = true;
35
+ this.saves.loadAll();
36
+ this.onSetup();
37
+ console.log("Game setup complete.");
38
+ }
39
+ onLoadSaveFile(callback) {
40
+ this.saves.onLoadSaveFile(callback);
41
+ return this;
42
+ }
43
+ saveGame(data, options) {
44
+ return this.saves.create(data, options);
45
+ }
46
+ // Meant to be overridden by game-specific implementations to inject logic
47
+ // that should run once during game setup (after save files are loaded).
48
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
49
+ onSetup() { }
50
+ start() {
51
+ this.setup();
52
+ console.log("Game started.");
53
+ // Tick interval
54
+ setInterval(() => {
55
+ const now = performance.now();
56
+ const tickInterval = 1000 / this.ticksPerSecond;
57
+ const lastTickTime = this.lastTickTime || 0;
58
+ if (now - lastTickTime >= tickInterval) {
59
+ this.onTick();
60
+ this.scenes.tick();
61
+ this.lastTickTime = now;
62
+ }
63
+ });
64
+ // Render loop
65
+ const renderLoop = () => {
66
+ this.canvas.clearCanvas();
67
+ this.render();
68
+ requestAnimationFrame(renderLoop);
69
+ };
70
+ requestAnimationFrame(renderLoop);
71
+ }
72
+ render() {
73
+ this.scenes.getActiveScenes().forEach((scene) => {
74
+ scene.render(this.canvas);
75
+ });
76
+ }
77
+ // Meant to be overridden by game-specific implementations to inject logic
78
+ // that should run once per tick, before the scenes tick.
79
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
80
+ onTick() { }
81
+ handleEvent(event) {
82
+ this.scenes
83
+ .getActiveScenes()
84
+ .toReversed()
85
+ .forEach((scene) => {
86
+ scene.handleEvent(event);
87
+ });
88
+ }
89
+ getContext() {
90
+ return this.context;
91
+ }
92
+ getTickRate() {
93
+ return this.ticksPerSecond;
94
+ }
95
+ getKeyAccumulator() {
96
+ return this.keyAccumulator;
97
+ }
98
+ }
99
+ export { Game };
100
+ export { GameSaves };
101
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Game/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { GameObject } from "..";
2
+ import type { Vector } from "../../Lib/Vector";
3
+ type MirroringMode = "horizontal" | "vertical" | "both" | null;
4
+ export declare const onColision: <TObj extends GameObject = GameObject>(predicate: (self: TObj, other: GameObject) => boolean, handler: (self: TObj, other: GameObject) => void) => (_target: Object, _propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<(this: TObj, other: GameObject, penetration: Vector) => unknown>) => TypedPropertyDescriptor<(this: TObj, other: GameObject, penetration: Vector) => unknown>;
5
+ export declare const renderSprite: <TObj extends GameObject = GameObject>(when: (obj: TObj) => boolean, spriteSheetName: string, index: number | ((obj: TObj) => number), scale?: number | ((obj: TObj) => number), _mirroring?: MirroringMode | ((obj: TObj) => MirroringMode), overridePosition?: (obj: TObj) => Vector) => (_target: Object, _propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<any>) => TypedPropertyDescriptor<any>;
6
+ export declare const renderSpriteAnimation: <TObj extends GameObject = GameObject>(when: (obj: TObj) => boolean, spriteSheetName: string, indexes: number[] | ((obj: TObj) => number[]), _ticksPerFrame: number | ((obj: TObj) => number), scale?: number | ((obj: TObj) => number), _mirroring?: MirroringMode | ((obj: TObj) => MirroringMode), overridePosition?: (obj: TObj) => Vector) => (_target: Object, _propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<any>) => TypedPropertyDescriptor<any>;
7
+ export {};
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/GameObject/Decorators/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAGrC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,KAAK,aAAa,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;AAE/D,eAAO,MAAM,UAAU,GAAI,IAAI,SAAS,UAAU,GAAG,UAAU,EAC7D,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,KAAK,OAAO,EACrD,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,KAAK,IAAI,MAG9C,SAAS,MAAM,EACf,cAAc,MAAM,GAAG,MAAM,EAC7B,YAAY,uBAAuB,CACjC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAChE,oCADQ,IAAI,SAAS,UAAU,eAAe,MAAM,KAAK,OAAO,CAoBpE,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,IAAI,SAAS,UAAU,GAAG,UAAU,EAC/D,MAAM,CAAC,GAAG,EAAE,IAAI,KAAK,OAAO,EAC5B,iBAAiB,MAAM,EACvB,OAAO,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,CAAC,EACvC,QAAO,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,CAAK,EAC3C,aAAY,aAAa,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,aAAa,CAAQ,EACjE,mBAAmB,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,MAGtC,SAAS,MAAM,EACf,cAAc,MAAM,GAAG,MAAM,EAC7B,YAAY,uBAAuB,CAAC,GAAG,CAAC,iCAoC3C,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,IAAI,SAAS,UAAU,GAAG,UAAU,EACxE,MAAM,CAAC,GAAG,EAAE,IAAI,KAAK,OAAO,EAC5B,iBAAiB,MAAM,EACvB,SAAS,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC,EAC7C,gBAAgB,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,CAAC,EAChD,QAAO,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,CAAK,EAC3C,aAAY,aAAa,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,aAAa,CAAQ,EACjE,mBAAmB,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,MAGtC,SAAS,MAAM,EACf,cAAc,MAAM,GAAG,MAAM,EAC7B,YAAY,uBAAuB,CAAC,GAAG,CAAC,iCA+C3C,CAAC"}
@@ -0,0 +1,65 @@
1
+ export const onColision = (predicate, handler) => {
2
+ return function (_target, _propertyKey, descriptor) {
3
+ const original = descriptor.value;
4
+ if (!original)
5
+ return descriptor;
6
+ descriptor.value = function (other, penetration) {
7
+ if (predicate(this, other)) {
8
+ handler(this, other);
9
+ }
10
+ return original.call(this, other, penetration);
11
+ };
12
+ return descriptor;
13
+ };
14
+ };
15
+ export const renderSprite = (when, spriteSheetName, index, scale = 1, _mirroring = null, overridePosition) => {
16
+ return function (_target, _propertyKey, descriptor) {
17
+ const original = descriptor.value;
18
+ if (!original)
19
+ return descriptor;
20
+ descriptor.value = function (canvas, scene) {
21
+ if (!when(this)) {
22
+ return original.call(this, canvas, scene);
23
+ }
24
+ const spriteLib = canvas.getSpriteLibrary();
25
+ const context = canvas.getContext();
26
+ const mirroring = typeof _mirroring === "function" ? _mirroring(this) : _mirroring;
27
+ const position = overridePosition
28
+ ? overridePosition(this)
29
+ : this.getPosition();
30
+ spriteLib.drawSpriteFrame(context, spriteSheetName, typeof index === "function" ? index(this) : index, position, typeof scale === "function" ? scale(this) : scale, mirroring === "horizontal" || mirroring === "both", mirroring === "vertical" || mirroring === "both");
31
+ return original.call(this, canvas, scene);
32
+ };
33
+ return descriptor;
34
+ };
35
+ };
36
+ export const renderSpriteAnimation = (when, spriteSheetName, indexes, _ticksPerFrame, scale = 1, _mirroring = null, overridePosition) => {
37
+ return function (_target, _propertyKey, descriptor) {
38
+ const original = descriptor.value;
39
+ if (!original)
40
+ return descriptor;
41
+ descriptor.value = function (canvas, scene) {
42
+ if (!when(this)) {
43
+ return original.call(this, canvas, scene);
44
+ }
45
+ const spriteLib = canvas.getSpriteLibrary();
46
+ const context = canvas.getContext();
47
+ const gameContext = this.getContext();
48
+ const mirroring = typeof _mirroring === "function" ? _mirroring(this) : _mirroring;
49
+ const ticksPerFrame = typeof _ticksPerFrame === "number"
50
+ ? _ticksPerFrame
51
+ : _ticksPerFrame(this);
52
+ const position = overridePosition
53
+ ? overridePosition(this)
54
+ : this.getPosition();
55
+ const frameIndex = Math.floor(gameContext.getTickCount() / ticksPerFrame) % indexes.length;
56
+ const spriteIndex = typeof indexes === "function"
57
+ ? indexes(this)[frameIndex]
58
+ : indexes[frameIndex];
59
+ spriteLib.drawSpriteFrame(context, spriteSheetName, spriteIndex, position, typeof scale === "function" ? scale(this) : scale, mirroring === "horizontal" || mirroring === "both", mirroring === "vertical" || mirroring === "both");
60
+ return original.call(this, canvas, scene);
61
+ };
62
+ return descriptor;
63
+ };
64
+ };
65
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/GameObject/Decorators/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { type Hitbox } from ".";
2
+ import { Vector } from "../../Lib/Vector";
3
+ type CollisionResolution = {
4
+ penetration: Vector;
5
+ normal: Vector;
6
+ deltaA: Vector;
7
+ deltaB: Vector;
8
+ velocityA: Vector;
9
+ velocityB: Vector;
10
+ angularVelocityA: number;
11
+ angularVelocityB: number;
12
+ appliedImpulse: boolean;
13
+ };
14
+ declare class ColisionHandler {
15
+ static resolveCollision(hitboxA: Hitbox, hitboxB: Hitbox): CollisionResolution | null;
16
+ static getPenetrationVector(hitboxA: Hitbox, hitboxB: Hitbox): Vector;
17
+ private static mtvRectRect;
18
+ private static mtvCircleCircle;
19
+ private static mtvSquareCircle;
20
+ private static mtvCircleSquare;
21
+ }
22
+ export { ColisionHandler };
23
+ //# sourceMappingURL=ColisionHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColisionHandler.d.ts","sourceRoot":"","sources":["../../../src/GameObject/Hitboxes/ColisionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,MAAM,EAAE,MAAM,GAAG,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,KAAK,mBAAmB,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAyUF,cAAM,eAAe;IACnB,MAAM,CAAC,gBAAgB,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,mBAAmB,GAAG,IAAI;IAoM7B,MAAM,CAAC,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAgBrE,OAAO,CAAC,MAAM,CAAC,WAAW;IA2D1B,OAAO,CAAC,MAAM,CAAC,eAAe;IAkB9B,OAAO,CAAC,MAAM,CAAC,eAAe;IA0C9B,OAAO,CAAC,MAAM,CAAC,eAAe;CAM/B;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}