@needle-tools/engine 2.67.8-pre → 2.67.9-pre
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.
- package/CHANGELOG.md +7 -0
- package/dist/needle-engine.js +2763 -2779
- package/dist/needle-engine.umd.cjs +79 -79
- package/lib/engine/engine_mainloop_utils.js +11 -4
- package/lib/engine/engine_mainloop_utils.js.map +1 -1
- package/lib/engine-components/SpriteRenderer.d.ts +6 -10
- package/lib/engine-components/SpriteRenderer.js +26 -48
- package/lib/engine-components/SpriteRenderer.js.map +1 -1
- package/lib/engine-components/codegen/components.d.ts +1 -0
- package/lib/engine-components/codegen/components.js +1 -0
- package/lib/engine-components/codegen/components.js.map +1 -1
- package/package.json +2 -2
- package/src/engine/engine_mainloop_utils.ts +395 -387
- package/src/engine-components/SpriteRenderer.ts +27 -44
- package/src/engine-components/codegen/components.ts +1 -0
|
@@ -5,7 +5,8 @@ import { Color, Material, NearestFilter, Texture, Vector2, TextureFilter } from
|
|
|
5
5
|
import { RGBAColor } from "./js-extensions/RGBAColor";
|
|
6
6
|
import { getParam } from "../engine/engine_utils";
|
|
7
7
|
|
|
8
|
-
const debug = getParam("debugspriterenderer")
|
|
8
|
+
const debug = getParam("debugspriterenderer");
|
|
9
|
+
const showWireframe = getParam("wireframe");
|
|
9
10
|
|
|
10
11
|
class SpriteUtils {
|
|
11
12
|
|
|
@@ -83,45 +84,37 @@ export class Sprite {
|
|
|
83
84
|
_geometry?: THREE.BufferGeometry;
|
|
84
85
|
}
|
|
85
86
|
|
|
86
|
-
|
|
87
|
-
class Slice {
|
|
88
|
-
@serializable()
|
|
89
|
-
name!: string;
|
|
90
|
-
@serializable(Vector2)
|
|
91
|
-
offset!: Vector2;
|
|
92
|
-
@serializable(Vector2)
|
|
93
|
-
size!: Vector2;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
87
|
const $spriteTexOwner = Symbol("spriteOwner");
|
|
97
88
|
|
|
98
89
|
export class SpriteSheet {
|
|
99
90
|
|
|
100
91
|
@serializable(Sprite)
|
|
101
|
-
|
|
92
|
+
sprites!: Sprite[];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export class SpriteData {
|
|
96
|
+
|
|
97
|
+
@serializable(SpriteSheet)
|
|
98
|
+
spriteSheet?: SpriteSheet;
|
|
99
|
+
|
|
102
100
|
@serializable()
|
|
103
101
|
index: number = 0;
|
|
104
|
-
@serializable(Slice)
|
|
105
|
-
slices!: Slice[];
|
|
106
102
|
|
|
107
103
|
update() {
|
|
104
|
+
if (!this.spriteSheet) return;
|
|
108
105
|
const index = this.index;
|
|
109
|
-
if (index < 0 || index >= this.
|
|
106
|
+
if (index < 0 || index >= this.spriteSheet.sprites.length)
|
|
110
107
|
return;
|
|
111
|
-
const slice = this.
|
|
112
|
-
let tex =
|
|
108
|
+
const slice = this.spriteSheet.sprites[index];
|
|
109
|
+
let tex = slice?.texture;
|
|
113
110
|
if (!tex) return;
|
|
114
111
|
tex.encoding = THREE.sRGBEncoding;
|
|
115
|
-
tex.offset.set(slice.offset.x, slice.offset.y);
|
|
116
|
-
// aniso > 1 makes the texture blurry
|
|
117
112
|
if (tex.minFilter == NearestFilter && tex.magFilter == NearestFilter)
|
|
118
113
|
tex.anisotropy = 1;
|
|
119
|
-
// tex.repeat.set(slice.size.x, -slice.size.y);
|
|
120
114
|
tex.needsUpdate = true;
|
|
121
115
|
}
|
|
122
116
|
}
|
|
123
117
|
|
|
124
|
-
|
|
125
118
|
export class SpriteRenderer extends Behaviour {
|
|
126
119
|
|
|
127
120
|
@serializable()
|
|
@@ -135,14 +128,14 @@ export class SpriteRenderer extends Behaviour {
|
|
|
135
128
|
@serializable(Material)
|
|
136
129
|
sharedMaterial?: THREE.Material;
|
|
137
130
|
|
|
138
|
-
@serializable(
|
|
139
|
-
get sprite():
|
|
131
|
+
@serializable(SpriteData)
|
|
132
|
+
get sprite(): SpriteData | undefined {
|
|
140
133
|
return this._spriteSheet;
|
|
141
134
|
}
|
|
142
|
-
set sprite(value:
|
|
135
|
+
set sprite(value: SpriteData | undefined | number) {
|
|
143
136
|
if (value === this._spriteSheet) return;
|
|
144
137
|
if (typeof value === "number") {
|
|
145
|
-
const index = Math.floor(value)
|
|
138
|
+
const index = Math.floor(value);
|
|
146
139
|
if (index === value)
|
|
147
140
|
this.spriteIndex = index;
|
|
148
141
|
return;
|
|
@@ -156,24 +149,22 @@ export class SpriteRenderer extends Behaviour {
|
|
|
156
149
|
set spriteIndex(value: number) {
|
|
157
150
|
if (!this._spriteSheet) return;
|
|
158
151
|
this._spriteSheet.index = value;
|
|
159
|
-
this.
|
|
152
|
+
this.updateSprite();
|
|
160
153
|
}
|
|
161
154
|
get spriteIndex(): number {
|
|
162
155
|
return this._spriteSheet?.index ?? 0;
|
|
163
156
|
}
|
|
164
157
|
get spriteFrames(): number {
|
|
165
|
-
return this._spriteSheet?.
|
|
158
|
+
return this._spriteSheet?.spriteSheet?.sprites.length ?? 0;
|
|
166
159
|
}
|
|
167
160
|
|
|
168
|
-
private _spriteSheet?:
|
|
161
|
+
private _spriteSheet?: SpriteData;
|
|
169
162
|
private _currentSprite?: THREE.Mesh;
|
|
170
163
|
|
|
171
164
|
awake(): void {
|
|
172
165
|
this._currentSprite = undefined;
|
|
173
166
|
if(debug) {
|
|
174
|
-
console.log("Awake", this.name, this, this.sprite
|
|
175
|
-
if(this.sprite?.sprite?.texture)
|
|
176
|
-
console.log(this.sprite.sprite.texture.minFilter.toString(), this.sprite.sprite.texture.magFilter.toString());
|
|
167
|
+
console.log("Awake", this.name, this, this.sprite);
|
|
177
168
|
}
|
|
178
169
|
}
|
|
179
170
|
|
|
@@ -184,29 +175,21 @@ export class SpriteRenderer extends Behaviour {
|
|
|
184
175
|
this.gameObject.add(this._currentSprite);
|
|
185
176
|
}
|
|
186
177
|
|
|
187
|
-
// frame : number = 0;
|
|
188
|
-
// update(){
|
|
189
|
-
// // const frameRate = 12;
|
|
190
|
-
// // this.frame += frameRate * this.context.time.deltaTime;
|
|
191
|
-
// // if(this.frame >= this.spriteFrames)
|
|
192
|
-
// // this.frame = 0;
|
|
193
|
-
// // this.spriteIndex = Math.floor(this.frame);
|
|
194
|
-
// // console.log(this.spriteIndex);
|
|
195
|
-
// }
|
|
196
|
-
|
|
197
178
|
private updateSprite() {
|
|
198
179
|
if (!this.__didAwake) return;
|
|
199
|
-
if (!this.sprite?.
|
|
200
|
-
const sprite = this.sprite.
|
|
180
|
+
if (!this.sprite?.spriteSheet?.sprites) return;
|
|
181
|
+
const sprite = this.sprite.spriteSheet.sprites[this.spriteIndex];
|
|
201
182
|
if (!this._currentSprite) {
|
|
202
183
|
const mat = new THREE.MeshBasicMaterial({ color: 0xffffff, side: THREE.DoubleSide });
|
|
203
184
|
if (!mat) return;
|
|
185
|
+
if (showWireframe)
|
|
186
|
+
mat.wireframe = true;
|
|
204
187
|
if (this.color) {
|
|
205
188
|
if (!mat["color"]) mat["color"] = new THREE.Color();
|
|
206
189
|
mat["color"].copy(this.color);
|
|
207
190
|
mat["opacity"] = this.color.alpha;
|
|
208
191
|
}
|
|
209
|
-
mat.
|
|
192
|
+
mat.transparent = true;
|
|
210
193
|
|
|
211
194
|
if (sprite.texture && !mat.wireframe) {
|
|
212
195
|
let tex = sprite.texture;
|
|
@@ -133,6 +133,7 @@ export { SpatialTriggerReceiver } from "../SpatialTrigger";
|
|
|
133
133
|
export { SpectatorCamera } from "../SpectatorCamera";
|
|
134
134
|
export { SphereCollider } from "../Collider";
|
|
135
135
|
export { Sprite } from "../SpriteRenderer";
|
|
136
|
+
export { SpriteData } from "../SpriteRenderer";
|
|
136
137
|
export { SpriteRenderer } from "../SpriteRenderer";
|
|
137
138
|
export { SpriteSheet } from "../SpriteRenderer";
|
|
138
139
|
export { SubEmitterSystem } from "../ParticleSystem";
|