dacha 0.15.2 → 0.16.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 (169) hide show
  1. package/build/contrib/components/animatable/comparator-condition-component-value.d.ts +1 -1
  2. package/build/contrib/components/animatable/group-state.d.ts +1 -1
  3. package/build/contrib/components/animatable/index.d.ts +1 -1
  4. package/build/contrib/components/animatable/one-dimensional-props.d.ts +1 -1
  5. package/build/contrib/components/animatable/one-dimensional-props.js +1 -3
  6. package/build/contrib/components/animatable/state.d.ts +1 -1
  7. package/build/contrib/components/animatable/timeline.d.ts +2 -2
  8. package/build/contrib/components/animatable/transition.d.ts +1 -1
  9. package/build/contrib/components/animatable/two-dimensional-props.d.ts +1 -1
  10. package/build/contrib/components/animatable/two-dimensional-props.js +1 -3
  11. package/build/contrib/components/animatable/types.d.ts +9 -9
  12. package/build/contrib/components/bitmap-text/index.d.ts +36 -0
  13. package/build/contrib/components/bitmap-text/index.js +42 -0
  14. package/build/contrib/components/index.d.ts +3 -2
  15. package/build/contrib/components/index.js +3 -1
  16. package/build/contrib/components/keyboard-control/index.d.ts +6 -8
  17. package/build/contrib/components/keyboard-control/index.js +8 -2
  18. package/build/contrib/components/mouse-control/index.d.ts +3 -7
  19. package/build/contrib/components/mouse-control/index.js +4 -1
  20. package/build/contrib/components/pixi-view/index.d.ts +20 -0
  21. package/build/contrib/components/pixi-view/index.js +24 -0
  22. package/build/contrib/components/shape/index.d.ts +64 -0
  23. package/build/contrib/components/shape/index.js +60 -0
  24. package/build/contrib/components/sprite/index.d.ts +17 -6
  25. package/build/contrib/components/sprite/index.js +10 -4
  26. package/build/contrib/systems/animator/index.d.ts +1 -1
  27. package/build/contrib/systems/animator/index.js +9 -9
  28. package/build/contrib/systems/animator/substate-pickers/index.d.ts +2 -3
  29. package/build/contrib/systems/animator/substate-pickers/one-dimensional-picker.d.ts +1 -1
  30. package/build/contrib/systems/animator/substate-pickers/picker.d.ts +1 -1
  31. package/build/contrib/systems/animator/substate-pickers/two-dimensional-picker.d.ts +1 -1
  32. package/build/contrib/systems/animator/utils.d.ts +2 -2
  33. package/build/contrib/systems/animator/utils.js +0 -1
  34. package/build/contrib/systems/audio-system/index.d.ts +1 -1
  35. package/build/contrib/systems/audio-system/index.js +20 -18
  36. package/build/contrib/systems/audio-system/types.d.ts +6 -6
  37. package/build/contrib/systems/behavior-system/system.d.ts +2 -0
  38. package/build/contrib/systems/behavior-system/system.js +18 -5
  39. package/build/contrib/systems/camera-system/system.d.ts +1 -1
  40. package/build/contrib/systems/camera-system/system.js +16 -10
  41. package/build/contrib/systems/game-stats-meter/index.d.ts +1 -1
  42. package/build/contrib/systems/game-stats-meter/index.js +6 -6
  43. package/build/contrib/systems/index.d.ts +2 -2
  44. package/build/contrib/systems/index.js +1 -1
  45. package/build/contrib/systems/keyboard-control-system/index.d.ts +1 -1
  46. package/build/contrib/systems/keyboard-control-system/index.js +5 -7
  47. package/build/contrib/systems/keyboard-input-system/input-listener.d.ts +1 -1
  48. package/build/contrib/systems/mouse-control-system/index.d.ts +1 -1
  49. package/build/contrib/systems/mouse-control-system/index.js +5 -7
  50. package/build/contrib/systems/mouse-input-system/subsystems/input-subsystem/mouse-input-listener.d.ts +1 -1
  51. package/build/contrib/systems/physics-system/subsystems/collision-detection/index.d.ts +1 -1
  52. package/build/contrib/systems/physics-system/subsystems/collision-detection/index.js +17 -16
  53. package/build/contrib/systems/physics-system/subsystems/collision-detection/types.d.ts +9 -9
  54. package/build/contrib/systems/physics-system/subsystems/collision-detection/types.js +3 -0
  55. package/build/contrib/systems/physics-system/subsystems/constraint-solver/index.d.ts +0 -1
  56. package/build/contrib/systems/physics-system/subsystems/constraint-solver/index.js +46 -59
  57. package/build/contrib/systems/physics-system/subsystems/physics/index.d.ts +1 -1
  58. package/build/contrib/systems/physics-system/subsystems/physics/index.js +10 -14
  59. package/build/contrib/systems/renderer/builders/bitmap-text-builder/index.d.ts +8 -0
  60. package/build/contrib/systems/renderer/builders/bitmap-text-builder/index.js +115 -0
  61. package/build/contrib/systems/renderer/builders/bitmap-text-builder/utils.d.ts +2 -0
  62. package/build/contrib/systems/renderer/builders/bitmap-text-builder/utils.js +7 -0
  63. package/build/contrib/systems/renderer/builders/builder.d.ts +7 -0
  64. package/build/contrib/systems/renderer/builders/index.d.ts +5 -0
  65. package/build/contrib/systems/renderer/builders/index.js +4 -0
  66. package/build/contrib/systems/renderer/builders/pixi-view-builder/index.d.ts +8 -0
  67. package/build/contrib/systems/renderer/builders/pixi-view-builder/index.js +31 -0
  68. package/build/contrib/systems/renderer/builders/shape-builder/index.d.ts +12 -0
  69. package/build/contrib/systems/renderer/builders/shape-builder/index.js +128 -0
  70. package/build/contrib/systems/renderer/builders/shape-builder/utils.d.ts +4 -0
  71. package/build/contrib/systems/renderer/builders/shape-builder/utils.js +85 -0
  72. package/build/contrib/systems/renderer/builders/sprite-builder/index.d.ts +19 -0
  73. package/build/contrib/systems/renderer/builders/sprite-builder/index.js +166 -0
  74. package/build/contrib/systems/renderer/builders/sprite-builder/utils.d.ts +4 -0
  75. package/build/contrib/systems/renderer/builders/sprite-builder/utils.js +16 -0
  76. package/build/contrib/systems/renderer/builders/utils.d.ts +1 -0
  77. package/build/contrib/systems/renderer/builders/utils.js +4 -0
  78. package/build/contrib/systems/renderer/consts.d.ts +5 -0
  79. package/build/contrib/systems/renderer/consts.js +12 -0
  80. package/build/contrib/systems/renderer/index.d.ts +2 -0
  81. package/build/contrib/systems/renderer/index.js +2 -0
  82. package/build/contrib/systems/renderer/renderer.d.ts +31 -0
  83. package/build/contrib/systems/renderer/renderer.js +249 -0
  84. package/build/contrib/systems/renderer/service/index.d.ts +20 -0
  85. package/build/contrib/systems/renderer/service/index.js +70 -0
  86. package/build/contrib/systems/{sprite-renderer → renderer}/sort/index.d.ts +1 -3
  87. package/build/contrib/systems/{sprite-renderer → renderer}/sort/index.js +2 -4
  88. package/build/contrib/systems/renderer/sort/sort-by-layer.d.ts +2 -0
  89. package/build/contrib/systems/renderer/sort/sort-by-layer.js +13 -0
  90. package/build/contrib/systems/renderer/sort/sort-by-x-axis.d.ts +2 -0
  91. package/build/contrib/systems/renderer/sort/sort-by-x-axis.js +9 -0
  92. package/build/contrib/systems/renderer/sort/sort-by-y-axis.d.ts +2 -0
  93. package/build/contrib/systems/renderer/sort/sort-by-y-axis.js +9 -0
  94. package/build/contrib/systems/renderer/sort/types.d.ts +2 -0
  95. package/build/contrib/systems/{sprite-renderer → renderer}/sort/utils.d.ts +1 -1
  96. package/build/contrib/systems/renderer/types.d.ts +26 -0
  97. package/build/contrib/systems/renderer/types.js +1 -0
  98. package/build/contrib/systems/renderer/utils.d.ts +5 -0
  99. package/build/contrib/systems/renderer/utils.js +42 -0
  100. package/build/contrib/types/input-events.d.ts +1 -1
  101. package/build/contrib/types/view.d.ts +1 -0
  102. package/build/contrib/types/view.js +1 -0
  103. package/build/engine/actor/actor-collection.d.ts +4 -1
  104. package/build/engine/actor/actor-collection.js +4 -1
  105. package/build/engine/actor/actor-creator.d.ts +3 -3
  106. package/build/engine/actor/actor-query.d.ts +29 -0
  107. package/build/engine/actor/actor-query.js +85 -0
  108. package/build/engine/actor/actor.d.ts +3 -4
  109. package/build/engine/actor/index.d.ts +2 -0
  110. package/build/engine/actor/index.js +1 -0
  111. package/build/engine/component/component.d.ts +2 -2
  112. package/build/engine/data-lib/cache-store.d.ts +2 -1
  113. package/build/engine/data-lib/cache-store.js +7 -1
  114. package/build/engine/engine.d.ts +28 -6
  115. package/build/engine/engine.js +35 -27
  116. package/build/engine/entity/entity.d.ts +1 -1
  117. package/build/engine/event-target/event-target.d.ts +1 -1
  118. package/build/engine/math-lib/vector/ops.d.ts +4 -4
  119. package/build/engine/math-lib/vector/ops.js +2 -3
  120. package/build/engine/resource-loader/loaders/image-loader.d.ts +1 -1
  121. package/build/engine/resource-loader/loaders/index.d.ts +2 -3
  122. package/build/engine/resource-loader/loaders/json-loader.d.ts +1 -1
  123. package/build/engine/resource-loader/loaders/loader.d.ts +1 -1
  124. package/build/engine/scene/scene-manager.js +7 -1
  125. package/build/engine/template/template-collection.d.ts +2 -2
  126. package/build/engine/template/template.d.ts +2 -2
  127. package/build/index.d.ts +2 -2
  128. package/build/index.js +1 -1
  129. package/build/types/global.d.ts +20 -0
  130. package/package.json +13 -10
  131. package/build/contrib/components/light/index.d.ts +0 -20
  132. package/build/contrib/components/light/index.js +0 -18
  133. package/build/contrib/components/renderable/index.d.ts +0 -44
  134. package/build/contrib/components/renderable/index.js +0 -65
  135. package/build/contrib/components/renderable/material.d.ts +0 -16
  136. package/build/contrib/components/renderable/material.js +0 -8
  137. package/build/contrib/components/sprite/material.d.ts +0 -16
  138. package/build/contrib/components/sprite/material.js +0 -8
  139. package/build/contrib/systems/sprite-renderer/index.d.ts +0 -2
  140. package/build/contrib/systems/sprite-renderer/index.js +0 -2
  141. package/build/contrib/systems/sprite-renderer/light-subsystem/index.d.ts +0 -13
  142. package/build/contrib/systems/sprite-renderer/light-subsystem/index.js +0 -62
  143. package/build/contrib/systems/sprite-renderer/light-subsystem/light-factory.d.ts +0 -4
  144. package/build/contrib/systems/sprite-renderer/light-subsystem/light-factory.js +0 -27
  145. package/build/contrib/systems/sprite-renderer/material-factory/index.d.ts +0 -4
  146. package/build/contrib/systems/sprite-renderer/material-factory/index.js +0 -32
  147. package/build/contrib/systems/sprite-renderer/renderer.d.ts +0 -36
  148. package/build/contrib/systems/sprite-renderer/renderer.js +0 -249
  149. package/build/contrib/systems/sprite-renderer/service/index.d.ts +0 -24
  150. package/build/contrib/systems/sprite-renderer/service/index.js +0 -52
  151. package/build/contrib/systems/sprite-renderer/sort/sort-by-fit.d.ts +0 -2
  152. package/build/contrib/systems/sprite-renderer/sort/sort-by-fit.js +0 -12
  153. package/build/contrib/systems/sprite-renderer/sort/sort-by-layer.d.ts +0 -2
  154. package/build/contrib/systems/sprite-renderer/sort/sort-by-layer.js +0 -14
  155. package/build/contrib/systems/sprite-renderer/sort/sort-by-x-axis.d.ts +0 -2
  156. package/build/contrib/systems/sprite-renderer/sort/sort-by-x-axis.js +0 -15
  157. package/build/contrib/systems/sprite-renderer/sort/sort-by-y-axis.d.ts +0 -2
  158. package/build/contrib/systems/sprite-renderer/sort/sort-by-y-axis.js +0 -15
  159. package/build/contrib/systems/sprite-renderer/sort/sort-by-z-axis.d.ts +0 -2
  160. package/build/contrib/systems/sprite-renderer/sort/sort-by-z-axis.js +0 -6
  161. package/build/contrib/systems/sprite-renderer/sort/types.d.ts +0 -2
  162. package/build/contrib/systems/sprite-renderer/sprite-cropper.d.ts +0 -8
  163. package/build/contrib/systems/sprite-renderer/sprite-cropper.js +0 -30
  164. package/build/contrib/systems/sprite-renderer/types.d.ts +0 -7
  165. package/build/contrib/systems/sprite-renderer/utils.d.ts +0 -9
  166. package/build/contrib/systems/sprite-renderer/utils.js +0 -47
  167. /package/build/contrib/systems/{sprite-renderer/sort/types.js → renderer/builders/builder.js} +0 -0
  168. /package/build/contrib/systems/{sprite-renderer → renderer/sort}/types.js +0 -0
  169. /package/build/contrib/systems/{sprite-renderer → renderer}/sort/utils.js +0 -0
@@ -1,249 +0,0 @@
1
- import { Scene as ThreeJSScene, OrthographicCamera, WebGLRenderer, PlaneGeometry, Mesh, Color, } from 'three/src/Three';
2
- import { AddActor, RemoveActor } from '../../../engine/events';
3
- import { WorldSystem } from '../../../engine/system';
4
- import { ActorCollection } from '../../../engine/actor';
5
- import { Transform } from '../../components/transform';
6
- import { Sprite } from '../../components/sprite';
7
- import { Camera } from '../../components/camera';
8
- import { CameraService } from '../camera-system';
9
- import { MathOps } from '../../../engine/math-lib';
10
- import { CacheStore } from '../../../engine/data-lib';
11
- import { getWindowNode } from '../../utils/get-window-node';
12
- import { SpriteRendererService } from './service';
13
- import { composeSort, createSortByLayer, sortByYAxis, sortByXAxis, sortByZAxis, sortByFit, } from './sort';
14
- import { parseSortingLayers } from './sort/utils';
15
- import { LightSubsystem } from './light-subsystem';
16
- import { createMaterial, updateMaterial } from './material-factory';
17
- import { loadImage, prepareSprite, getAllSources, getTextureMapKey, cloneTexture, } from './utils';
18
- export class SpriteRenderer extends WorldSystem {
19
- actorCollection;
20
- window;
21
- renderScene;
22
- currentCamera;
23
- renderer;
24
- imageStore;
25
- spriteCache;
26
- textureMap;
27
- actorsMap;
28
- sortFn;
29
- lightSubsystem;
30
- viewWidth;
31
- viewHeight;
32
- templateCollection;
33
- cameraService;
34
- constructor(options) {
35
- super();
36
- const { globalOptions, windowNodeId, backgroundColor, backgroundAlpha, templateCollection, world, } = options;
37
- this.templateCollection = templateCollection;
38
- this.window = getWindowNode(windowNodeId);
39
- this.sortFn = composeSort([
40
- createSortByLayer(parseSortingLayers(globalOptions.sortingLayers?.layers)),
41
- sortByYAxis,
42
- sortByXAxis,
43
- sortByZAxis,
44
- sortByFit,
45
- ]);
46
- this.viewWidth = 0;
47
- this.viewHeight = 0;
48
- this.renderScene = new ThreeJSScene();
49
- this.currentCamera = new OrthographicCamera();
50
- this.renderer = new WebGLRenderer();
51
- this.renderer.setClearColor(new Color(backgroundColor), backgroundAlpha);
52
- this.renderer.setPixelRatio(window.devicePixelRatio);
53
- this.lightSubsystem = new LightSubsystem(this.renderScene);
54
- // TODO: Figure out how to set up camera correctly to avoid scale usage
55
- this.renderScene.scale.set(1, -1, 1);
56
- this.imageStore = new CacheStore();
57
- this.actorsMap = new Map();
58
- this.spriteCache = new Map();
59
- this.textureMap = new Map();
60
- this.cameraService = world.getService(CameraService);
61
- world.addService(new SpriteRendererService({
62
- threeScene: this.renderScene,
63
- threeCamera: this.currentCamera,
64
- window: this.window,
65
- sortFn: this.sortFn,
66
- cameraService: this.cameraService,
67
- }));
68
- window.addEventListener('resize', this.handleWindowResize);
69
- this.window.appendChild(this.renderer.domElement);
70
- }
71
- async onSceneLoad(scene) {
72
- const allSources = [
73
- ...getAllSources(this.templateCollection.getAll()),
74
- ...getAllSources(scene.children),
75
- ];
76
- const uniqueSources = [...new Set(allSources)];
77
- const images = await Promise.all(uniqueSources.map((src) => {
78
- return !this.imageStore.has(src) ? this.loadImage(src) : undefined;
79
- }));
80
- uniqueSources.forEach((src, index) => {
81
- if (images[index]) {
82
- this.imageStore.add(src, images[index]);
83
- }
84
- });
85
- allSources.forEach((src) => this.imageStore.retain(src));
86
- }
87
- onSceneEnter(scene) {
88
- this.actorCollection = new ActorCollection(scene, {
89
- components: [Sprite, Transform],
90
- });
91
- this.handleWindowResize();
92
- this.lightSubsystem.onSceneEnter(scene);
93
- this.actorCollection.addEventListener(AddActor, this.handleActorAdd);
94
- this.actorCollection.addEventListener(RemoveActor, this.handleActorRemove);
95
- }
96
- onSceneExit() {
97
- this.actorCollection?.removeEventListener(AddActor, this.handleActorAdd);
98
- this.actorCollection?.removeEventListener(RemoveActor, this.handleActorRemove);
99
- this.lightSubsystem.onSceneExit();
100
- this.actorsMap.clear();
101
- this.spriteCache.clear();
102
- this.textureMap.clear();
103
- this.renderScene.clear();
104
- this.actorCollection = undefined;
105
- }
106
- onSceneDestroy(scene) {
107
- const allSources = [
108
- ...getAllSources(this.templateCollection.getAll()),
109
- ...getAllSources(scene.children),
110
- ];
111
- allSources.forEach((src) => this.imageStore.release(src));
112
- this.imageStore.cleanReleased();
113
- }
114
- onWorldDestroy() {
115
- window.removeEventListener('resize', this.handleWindowResize);
116
- this.window.removeChild(this.renderer.domElement);
117
- }
118
- handleActorAdd = (event) => {
119
- const { actor } = event;
120
- const { src } = actor.getComponent(Sprite);
121
- if (this.imageStore.has(src)) {
122
- this.imageStore.retain(src);
123
- }
124
- else {
125
- void this.loadImage(src).then((image) => {
126
- if (image) {
127
- this.imageStore.add(src, image);
128
- this.imageStore.retain(src);
129
- }
130
- });
131
- }
132
- };
133
- handleActorRemove = (event) => {
134
- const { actor } = event;
135
- const { src } = actor.getComponent(Sprite);
136
- this.imageStore.release(src);
137
- const objectId = this.actorsMap.get(actor.id);
138
- if (objectId) {
139
- const object = this.renderScene.getObjectById(objectId);
140
- if (object) {
141
- this.renderScene.remove(object);
142
- }
143
- }
144
- this.actorsMap.delete(actor.id);
145
- };
146
- handleWindowResize = () => {
147
- this.viewWidth = this.window.clientWidth;
148
- this.viewHeight = this.window.clientHeight;
149
- this.currentCamera.left = this.viewWidth / -2;
150
- this.currentCamera.top = this.viewHeight / 2;
151
- this.currentCamera.right = this.viewWidth / 2;
152
- this.currentCamera.bottom = this.viewHeight / -2;
153
- this.currentCamera.updateProjectionMatrix();
154
- this.renderer.setSize(this.viewWidth, this.viewHeight);
155
- };
156
- async loadImage(src) {
157
- if (!src) {
158
- return undefined;
159
- }
160
- try {
161
- const image = await loadImage(src);
162
- return image;
163
- }
164
- catch (error) {
165
- console.warn(`Can't load image by the following url: ${src}`, error);
166
- return undefined;
167
- }
168
- }
169
- getTextureArray(sprite) {
170
- const { src, slice } = sprite;
171
- const image = this.imageStore.get(src);
172
- if (!image) {
173
- return undefined;
174
- }
175
- if (!this.spriteCache.has(src)) {
176
- this.spriteCache.set(src, {});
177
- }
178
- const spriteCache = this.spriteCache.get(src);
179
- if (!spriteCache[slice]) {
180
- spriteCache[slice] = prepareSprite(image, sprite);
181
- }
182
- const textureKey = getTextureMapKey(sprite);
183
- if (!this.textureMap.has(textureKey)) {
184
- this.textureMap.set(textureKey, spriteCache[slice].map((frame) => cloneTexture(sprite, frame)));
185
- }
186
- return this.textureMap.get(textureKey);
187
- }
188
- setUpActor(actor) {
189
- const sprite = actor.getComponent(Sprite);
190
- const material = createMaterial(sprite.material.type);
191
- const geometry = new PlaneGeometry(sprite.width, sprite.height);
192
- const object = new Mesh(geometry, material);
193
- object.userData.actor = actor;
194
- this.actorsMap.set(actor.id, object.id);
195
- this.renderScene.add(object);
196
- }
197
- normalizeOffset(value) {
198
- const currentCamera = this.cameraService.getCurrentCamera();
199
- const camera = currentCamera?.getComponent(Camera);
200
- const zoom = camera?.zoom ?? 1;
201
- const ratio = 1 / (window.devicePixelRatio * zoom);
202
- return Math.round(value / ratio) * ratio;
203
- }
204
- updateCamera() {
205
- const currentCamera = this.cameraService.getCurrentCamera();
206
- const transform = currentCamera?.getComponent(Transform);
207
- const camera = currentCamera?.getComponent(Camera);
208
- const offsetX = transform?.offsetX ?? 0;
209
- const offsetY = transform?.offsetY ?? 0;
210
- const zoom = camera?.zoom ?? 1;
211
- this.currentCamera.zoom = zoom;
212
- // TODO: Figure out how to set up camera correctly to avoid negative transform by y axis
213
- this.currentCamera.position.set(this.normalizeOffset(offsetX), -this.normalizeOffset(offsetY), 1);
214
- this.currentCamera.updateProjectionMatrix();
215
- }
216
- updateActors() {
217
- this.actorCollection?.forEach((actor, index) => {
218
- const transform = actor.getComponent(Transform);
219
- const sprite = actor.getComponent(Sprite);
220
- if (!this.actorsMap.has(actor.id)) {
221
- this.setUpActor(actor);
222
- }
223
- const object = this.renderScene.getObjectById(this.actorsMap.get(actor.id));
224
- if (!object) {
225
- return;
226
- }
227
- object.visible = !sprite.disabled;
228
- if (!object.visible) {
229
- return;
230
- }
231
- object.scale.set((sprite.flipX ? -1 : 1) * transform.scaleX, (sprite.flipY ? -1 : 1) * transform.scaleY, 1);
232
- object.rotation.set(0, 0, MathOps.degToRad(transform.rotation + sprite.rotation));
233
- object.position.set(this.normalizeOffset(transform.offsetX), this.normalizeOffset(transform.offsetY), 0);
234
- object.renderOrder = index;
235
- const material = object.material;
236
- const textureArray = this.getTextureArray(sprite);
237
- const texture = textureArray?.[sprite.currentFrame || 0];
238
- updateMaterial(sprite.material.type, material, sprite.material.options, texture);
239
- });
240
- }
241
- update() {
242
- this.updateCamera();
243
- this.lightSubsystem.update();
244
- this.actorCollection?.sort(this.sortFn);
245
- this.updateActors();
246
- this.renderer.render(this.renderScene, this.currentCamera);
247
- }
248
- }
249
- SpriteRenderer.systemName = 'SpriteRenderer';
@@ -1,24 +0,0 @@
1
- import type { Scene, Camera } from 'three/src/Three';
2
- import type { CameraService } from '../../camera-system';
3
- import type { Actor } from '../../../../engine/actor';
4
- import type { SortFn } from '../sort';
5
- interface SpriteRendererServiceOptions {
6
- threeScene: Scene;
7
- threeCamera: Camera;
8
- window: HTMLElement;
9
- sortFn: SortFn;
10
- cameraService: CameraService;
11
- }
12
- export declare class SpriteRendererService {
13
- private threeScene;
14
- private threeCamera;
15
- private window;
16
- private raycaster;
17
- private sortFn;
18
- private cameraService;
19
- constructor({ threeScene, threeCamera, window, sortFn, cameraService, }: SpriteRendererServiceOptions);
20
- private getNormalizedCoordinates;
21
- intersectsWithPoint(x: number, y: number): Actor[];
22
- intersectsWithRectangle(minX: number, minY: number, maxX: number, maxY: number): Actor[];
23
- }
24
- export {};
@@ -1,52 +0,0 @@
1
- import { Raycaster, Vector2 } from 'three/src/Three';
2
- import { getProjectedX, getProjectedY } from '../../../utils/coordinates-projection';
3
- export class SpriteRendererService {
4
- threeScene;
5
- threeCamera;
6
- window;
7
- raycaster;
8
- sortFn;
9
- cameraService;
10
- constructor({ threeScene, threeCamera, window, sortFn, cameraService, }) {
11
- this.threeScene = threeScene;
12
- this.threeCamera = threeCamera;
13
- this.window = window;
14
- this.sortFn = sortFn;
15
- this.cameraService = cameraService;
16
- this.raycaster = new Raycaster();
17
- }
18
- getNormalizedCoordinates(x, y) {
19
- const { clientWidth, clientHeight } = this.window;
20
- return new Vector2((x / clientWidth) * 2 - 1, -(y / clientHeight) * 2 + 1);
21
- }
22
- intersectsWithPoint(x, y) {
23
- this.raycaster.setFromCamera(this.getNormalizedCoordinates(x, y), this.threeCamera);
24
- const intersects = this.raycaster.intersectObjects(this.threeScene.children, true);
25
- const actors = intersects.map((intersect) => intersect.object.userData.actor);
26
- // TODO: Find more efficient way to return intersected objects in right order
27
- // according to posititon and sorting layer
28
- return actors
29
- .sort(this.sortFn)
30
- .reverse();
31
- }
32
- intersectsWithRectangle(minX, minY, maxX, maxY) {
33
- const actors = [];
34
- const camera = this.cameraService.getCurrentCamera();
35
- if (!camera) {
36
- return actors;
37
- }
38
- const projectedMinX = getProjectedX(minX, camera);
39
- const projectedMinY = getProjectedY(minY, camera);
40
- const projectedMaxX = getProjectedX(maxX, camera);
41
- const projectedMaxY = getProjectedY(maxY, camera);
42
- this.threeScene.traverse((object) => {
43
- if (object.userData.actor !== undefined) {
44
- const { x, y } = object.position;
45
- if (x >= projectedMinX && x <= projectedMaxX && y >= projectedMinY && y <= projectedMaxY) {
46
- actors.push(object.userData.actor);
47
- }
48
- }
49
- });
50
- return actors;
51
- }
52
- }
@@ -1,2 +0,0 @@
1
- import type { SortFn } from './types';
2
- export declare const sortByFit: SortFn;
@@ -1,12 +0,0 @@
1
- import { Sprite } from '../../../components/sprite';
2
- export const sortByFit = (a, b) => {
3
- const aSprite = a.getComponent(Sprite);
4
- const bSprite = b.getComponent(Sprite);
5
- if (aSprite.fit > bSprite.fit) {
6
- return 1;
7
- }
8
- if (aSprite.fit < bSprite.fit) {
9
- return -1;
10
- }
11
- return 0;
12
- };
@@ -1,2 +0,0 @@
1
- import type { SortFn } from './types';
2
- export declare const createSortByLayer: (sortingLayers: Array<string>) => SortFn;
@@ -1,14 +0,0 @@
1
- import { Sprite } from '../../../components/sprite';
2
- export const createSortByLayer = (sortingLayers) => {
3
- const sortingLayer = sortingLayers.reduce((storage, layer, index) => {
4
- storage[layer] = index;
5
- return storage;
6
- }, {});
7
- return (a, b) => {
8
- const aSprite = a.getComponent(Sprite);
9
- const bSprite = b.getComponent(Sprite);
10
- const aSortingLayerOrder = sortingLayer[aSprite.sortingLayer];
11
- const bSortingLayerOrder = sortingLayer[bSprite.sortingLayer];
12
- return aSortingLayerOrder - bSortingLayerOrder;
13
- };
14
- };
@@ -1,2 +0,0 @@
1
- import type { SortFn } from './types';
2
- export declare const sortByXAxis: SortFn;
@@ -1,15 +0,0 @@
1
- import { Sprite } from '../../../components/sprite';
2
- import { Transform } from '../../../components/transform';
3
- export const sortByXAxis = (a, b) => {
4
- const aSprite = a.getComponent(Sprite);
5
- const bSprite = b.getComponent(Sprite);
6
- const aTransform = a.getComponent(Transform);
7
- const bTransform = b.getComponent(Transform);
8
- const aOffsetX = aTransform.offsetX
9
- + aSprite.sortCenter[0]
10
- + ((aTransform.scaleX * aSprite.width) / 2);
11
- const bOffsetX = bTransform.offsetX
12
- + bSprite.sortCenter[0]
13
- + ((bTransform.scaleX * bSprite.width) / 2);
14
- return aOffsetX - bOffsetX;
15
- };
@@ -1,2 +0,0 @@
1
- import type { SortFn } from './types';
2
- export declare const sortByYAxis: SortFn;
@@ -1,15 +0,0 @@
1
- import { Sprite } from '../../../components/sprite';
2
- import { Transform } from '../../../components/transform';
3
- export const sortByYAxis = (a, b) => {
4
- const aSprite = a.getComponent(Sprite);
5
- const bSprite = b.getComponent(Sprite);
6
- const aTransform = a.getComponent(Transform);
7
- const bTransform = b.getComponent(Transform);
8
- const aOffsetY = aTransform.offsetY
9
- + aSprite.sortCenter[1]
10
- + ((aTransform.scaleY * aSprite.height) / 2);
11
- const bOffsetY = bTransform.offsetY
12
- + bSprite.sortCenter[1]
13
- + ((bTransform.scaleY * bSprite.height) / 2);
14
- return aOffsetY - bOffsetY;
15
- };
@@ -1,2 +0,0 @@
1
- import type { SortFn } from './types';
2
- export declare const sortByZAxis: SortFn;
@@ -1,6 +0,0 @@
1
- import { Transform } from '../../../components/transform';
2
- export const sortByZAxis = (a, b) => {
3
- const aTransform = a.getComponent(Transform);
4
- const bTransform = b.getComponent(Transform);
5
- return aTransform.offsetZ - bTransform.offsetZ;
6
- };
@@ -1,2 +0,0 @@
1
- import type { Actor } from '../../../../engine/actor';
2
- export type SortFn = (a: Actor, b: Actor) => number;
@@ -1,8 +0,0 @@
1
- import { Texture } from 'three/src/Three';
2
- import type { Sprite } from '../../components/sprite';
3
- export declare class SpriteCropper {
4
- private canvas;
5
- private canvasContext;
6
- constructor();
7
- crop(spriteTexture: HTMLImageElement, sprite: Sprite): Array<Texture>;
8
- }
@@ -1,30 +0,0 @@
1
- import { Texture } from 'three/src/Three';
2
- export class SpriteCropper {
3
- canvas;
4
- canvasContext;
5
- constructor() {
6
- this.canvas = document.createElement('canvas');
7
- this.canvasContext = this.canvas.getContext('2d', { willReadFrequently: true });
8
- }
9
- crop(spriteTexture, sprite) {
10
- const frames = sprite.slice;
11
- if (frames <= 0) {
12
- return [];
13
- }
14
- const width = Math.max(spriteTexture.width / frames, 1);
15
- const height = Math.max(spriteTexture.height, 1);
16
- this.canvas.width = width;
17
- this.canvas.height = height;
18
- const textures = new Array(frames);
19
- for (let i = 0; i < frames; i += 1) {
20
- this.canvasContext.clearRect(0, 0, width, height);
21
- this.canvasContext.drawImage(spriteTexture, width * i, 0, width, height, 0, 0, width, height);
22
- const frameImageData = this.canvasContext.getImageData(0, 0, width, height);
23
- // Some issue with three.js d.ts probably,
24
- // cause it should take ImageData as first argument
25
- const texture = new Texture(frameImageData);
26
- textures[i] = texture;
27
- }
28
- return textures;
29
- }
30
- }
@@ -1,7 +0,0 @@
1
- export type SortingLayer = {
2
- id: string;
3
- name: string;
4
- };
5
- export type SortingLayers = {
6
- layers: SortingLayer[];
7
- };
@@ -1,9 +0,0 @@
1
- import { Texture } from 'three/src/Three';
2
- import { Sprite } from '../../components/sprite';
3
- import type { Actor } from '../../../engine/actor';
4
- import type { Template } from '../../../engine/template';
5
- export declare const loadImage: (spriteSourcePath: string) => Promise<HTMLImageElement>;
6
- export declare const prepareSprite: (image: HTMLImageElement, sprite: Sprite) => Texture[];
7
- export declare const getAllSources: (actors: (Actor | Template)[]) => string[];
8
- export declare const getTextureMapKey: ({ slice, fit, width, height, src, }: Sprite) => string;
9
- export declare const cloneTexture: (sprite: Sprite, texture: Texture) => Texture;
@@ -1,47 +0,0 @@
1
- import { NearestFilter, RepeatWrapping, ClampToEdgeWrapping, } from 'three/src/Three';
2
- import { Sprite } from '../../components/sprite';
3
- import { ResourceLoader } from '../../../engine/resource-loader';
4
- import { traverseEntity } from '../../../engine/entity';
5
- import { SpriteCropper } from './sprite-cropper';
6
- const spriteCropper = new SpriteCropper();
7
- const resourceLoader = new ResourceLoader();
8
- export const loadImage = (spriteSourcePath) => resourceLoader.load(spriteSourcePath);
9
- export const prepareSprite = (image, sprite) => {
10
- const textures = spriteCropper.crop(image, sprite);
11
- textures.forEach((texture) => {
12
- texture.magFilter = NearestFilter;
13
- texture.minFilter = NearestFilter;
14
- texture.flipY = false;
15
- });
16
- return textures;
17
- };
18
- export const getAllSources = (actors) => {
19
- const sources = [];
20
- actors.forEach((actor) => {
21
- traverseEntity(actor, (entity) => {
22
- const sprite = entity.getComponent(Sprite);
23
- if (sprite?.src) {
24
- sources.push(sprite.src);
25
- }
26
- });
27
- });
28
- return sources;
29
- };
30
- export const getTextureMapKey = ({ slice, fit, width = 0, height = 0, src, }) => `${slice}_${fit}_${width}_${height}_${src}`;
31
- export const cloneTexture = (sprite, texture) => {
32
- const { fit, width = 0, height = 0 } = sprite;
33
- const repeatX = fit === 'repeat' ? width / texture.image.width : 1;
34
- const repeatY = fit === 'repeat' ? height / texture.image.height : 1;
35
- const newTexture = texture.clone();
36
- if (fit === 'repeat') {
37
- newTexture.wrapS = RepeatWrapping;
38
- newTexture.wrapT = RepeatWrapping;
39
- }
40
- else {
41
- newTexture.wrapS = ClampToEdgeWrapping;
42
- newTexture.wrapT = ClampToEdgeWrapping;
43
- }
44
- newTexture.repeat.set(repeatX, repeatY);
45
- newTexture.needsUpdate = true;
46
- return newTexture;
47
- };