@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.
@@ -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
- sprite?: Sprite;
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.slices.length)
106
+ if (index < 0 || index >= this.spriteSheet.sprites.length)
110
107
  return;
111
- const slice = this.slices[index];
112
- let tex = this.sprite?.texture;
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(SpriteSheet)
139
- get sprite(): SpriteSheet | undefined {
131
+ @serializable(SpriteData)
132
+ get sprite(): SpriteData | undefined {
140
133
  return this._spriteSheet;
141
134
  }
142
- set sprite(value: SpriteSheet | undefined | number) {
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._spriteSheet.update();
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?.slices.length ?? 0;
158
+ return this._spriteSheet?.spriteSheet?.sprites.length ?? 0;
166
159
  }
167
160
 
168
- private _spriteSheet?: 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?.sprite?.texture);
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?.sprite) return;
200
- const sprite = this.sprite.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.alphaTest = 0.5;
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";