@@ -21,43 +21,51 @@ export function registerWrappers() {
21
21
22
22
Hooks . on ( "refreshWall" , ( placeable ) => {
23
23
computeUI ( placeable ) ;
24
- } )
24
+ } ) ;
25
25
26
26
Hooks . on ( "refreshAmbientLight" , ( placeable ) => {
27
27
computeUI ( placeable ) ;
28
- } )
29
-
30
- libWrapper . register ( LevelsConfig . MODULE_ID , "CONFIG.Tile.objectClass.prototype.isVisible" , function ( wrapped , ...args ) {
31
- const visible = LevelsConfig . handlers . TileHandler . isTileVisible ( this ) ;
32
- let result = wrapped ( ...args ) ;
33
- if ( CONFIG . Levels . currentToken || canvas . tokens . controlled . length ) {
34
- if ( ( CONFIG . Levels . currentToken ?? canvas . tokens . controlled [ 0 ] ) . losHeight < this . document . elevation ) {
35
- if ( ! visible ) {
36
- if ( this . mesh ) {
37
- /*this.mesh.occluded = true;
28
+ } ) ;
29
+
30
+ libWrapper . register (
31
+ LevelsConfig . MODULE_ID ,
32
+ "CONFIG.Tile.objectClass.prototype.isVisible" ,
33
+ function ( wrapped , ...args ) {
34
+ const visible = LevelsConfig . handlers . TileHandler . isTileVisible ( this ) ;
35
+ let result = wrapped ( ...args ) ;
36
+ if ( CONFIG . Levels . currentToken || canvas . tokens . controlled . length ) {
37
+ if ( ( CONFIG . Levels . currentToken ?? canvas . tokens . controlled [ 0 ] ) . losHeight < this . document . elevation ) {
38
+ if ( ! visible ) {
39
+ if ( this . mesh ) {
40
+ /*this.mesh.occluded = true;
38
41
this.mesh.shader.enabled = false;
39
42
this.mesh.alpha = 0;*/
43
+ }
44
+ result = result && visible ;
40
45
}
46
+ } else {
41
47
result = result && visible ;
42
48
}
43
49
} else {
44
50
result = result && visible ;
45
51
}
46
- } else {
47
- result = result && visible ;
48
- }
49
- const uiVisible = computeUI ( this ) ;
50
- return result && uiVisible ;
51
- } , "WRAPPER" ) ;
52
-
53
- libWrapper . register ( LevelsConfig . MODULE_ID , "CONFIG.Drawing.objectClass.prototype.isVisible" , function ( wrapped , ...args ) {
54
- const result = wrapped ( ...args ) ;
55
- const visible = LevelsConfig . handlers . DrawingHandler . isDrawingVisible ( this ) ;
56
- const uiVisible = computeUI ( this ) ;
57
- return result && visible && uiVisible ;
58
- } , "WRAPPER" ) ;
59
-
52
+ const uiVisible = computeUI ( this ) ;
53
+ return result && uiVisible ;
54
+ } ,
55
+ "WRAPPER" ,
56
+ ) ;
60
57
58
+ libWrapper . register (
59
+ LevelsConfig . MODULE_ID ,
60
+ "CONFIG.Drawing.objectClass.prototype.isVisible" ,
61
+ function ( wrapped , ...args ) {
62
+ const result = wrapped ( ...args ) ;
63
+ const visible = LevelsConfig . handlers . DrawingHandler . isDrawingVisible ( this ) ;
64
+ const uiVisible = computeUI ( this ) ;
65
+ return result && visible && uiVisible ;
66
+ } ,
67
+ "WRAPPER" ,
68
+ ) ;
61
69
62
70
Hooks . on ( "activateTilesLayer " , ( ) => {
63
71
if ( CONFIG . Levels . UI ?. rangeEnabled ) {
@@ -72,59 +80,21 @@ export function registerWrappers() {
72
80
function ( wrapped , ...args ) {
73
81
if ( game . user . isGM ) return wrapped ( ...args ) ;
74
82
else {
75
- return CONFIG . Levels . currentToken ? [ CONFIG . Levels . currentToken ] : wrapped ( ...args ) ;
76
- }
77
- } ,
78
- "MIXED" ,
79
- ) ;
80
-
81
- libWrapper . register (
82
- LevelsConfig . MODULE_ID ,
83
- "CONFIG.Tile.objectClass.prototype.isRoof" ,
84
- function isRoof ( wrapped , ...args ) {
85
- if ( this . document . flags ?. levels ?. noCollision || this . document . flags [ "tile-scroll" ] ?. enableRotate || this . document . flags [ "tile-scroll" ] ?. enableScroll ) return wrapped ( ...args ) ;
86
- return wrapped ( ...args ) || ( this . document . overhead && Number . isFinite ( this . document . elevation ) ) ;
87
- } ,
88
- "WRAPPER" ,
89
- { perf_mode : "FAST" } ,
90
- ) ;
91
-
92
- libWrapper . register (
93
- LevelsConfig . MODULE_ID ,
94
- "CONFIG.Wall.objectClass.prototype.identifyInteriorState" ,
95
- function disableInteriorState ( wrapped , ...args ) {
96
- this . roof = null ;
97
- for ( const tile of canvas . tiles . roofs ) {
98
- const allWallBlockSight = tile . document ?. flags ?. levels ?. allWallBlockSight ?? true ;
99
- if ( tile . document . hidden || ! allWallBlockSight ) continue ;
100
- const isBottomFinite = Number . isFinite ( tile . document . elevation ) ;
101
- if ( isBottomFinite && Number . isFinite ( tile . document ?. flags ?. levels ?. rangeTop ) ) continue ;
102
- if ( isBottomFinite ) {
103
- const bottom = tile . document . elevation ;
104
- const wallBottom = this . document . flags [ "wall-height" ] ?. bottom ?? - Infinity ;
105
- if ( wallBottom >= bottom ) continue ;
106
- }
107
- const [ x1 , y1 , x2 , y2 ] = this . document . c ;
108
- const isInterior = tile . mesh ?. containsCanvasPoint ( { x : x1 , y : y1 } ) && tile . mesh ?. containsCanvasPoint ( { x : x2 , y : y2 } ) ;
109
- if ( isInterior ) {
110
- this . roof = tile ;
111
- break ;
83
+ const M = CONST . TOKEN_OCCLUSION_MODES ;
84
+ const mode = this . occlusionMode ;
85
+ if ( mode & M . VISIBLE || ( mode & M . HIGHLIGHTED && this . highlightObjects ) ) {
86
+ return this . placeables . filter ( ( t ) => t . visible ) ;
112
87
}
88
+ const tokens = new Set ( ) ;
89
+ if ( mode & M . HOVERED && this . hover ) tokens . add ( this . hover ) ;
90
+ if ( mode & M . CONTROLLED && CONFIG . Levels . currentToken ) tokens . add ( CONFIG . Levels . currentToken ) ;
91
+ if ( mode & M . OWNED ) this . ownedTokens . filter ( ( t ) => ! t . document . hidden ) . forEach ( ( t ) => tokens . add ( t ) ) ;
92
+ return Array . from ( tokens ) ;
113
93
}
114
94
} ,
115
- "OVERRIDE" ,
116
- { perf_mode : "FAST" } ,
95
+ "MIXED" ,
117
96
) ;
118
97
119
- /*libWrapper.register(
120
- LevelsConfig.MODULE_ID,
121
- "TilesLayer.prototype.displayRoofs", function displayRoofs(wrapped, ...args){
122
- const res = wrapped(...args);
123
- return res || (CONFIG.Levels.UI?.rangeEnabled && !canvas.tokens.controlled.length);
124
- },
125
- "WRAPPER"
126
- );*/
127
-
128
98
const visibilityTestObjectStack = [ ] ;
129
99
libWrapper . register (
130
100
LevelsConfig . MODULE_ID ,
@@ -141,53 +111,6 @@ export function registerWrappers() {
141
111
"WRAPPER" ,
142
112
) ;
143
113
144
- function elevatePoints ( config , visionSource ) {
145
- const object = config . object ;
146
- const unitsToPixel = canvas . dimensions . size / canvas . dimensions . distance ;
147
- if ( object instanceof Token ) {
148
- if ( config . tests . _levels !== object ) {
149
- config . tests . length = 0 ;
150
- for ( const p of LevelsConfig . handlers . SightHandler . getTestPoints ( object ) ) {
151
- config . tests . push ( { point : { x : p . x , y : p . y , z : p . z * unitsToPixel } , los : new Map ( ) } ) ;
152
- }
153
- config . tests . _levels = object ;
154
- }
155
- } else {
156
- let z ;
157
- if ( object instanceof PlaceableObject ) {
158
- z = object . document . elevation ;
159
- } else if ( object instanceof DoorControl ) {
160
- z = visionSource ?. elevation ;
161
- }
162
- z ??= canvas . primary . background . elevation ;
163
- z *= unitsToPixel ;
164
- for ( const test of config . tests ) {
165
- test . point . z = z ;
166
- }
167
- }
168
- return config ;
169
- }
170
-
171
- libWrapper . register (
172
- LevelsConfig . MODULE_ID ,
173
- "DetectionMode.prototype.testVisibility" ,
174
- function ( wrapped , visionSource , mode , config ) {
175
- return wrapped ( visionSource , mode , elevatePoints ( config , visionSource ) ) ;
176
- } ,
177
- "WRAPPER" ,
178
- { perf_mode : "FAST" } ,
179
- ) ;
180
-
181
- libWrapper . register (
182
- LevelsConfig . MODULE_ID ,
183
- "foundry.canvas.sources.PointLightSource.prototype.testVisibility" ,
184
- function ( wrapped , config ) {
185
- return wrapped ( elevatePoints ( config , CONFIG . Levels . currentToken ?. vision ) ) ;
186
- } ,
187
- "WRAPPER" ,
188
- { perf_mode : "FAST" } ,
189
- ) ;
190
-
191
114
libWrapper . register ( LevelsConfig . MODULE_ID , "CanvasVisibility.prototype._createVisibilityTestConfig" , LevelsConfig . handlers . SightHandler . _createVisibilityTestConfig , "OVERRIDE" , { perf_mode : "FAST" } ) ;
192
115
193
116
libWrapper . register ( LevelsConfig . MODULE_ID , "DetectionMode.prototype._testRange" , LevelsConfig . handlers . SightHandler . _testRange , "OVERRIDE" , { perf_mode : "FAST" } ) ;
@@ -210,7 +133,5 @@ export function registerWrappers() {
210
133
211
134
libWrapper . register ( LevelsConfig . MODULE_ID , "CONFIG.MeasuredTemplate.objectClass.prototype.isVisible" , LevelsConfig . handlers . TemplateHandler . isVisible , "WRAPPER" ) ;
212
135
213
- libWrapper . register ( LevelsConfig . MODULE_ID , "CanvasOcclusionMask.prototype._identifyOccludedTiles" , LevelsConfig . handlers . TileHandler . _identifyOccludedTiles , "OVERRIDE" ) ;
214
-
215
136
libWrapper . register ( LevelsConfig . MODULE_ID , "CONFIG.Token.objectClass.prototype.isVisible" , LevelsConfig . handlers . UIHandler . tokenUIWrapperIsVisible , "WRAPPER" ) ;
216
137
}
0 commit comments