@@ -15,8 +15,8 @@ class Levels {
15
15
16
16
static get ( ) {
17
17
Levels . _instance = new Levels ( ) ;
18
+ Levels . _instance . floorContainer . sortableChildren = true ;
18
19
canvas . background . addChild ( Levels . _instance . floorContainer ) ;
19
- //canvas.lighting.coloration.addChild(Levels._instance.occlusionContainer);
20
20
return Levels . _instance ;
21
21
}
22
22
@@ -82,25 +82,55 @@ class Levels {
82
82
}
83
83
}
84
84
85
- computeTokens ( tokens , elevation , holes , cTokenElev , ctokenId ) {
85
+ computeTokens ( tokens , elevation , holes , cTokenElev , ctokenId ) {
86
86
tokens . forEach ( ( t ) => {
87
- if ( t . token . id != ctokenId ) {
87
+ if ( t . token . id != ctokenId ) {
88
88
if ( ! ( t . range [ 1 ] >= elevation && t . range [ 0 ] <= elevation ) ) {
89
89
let isInHole = this . isTokenInHole ( t , holes ) ;
90
- if ( ! isInHole || ( t . token . data . elevation <= isInHole . range [ 1 ] && t . token . data . elevation >= isInHole . range [ 0 ] && ! ( cTokenElev <= isInHole . range [ 1 ] && cTokenElev >= isInHole . range [ 0 ] ) ) ) {
90
+ if ( ! this . isInsideHoleRange ( isInHole , t , cTokenElev ) ) {
91
+ t . token . levelsHidden = true ;
92
+ t . token . icon . alpha = 0 ;
93
+ if ( ! this . floorContainer . children . find ( ( c ) => c . name == t . token . id ) )
94
+ this . getTokenIconSprite ( t . token ) ;
95
+ } else {
91
96
t . token . visible = false ;
97
+ this . removeTempToken ( t . token ) ;
92
98
}
99
+ } else {
100
+ t . token . levelsHidden = false ;
101
+ t . token . icon . alpha = 1 ;
102
+ this . removeTempToken ( t . token ) ;
93
103
}
94
104
}
95
105
} ) ;
96
106
}
97
107
108
+ isInsideHoleRange ( isInHole , t , cTokenElev ) {
109
+ return (
110
+ ! isInHole ||
111
+ ( t . token . data . elevation <= isInHole . range [ 1 ] &&
112
+ t . token . data . elevation >= isInHole . range [ 0 ] &&
113
+ ! ( cTokenElev <= isInHole . range [ 1 ] && cTokenElev >= isInHole . range [ 0 ] ) )
114
+ ) ;
115
+ }
116
+
98
117
isTokenInHole ( t , holes ) {
99
- for ( let hole of holes ) {
100
- if ( ( t . range [ 1 ] <= hole . range [ 1 ] && t . range [ 0 ] >= hole . range [ 0 ] ) && hole . poly . contains ( t . token . center . x , t . token . center . y ) ) {
118
+ let cs = canvas . scene . dimensions . size ;
119
+ let th = t . token . height ;
120
+ let tw = t . token . width ;
121
+ for ( let hole of holes ) {
122
+ if (
123
+ t . range [ 1 ] <= hole . range [ 1 ] &&
124
+ t . range [ 0 ] >= hole . range [ 0 ] &&
125
+ ( hole . poly . contains ( t . token . center . x , t . token . center . y ) ||
126
+ hole . poly . contains ( t . token . x + tw , t . token . y ) ||
127
+ hole . poly . contains ( t . token . x , t . token . y + th ) ||
128
+ hole . poly . contains ( t . token . x + tw , t . token . y + th ) ||
129
+ hole . poly . contains ( t . token . x , t . token . y ) )
130
+ ) {
101
131
return hole ;
102
132
}
103
- } ;
133
+ }
104
134
return false ;
105
135
}
106
136
@@ -164,13 +194,16 @@ class Levels {
164
194
sprite . angle = tileImg . angle ;
165
195
sprite . alpha = 1 ;
166
196
sprite . name = tile . id ;
197
+ sprite . zIndex = tileIndex . range [ 1 ] ;
167
198
this . floorContainer . spriteIndex [ tile . id ] = sprite ;
168
199
this . floorContainer . addChild ( sprite ) ;
169
200
}
170
201
171
202
occludeLights ( tileIndex ) {
172
203
let tile = tileIndex . tile ;
173
- let oldSprite = this . occlusionContainer . children . find ( ( c ) => c . name == tile . id ) ;
204
+ let oldSprite = this . occlusionContainer . children . find (
205
+ ( c ) => c . name == tile . id
206
+ ) ;
174
207
let tileImg = tile . children [ 0 ] ;
175
208
if ( ! tileImg || oldSprite || ! tileImg . texture . baseTexture ) return ;
176
209
let sprite = new PIXI . Sprite . from ( tileImg . texture ) ;
@@ -184,10 +217,9 @@ class Levels {
184
217
sprite . angle = tileImg . angle ;
185
218
sprite . alpha = 1 ;
186
219
sprite . name = tile . id ;
187
- sprite . tint = 0x000000
220
+ sprite . tint = 0x000000 ;
188
221
this . occlusionContainer . spriteIndex [ tile . id ] = sprite ;
189
222
this . occlusionContainer . addChild ( sprite ) ;
190
-
191
223
}
192
224
193
225
removeTempTile ( tileIndex ) {
@@ -224,7 +256,7 @@ class Levels {
224
256
holeDrawings . forEach ( ( drawing ) => {
225
257
let p = new PIXI . Polygon ( this . adjustPolygonPoints ( drawing ) ) ;
226
258
let range = drawing . data . text . split ( "|" ) [ 1 ] . split ( "," ) ;
227
- holes . push ( { poly : p , range : [ parseInt ( range [ 0 ] ) , parseInt ( range [ 1 ] ) ] } ) ;
259
+ holes . push ( { poly : p , range : [ parseInt ( range [ 0 ] ) , parseInt ( range [ 1 ] ) ] } ) ;
228
260
} ) ;
229
261
return holes ;
230
262
}
@@ -237,6 +269,41 @@ class Levels {
237
269
return globalPoints ;
238
270
}
239
271
272
+ getTokenIconSprite ( token , x , y , rotate ) {
273
+ let oldSprite = this . floorContainer . children . find ( ( c ) => c . name == token . id ) ;
274
+ let icon = token . icon ;
275
+ if (
276
+ token . _controlled ||
277
+ ( oldSprite && ! rotate ) ||
278
+ ! icon ||
279
+ ! icon . texture . baseTexture
280
+ )
281
+ return ;
282
+ let sprite = oldSprite ? oldSprite : new PIXI . Sprite . from ( icon . texture ) ;
283
+ sprite . isSprite = true ;
284
+ sprite . width = token . data . width * canvas . scene . dimensions . size ;
285
+ sprite . height = token . data . height * canvas . scene . dimensions . size ;
286
+ sprite . position . x = x || token . position . x ;
287
+ sprite . position . y = y || token . position . y ;
288
+ sprite . position . x += icon . x ;
289
+ sprite . position . y += icon . y ;
290
+ sprite . anchor = icon . anchor ;
291
+ sprite . angle = icon . angle ;
292
+ sprite . alpha = 1 ;
293
+ sprite . name = token . id ;
294
+ sprite . zIndex = token . data . elevation ;
295
+ if ( ! oldSprite ) {
296
+ this . floorContainer . spriteIndex [ token . id ] = sprite ;
297
+ this . floorContainer . addChild ( sprite ) ;
298
+ }
299
+ }
300
+
301
+ removeTempToken ( token ) {
302
+ let tile = token ;
303
+ let sprite = this . floorContainer . children . find ( ( c ) => c . name == tile . id ) ;
304
+ if ( sprite ) this . floorContainer . removeChild ( sprite ) ;
305
+ }
306
+
240
307
/*****************************************************
241
308
* 1: TILE IS ABOVE -1: TILE IS BELOW 0 : SAME LEVEL *
242
309
*****************************************************/
0 commit comments