@tableslayer/ui 0.1.5 → 0.1.6
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/dist/components/MarkerTooltip/MarkerTooltip.svelte +9 -1
- package/dist/components/MarkerTooltip/MarkerTooltip.svelte.d.ts +13 -16
- package/dist/components/index.d.ts +0 -5
- package/dist/components/index.js +0 -5
- package/package.json +1 -8
- package/dist/components/DrawingSliders/DrawingSliders.svelte +0 -379
- package/dist/components/DrawingSliders/DrawingSliders.svelte.d.ts +0 -16
- package/dist/components/DrawingSliders/index.d.ts +0 -1
- package/dist/components/DrawingSliders/index.js +0 -1
- package/dist/components/MyCounterButton.svelte +0 -11
- package/dist/components/MyCounterButton.svelte.d.ts +0 -3
- package/dist/components/PropsTable/PropsTable.svelte +0 -107
- package/dist/components/PropsTable/PropsTable.svelte.d.ts +0 -26
- package/dist/components/RadialMenu/EffectPreview.svelte +0 -36
- package/dist/components/RadialMenu/EffectPreview.svelte.d.ts +0 -9
- package/dist/components/RadialMenu/EffectPreviewScene.svelte +0 -194
- package/dist/components/RadialMenu/EffectPreviewScene.svelte.d.ts +0 -8
- package/dist/components/RadialMenu/RadialMenu.svelte +0 -503
- package/dist/components/RadialMenu/RadialMenu.svelte.d.ts +0 -4
- package/dist/components/RadialMenu/RadialMenuItem.svelte +0 -176
- package/dist/components/RadialMenu/RadialMenuItem.svelte.d.ts +0 -11
- package/dist/components/RadialMenu/index.d.ts +0 -2
- package/dist/components/RadialMenu/index.js +0 -2
- package/dist/components/RadialMenu/types.d.ts +0 -35
- package/dist/components/RadialMenu/types.js +0 -1
- package/dist/components/Stage/components/AnnotationLayer/AnnotationLayer.svelte +0 -445
- package/dist/components/Stage/components/AnnotationLayer/AnnotationLayer.svelte.d.ts +0 -19
- package/dist/components/Stage/components/AnnotationLayer/AnnotationMaterial.svelte +0 -167
- package/dist/components/Stage/components/AnnotationLayer/AnnotationMaterial.svelte.d.ts +0 -20
- package/dist/components/Stage/components/AnnotationLayer/types.d.ts +0 -121
- package/dist/components/Stage/components/AnnotationLayer/types.js +0 -71
- package/dist/components/Stage/components/CursorLayer/CursorLayer.svelte +0 -148
- package/dist/components/Stage/components/CursorLayer/CursorLayer.svelte.d.ts +0 -7
- package/dist/components/Stage/components/CursorLayer/cursor.svg +0 -26
- package/dist/components/Stage/components/CursorLayer/index.d.ts +0 -2
- package/dist/components/Stage/components/CursorLayer/index.js +0 -1
- package/dist/components/Stage/components/CursorLayer/types.d.ts +0 -28
- package/dist/components/Stage/components/CursorLayer/types.js +0 -1
- package/dist/components/Stage/components/DrawingLayer/DrawingMaterial.svelte +0 -364
- package/dist/components/Stage/components/DrawingLayer/DrawingMaterial.svelte.d.ts +0 -24
- package/dist/components/Stage/components/DrawingLayer/types.d.ts +0 -56
- package/dist/components/Stage/components/DrawingLayer/types.js +0 -23
- package/dist/components/Stage/components/EdgeOverlayLayer/EdgeOverlayLayer.svelte +0 -72
- package/dist/components/Stage/components/EdgeOverlayLayer/EdgeOverlayLayer.svelte.d.ts +0 -11
- package/dist/components/Stage/components/EdgeOverlayLayer/types.d.ts +0 -29
- package/dist/components/Stage/components/EdgeOverlayLayer/types.js +0 -1
- package/dist/components/Stage/components/FogLayer/FogLayer.svelte +0 -75
- package/dist/components/Stage/components/FogLayer/FogLayer.svelte.d.ts +0 -11
- package/dist/components/Stage/components/FogLayer/types.d.ts +0 -42
- package/dist/components/Stage/components/FogLayer/types.js +0 -1
- package/dist/components/Stage/components/FogOfWarLayer/FogOfWarLayer.svelte +0 -249
- package/dist/components/Stage/components/FogOfWarLayer/FogOfWarLayer.svelte.d.ts +0 -19
- package/dist/components/Stage/components/FogOfWarLayer/FogOfWarMaterial.svelte +0 -200
- package/dist/components/Stage/components/FogOfWarLayer/FogOfWarMaterial.svelte.d.ts +0 -18
- package/dist/components/Stage/components/FogOfWarLayer/types.d.ts +0 -143
- package/dist/components/Stage/components/FogOfWarLayer/types.js +0 -1
- package/dist/components/Stage/components/GridLayer/GridLayer.svelte +0 -20
- package/dist/components/Stage/components/GridLayer/GridLayer.svelte.d.ts +0 -12
- package/dist/components/Stage/components/GridLayer/GridMaterial.svelte +0 -69
- package/dist/components/Stage/components/GridLayer/GridMaterial.svelte.d.ts +0 -10
- package/dist/components/Stage/components/GridLayer/types.d.ts +0 -65
- package/dist/components/Stage/components/GridLayer/types.js +0 -10
- package/dist/components/Stage/components/LayerInput/LayerInput.svelte +0 -300
- package/dist/components/Stage/components/LayerInput/LayerInput.svelte.d.ts +0 -20
- package/dist/components/Stage/components/MapLayer/MapLayer.svelte +0 -196
- package/dist/components/Stage/components/MapLayer/MapLayer.svelte.d.ts +0 -24
- package/dist/components/Stage/components/MapLayer/dataSources/GifDataSource.d.ts +0 -93
- package/dist/components/Stage/components/MapLayer/dataSources/GifDataSource.js +0 -229
- package/dist/components/Stage/components/MapLayer/dataSources/IMapDataSource.d.ts +0 -51
- package/dist/components/Stage/components/MapLayer/dataSources/IMapDataSource.js +0 -1
- package/dist/components/Stage/components/MapLayer/dataSources/ImageDataSource.d.ts +0 -49
- package/dist/components/Stage/components/MapLayer/dataSources/ImageDataSource.js +0 -87
- package/dist/components/Stage/components/MapLayer/dataSources/VideoDataSource.d.ts +0 -52
- package/dist/components/Stage/components/MapLayer/dataSources/VideoDataSource.js +0 -141
- package/dist/components/Stage/components/MapLayer/dataSources/dataSourceFactory.d.ts +0 -21
- package/dist/components/Stage/components/MapLayer/dataSources/dataSourceFactory.js +0 -44
- package/dist/components/Stage/components/MapLayer/dataSources/index.d.ts +0 -15
- package/dist/components/Stage/components/MapLayer/dataSources/index.js +0 -14
- package/dist/components/Stage/components/MapLayer/types.d.ts +0 -54
- package/dist/components/Stage/components/MapLayer/types.js +0 -9
- package/dist/components/Stage/components/MarkerLayer/MarkerLayer.svelte +0 -398
- package/dist/components/Stage/components/MarkerLayer/MarkerLayer.svelte.d.ts +0 -24
- package/dist/components/Stage/components/MarkerLayer/MarkerToken.svelte +0 -262
- package/dist/components/Stage/components/MarkerLayer/MarkerToken.svelte.d.ts +0 -27
- package/dist/components/Stage/components/MarkerLayer/types.d.ts +0 -109
- package/dist/components/Stage/components/MarkerLayer/types.js +0 -21
- package/dist/components/Stage/components/MeasurementLayer/MeasurementLayer.svelte +0 -364
- package/dist/components/Stage/components/MeasurementLayer/MeasurementLayer.svelte.d.ts +0 -49
- package/dist/components/Stage/components/MeasurementLayer/MeasurementManager.svelte +0 -473
- package/dist/components/Stage/components/MeasurementLayer/MeasurementManager.svelte.d.ts +0 -24
- package/dist/components/Stage/components/MeasurementLayer/measurements/BaseMeasurement.d.ts +0 -150
- package/dist/components/Stage/components/MeasurementLayer/measurements/BaseMeasurement.js +0 -274
- package/dist/components/Stage/components/MeasurementLayer/measurements/BeamMeasurement.d.ts +0 -10
- package/dist/components/Stage/components/MeasurementLayer/measurements/BeamMeasurement.js +0 -58
- package/dist/components/Stage/components/MeasurementLayer/measurements/CircleMeasurement.d.ts +0 -9
- package/dist/components/Stage/components/MeasurementLayer/measurements/CircleMeasurement.js +0 -66
- package/dist/components/Stage/components/MeasurementLayer/measurements/ConeMeasurement.d.ts +0 -10
- package/dist/components/Stage/components/MeasurementLayer/measurements/ConeMeasurement.js +0 -103
- package/dist/components/Stage/components/MeasurementLayer/measurements/LineMeasurement.d.ts +0 -9
- package/dist/components/Stage/components/MeasurementLayer/measurements/LineMeasurement.js +0 -75
- package/dist/components/Stage/components/MeasurementLayer/measurements/RectangleMeasurement.d.ts +0 -9
- package/dist/components/Stage/components/MeasurementLayer/measurements/RectangleMeasurement.js +0 -73
- package/dist/components/Stage/components/MeasurementLayer/measurements/index.d.ts +0 -2
- package/dist/components/Stage/components/MeasurementLayer/measurements/index.js +0 -7
- package/dist/components/Stage/components/MeasurementLayer/types.d.ts +0 -76
- package/dist/components/Stage/components/MeasurementLayer/types.js +0 -9
- package/dist/components/Stage/components/MeasurementLayer/utils/canvasDrawing.d.ts +0 -83
- package/dist/components/Stage/components/MeasurementLayer/utils/canvasDrawing.js +0 -267
- package/dist/components/Stage/components/MeasurementLayer/utils/distanceCalculations.d.ts +0 -74
- package/dist/components/Stage/components/MeasurementLayer/utils/distanceCalculations.js +0 -130
- package/dist/components/Stage/components/ParticleSystem/ParticleSystem.svelte +0 -220
- package/dist/components/Stage/components/ParticleSystem/ParticleSystem.svelte.d.ts +0 -9
- package/dist/components/Stage/components/ParticleSystem/particles/atlases/ash.png +0 -0
- package/dist/components/Stage/components/ParticleSystem/particles/atlases/leaves.png +0 -0
- package/dist/components/Stage/components/ParticleSystem/particles/atlases/rain.png +0 -0
- package/dist/components/Stage/components/ParticleSystem/particles/atlases/snow.png +0 -0
- package/dist/components/Stage/components/ParticleSystem/rng.d.ts +0 -7
- package/dist/components/Stage/components/ParticleSystem/rng.js +0 -20
- package/dist/components/Stage/components/ParticleSystem/types.d.ts +0 -88
- package/dist/components/Stage/components/ParticleSystem/types.js +0 -37
- package/dist/components/Stage/components/PerformanceDebugger/PerformanceDebugger.svelte +0 -144
- package/dist/components/Stage/components/PerformanceDebugger/PerformanceDebugger.svelte.d.ts +0 -19
- package/dist/components/Stage/components/PerformanceDebugger/index.d.ts +0 -1
- package/dist/components/Stage/components/PerformanceDebugger/index.js +0 -1
- package/dist/components/Stage/components/PerformanceOverlay/PerformanceOverlay.svelte +0 -208
- package/dist/components/Stage/components/PerformanceOverlay/PerformanceOverlay.svelte.d.ts +0 -7
- package/dist/components/Stage/components/PerformanceOverlay/index.d.ts +0 -1
- package/dist/components/Stage/components/PerformanceOverlay/index.js +0 -1
- package/dist/components/Stage/components/PointerInputManager/PointerInputManager.svelte +0 -201
- package/dist/components/Stage/components/PointerInputManager/PointerInputManager.svelte.d.ts +0 -17
- package/dist/components/Stage/components/Scene/Scene.svelte +0 -651
- package/dist/components/Stage/components/Scene/Scene.svelte.d.ts +0 -88
- package/dist/components/Stage/components/Scene/luts.d.ts +0 -7
- package/dist/components/Stage/components/Scene/luts.js +0 -33
- package/dist/components/Stage/components/Scene/types.d.ts +0 -207
- package/dist/components/Stage/components/Scene/types.js +0 -35
- package/dist/components/Stage/components/Stage/Stage.svelte +0 -332
- package/dist/components/Stage/components/Stage/Stage.svelte.d.ts +0 -86
- package/dist/components/Stage/components/Stage/types.d.ts +0 -163
- package/dist/components/Stage/components/Stage/types.js +0 -5
- package/dist/components/Stage/components/WeatherLayer/WeatherLayer.svelte +0 -135
- package/dist/components/Stage/components/WeatherLayer/WeatherLayer.svelte.d.ts +0 -13
- package/dist/components/Stage/components/WeatherLayer/presets/AshPreset.d.ts +0 -3
- package/dist/components/Stage/components/WeatherLayer/presets/AshPreset.js +0 -69
- package/dist/components/Stage/components/WeatherLayer/presets/LeavesPreset.d.ts +0 -3
- package/dist/components/Stage/components/WeatherLayer/presets/LeavesPreset.js +0 -68
- package/dist/components/Stage/components/WeatherLayer/presets/RainPreset.d.ts +0 -3
- package/dist/components/Stage/components/WeatherLayer/presets/RainPreset.js +0 -67
- package/dist/components/Stage/components/WeatherLayer/presets/SnowPreset.d.ts +0 -3
- package/dist/components/Stage/components/WeatherLayer/presets/SnowPreset.js +0 -68
- package/dist/components/Stage/components/WeatherLayer/presets/index.d.ts +0 -5
- package/dist/components/Stage/components/WeatherLayer/presets/index.js +0 -5
- package/dist/components/Stage/components/WeatherLayer/types.d.ts +0 -31
- package/dist/components/Stage/components/WeatherLayer/types.js +0 -9
- package/dist/components/Stage/helpers/clippingPlaneStore.svelte.d.ts +0 -7
- package/dist/components/Stage/helpers/clippingPlaneStore.svelte.js +0 -23
- package/dist/components/Stage/helpers/debugState.svelte.d.ts +0 -10
- package/dist/components/Stage/helpers/debugState.svelte.js +0 -13
- package/dist/components/Stage/helpers/grid.d.ts +0 -72
- package/dist/components/Stage/helpers/grid.js +0 -444
- package/dist/components/Stage/helpers/lazyBrush.d.ts +0 -63
- package/dist/components/Stage/helpers/lazyBrush.js +0 -137
- package/dist/components/Stage/helpers/performanceMetrics.svelte.d.ts +0 -62
- package/dist/components/Stage/helpers/performanceMetrics.svelte.js +0 -165
- package/dist/components/Stage/helpers/utils.d.ts +0 -3
- package/dist/components/Stage/helpers/utils.js +0 -18
- package/dist/components/Stage/index.d.ts +0 -21
- package/dist/components/Stage/index.js +0 -21
- package/dist/components/Stage/shaders/AnnotationEffects.frag +0 -1070
- package/dist/components/Stage/shaders/Annotations.frag +0 -29
- package/dist/components/Stage/shaders/Drawing.frag +0 -83
- package/dist/components/Stage/shaders/Drawing.vert +0 -5
- package/dist/components/Stage/shaders/Fog.frag +0 -147
- package/dist/components/Stage/shaders/FractalNoise.frag +0 -96
- package/dist/components/Stage/shaders/GridShader.frag +0 -174
- package/dist/components/Stage/shaders/Overlay.frag +0 -23
- package/dist/components/Stage/shaders/Overlay.vert +0 -0
- package/dist/components/Stage/shaders/Particles.frag +0 -27
- package/dist/components/Stage/shaders/Particles.vert +0 -51
- package/dist/components/Stage/shaders/ToolOutline.frag +0 -59
- package/dist/components/Stage/shaders/default.vert +0 -8
- package/dist/components/Stage/types.d.ts +0 -4
- package/dist/components/Stage/types.js +0 -1
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
|
-
import { type StageProps } from '../Stage/types';
|
|
3
|
-
import type { CursorData } from '../CursorLayer/types';
|
|
4
|
-
interface Props {
|
|
5
|
-
props: StageProps;
|
|
6
|
-
cursors?: CursorData[];
|
|
7
|
-
trackLocalCursor?: boolean;
|
|
8
|
-
receivedMeasurement?: {
|
|
9
|
-
startPoint: {
|
|
10
|
-
x: number;
|
|
11
|
-
y: number;
|
|
12
|
-
};
|
|
13
|
-
endPoint: {
|
|
14
|
-
x: number;
|
|
15
|
-
y: number;
|
|
16
|
-
};
|
|
17
|
-
type: number;
|
|
18
|
-
beamWidth?: number;
|
|
19
|
-
coneAngle?: number;
|
|
20
|
-
color?: string;
|
|
21
|
-
thickness?: number;
|
|
22
|
-
outlineColor?: string;
|
|
23
|
-
outlineThickness?: number;
|
|
24
|
-
opacity?: number;
|
|
25
|
-
markerSize?: number;
|
|
26
|
-
autoHideDelay?: number;
|
|
27
|
-
fadeoutTime?: number;
|
|
28
|
-
showDistance?: boolean;
|
|
29
|
-
snapToGrid?: boolean;
|
|
30
|
-
enableDMG252?: boolean;
|
|
31
|
-
} | null;
|
|
32
|
-
}
|
|
33
|
-
declare const Scene: import("svelte").Component<Props, {
|
|
34
|
-
fill: () => void;
|
|
35
|
-
fit: () => void;
|
|
36
|
-
generateThumbnail: (quality?: number) => Promise<Blob>;
|
|
37
|
-
annotations: {
|
|
38
|
-
clear: (layerId: string) => void;
|
|
39
|
-
toRLE: () => Promise<Uint8Array<ArrayBufferLike>>;
|
|
40
|
-
fromRLE: (rleData: Uint8Array, width: number, height: number) => Promise<void>;
|
|
41
|
-
loadMask: (layerId: string, rleData: Uint8Array) => Promise<void>;
|
|
42
|
-
isDrawing: () => boolean;
|
|
43
|
-
};
|
|
44
|
-
map: {
|
|
45
|
-
fill: () => void;
|
|
46
|
-
fit: () => void;
|
|
47
|
-
getSize: () => {
|
|
48
|
-
width: number;
|
|
49
|
-
height: number;
|
|
50
|
-
} | null;
|
|
51
|
-
};
|
|
52
|
-
fogOfWar: {
|
|
53
|
-
clear: () => void;
|
|
54
|
-
reset: () => void;
|
|
55
|
-
toPng: () => Promise<Blob>;
|
|
56
|
-
toRLE: () => Promise<Uint8Array<ArrayBufferLike>>;
|
|
57
|
-
fromRLE: (rleData: Uint8Array, width: number, height: number) => Promise<void>;
|
|
58
|
-
isDrawing: () => boolean;
|
|
59
|
-
};
|
|
60
|
-
markers: {
|
|
61
|
-
readonly isHoveringMarker: boolean;
|
|
62
|
-
readonly isDraggingMarker: boolean;
|
|
63
|
-
readonly hoveredMarker: import("../MarkerLayer/types").Marker | null;
|
|
64
|
-
readonly selectedMarker: import("../MarkerLayer/types").Marker | null;
|
|
65
|
-
maintainHover: (maintain: boolean) => void;
|
|
66
|
-
onSceneChange: () => void;
|
|
67
|
-
};
|
|
68
|
-
measurement: {
|
|
69
|
-
getCurrentMeasurement: () => {
|
|
70
|
-
startPoint: THREE.Vector2 | null;
|
|
71
|
-
endPoint: THREE.Vector2 | null;
|
|
72
|
-
type: number;
|
|
73
|
-
} | null;
|
|
74
|
-
isDrawing: () => boolean;
|
|
75
|
-
};
|
|
76
|
-
getMarkerSizeInScreenSpace: (markerSize?: number) => number;
|
|
77
|
-
getMarkerScreenPosition: (marker: {
|
|
78
|
-
position?: {
|
|
79
|
-
x: number;
|
|
80
|
-
y: number;
|
|
81
|
-
};
|
|
82
|
-
}) => {
|
|
83
|
-
x: number;
|
|
84
|
-
y: number;
|
|
85
|
-
} | null;
|
|
86
|
-
}, "">;
|
|
87
|
-
type Scene = ReturnType<typeof Scene>;
|
|
88
|
-
export default Scene;
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
import { LookupTexture } from 'postprocessing';
|
|
11
|
-
import * as THREE from 'three';
|
|
12
|
-
import { LUTCubeLoader } from 'three/examples/jsm/loaders/LUTCubeLoader';
|
|
13
|
-
const loadingManager = new THREE.LoadingManager();
|
|
14
|
-
const lutLoader = new LUTCubeLoader(loadingManager);
|
|
15
|
-
/**
|
|
16
|
-
* Gets a LUT
|
|
17
|
-
* @param url The URL of the LUT to get
|
|
18
|
-
* @returns A promise that resolves to the LookupTexture
|
|
19
|
-
*/
|
|
20
|
-
export const getLUT = (url) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
|
-
if (!url)
|
|
22
|
-
return null;
|
|
23
|
-
const result = yield lutLoader.loadAsync(url);
|
|
24
|
-
try {
|
|
25
|
-
const lookupTexture = LookupTexture.from(result.texture3D);
|
|
26
|
-
lookupTexture.colorSpace = THREE.LinearSRGBColorSpace;
|
|
27
|
-
return lookupTexture;
|
|
28
|
-
}
|
|
29
|
-
catch (error) {
|
|
30
|
-
console.error(error);
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
});
|
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import type { ToneMappingMode } from 'postprocessing';
|
|
2
|
-
export declare enum SceneLoadingState {
|
|
3
|
-
LoadingMap = 1,
|
|
4
|
-
Resizing = 2,
|
|
5
|
-
Rendering = 3,
|
|
6
|
-
Initialized = 4
|
|
7
|
-
}
|
|
8
|
-
export declare enum SceneRotation {
|
|
9
|
-
Deg0 = 0,
|
|
10
|
-
Deg90 = 90,
|
|
11
|
-
Deg180 = 180,
|
|
12
|
-
Deg270 = 270
|
|
13
|
-
}
|
|
14
|
-
export declare enum SceneLayer {
|
|
15
|
-
Main = 0,
|
|
16
|
-
Overlay = 1,
|
|
17
|
-
Input = 2
|
|
18
|
-
}
|
|
19
|
-
export declare enum SceneLayerOrder {
|
|
20
|
-
Background = 0,
|
|
21
|
-
Map = 10,
|
|
22
|
-
Fog = 20,
|
|
23
|
-
Weather = 30,
|
|
24
|
-
EffectAnnotation = 35,// Effect annotations render under fog of war
|
|
25
|
-
Marker = 37,// Markers render above effect annotations but below fog of war
|
|
26
|
-
FogOfWar = 40,
|
|
27
|
-
Grid = 50,
|
|
28
|
-
EdgeOverlay = 70,
|
|
29
|
-
Annotation = 80,// Color annotations render over fog of war
|
|
30
|
-
Measurement = 90,
|
|
31
|
-
Cursor = 100
|
|
32
|
-
}
|
|
33
|
-
export interface SceneLayerProps {
|
|
34
|
-
/**
|
|
35
|
-
* Whether the scene layer should auto fit
|
|
36
|
-
*/
|
|
37
|
-
autoFit: boolean;
|
|
38
|
-
/**
|
|
39
|
-
* The position of the scene layer within the canvas
|
|
40
|
-
*/
|
|
41
|
-
offset: {
|
|
42
|
-
x: number;
|
|
43
|
-
y: number;
|
|
44
|
-
};
|
|
45
|
-
/**
|
|
46
|
-
* The rotation of the scene layer in degrees
|
|
47
|
-
*/
|
|
48
|
-
rotation: SceneRotation;
|
|
49
|
-
/**
|
|
50
|
-
* The scale of the scene layer
|
|
51
|
-
*/
|
|
52
|
-
zoom: number;
|
|
53
|
-
}
|
|
54
|
-
import type { Marker } from '../MarkerLayer/types';
|
|
55
|
-
export interface SceneExports {
|
|
56
|
-
fill: () => void;
|
|
57
|
-
fit: () => void;
|
|
58
|
-
generateThumbnail: () => Promise<Blob>;
|
|
59
|
-
getMarkerScreenPosition: (marker: Marker) => {
|
|
60
|
-
x: number;
|
|
61
|
-
y: number;
|
|
62
|
-
} | null;
|
|
63
|
-
annotations: {
|
|
64
|
-
clear: (layerId: string) => void;
|
|
65
|
-
toRLE: () => Promise<Uint8Array>;
|
|
66
|
-
fromRLE: (rleData: Uint8Array, width: number, height: number) => Promise<void>;
|
|
67
|
-
loadMask: (layerId: string, rleData: Uint8Array) => Promise<void>;
|
|
68
|
-
isDrawing: () => boolean;
|
|
69
|
-
};
|
|
70
|
-
fogOfWar: {
|
|
71
|
-
clear: () => void;
|
|
72
|
-
reset: () => void;
|
|
73
|
-
toPng: () => Promise<Blob>;
|
|
74
|
-
toRLE: () => Promise<Uint8Array>;
|
|
75
|
-
fromRLE: (rleData: Uint8Array, width: number, height: number) => Promise<void>;
|
|
76
|
-
isDrawing: () => boolean;
|
|
77
|
-
};
|
|
78
|
-
map: {
|
|
79
|
-
fit: () => void;
|
|
80
|
-
fill: () => void;
|
|
81
|
-
getSize: () => {
|
|
82
|
-
width: number;
|
|
83
|
-
height: number;
|
|
84
|
-
} | null;
|
|
85
|
-
};
|
|
86
|
-
markers: {
|
|
87
|
-
isHoveringMarker: boolean;
|
|
88
|
-
isDraggingMarker: boolean;
|
|
89
|
-
hoveredMarker: Marker | null;
|
|
90
|
-
selectedMarker: Marker | null;
|
|
91
|
-
maintainHover: (maintain: boolean) => void;
|
|
92
|
-
onSceneChange: () => void;
|
|
93
|
-
};
|
|
94
|
-
getMarkerSizeInScreenSpace: (markerSize: number) => number;
|
|
95
|
-
measurement: {
|
|
96
|
-
getCurrentMeasurement: () => {
|
|
97
|
-
startPoint: {
|
|
98
|
-
x: number;
|
|
99
|
-
y: number;
|
|
100
|
-
} | null;
|
|
101
|
-
endPoint: {
|
|
102
|
-
x: number;
|
|
103
|
-
y: number;
|
|
104
|
-
} | null;
|
|
105
|
-
type: number;
|
|
106
|
-
} | null;
|
|
107
|
-
isDrawing: () => boolean;
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Properties for post-processing effects
|
|
112
|
-
*/
|
|
113
|
-
export interface PostProcessingProps {
|
|
114
|
-
/**
|
|
115
|
-
* Whether post-processing is enabled
|
|
116
|
-
*/
|
|
117
|
-
enabled: boolean;
|
|
118
|
-
/**
|
|
119
|
-
* Bloom effect properties
|
|
120
|
-
*/
|
|
121
|
-
bloom: {
|
|
122
|
-
/**
|
|
123
|
-
* Whether the bloom effect is enabled
|
|
124
|
-
*/
|
|
125
|
-
enabled: boolean;
|
|
126
|
-
/**
|
|
127
|
-
* Overall intensity of the bloom effect (0-1)
|
|
128
|
-
*/
|
|
129
|
-
intensity: number;
|
|
130
|
-
/**
|
|
131
|
-
* Luminance threshold for what pixels will bloom (0-1)
|
|
132
|
-
*/
|
|
133
|
-
threshold: number;
|
|
134
|
-
/**
|
|
135
|
-
* How smoothly the bloom transitions at the threshold (0-1)
|
|
136
|
-
*/
|
|
137
|
-
smoothing: number;
|
|
138
|
-
/**
|
|
139
|
-
* Radius of the bloom effect
|
|
140
|
-
*/
|
|
141
|
-
radius: number;
|
|
142
|
-
/**
|
|
143
|
-
* Levels of the bloom effect
|
|
144
|
-
*/
|
|
145
|
-
levels: number;
|
|
146
|
-
/**
|
|
147
|
-
* Whether to apply mipmap blur
|
|
148
|
-
*/
|
|
149
|
-
mipmapBlur: boolean;
|
|
150
|
-
};
|
|
151
|
-
/**
|
|
152
|
-
* Chromatic aberration effect properties
|
|
153
|
-
*/
|
|
154
|
-
chromaticAberration: {
|
|
155
|
-
/**
|
|
156
|
-
* Whether the chromatic aberration effect is enabled
|
|
157
|
-
*/
|
|
158
|
-
enabled: boolean;
|
|
159
|
-
/**
|
|
160
|
-
* The offset of the chromatic aberration effect
|
|
161
|
-
*/
|
|
162
|
-
offset: number;
|
|
163
|
-
};
|
|
164
|
-
/**
|
|
165
|
-
* LUT effect properties
|
|
166
|
-
*/
|
|
167
|
-
lut: {
|
|
168
|
-
/**
|
|
169
|
-
* Whether the LUT3D effect is enabled
|
|
170
|
-
*/
|
|
171
|
-
enabled: boolean;
|
|
172
|
-
/**
|
|
173
|
-
* The URL of the LUT to use
|
|
174
|
-
*/
|
|
175
|
-
url: string | null;
|
|
176
|
-
};
|
|
177
|
-
/**
|
|
178
|
-
* Tone mapping effect properties
|
|
179
|
-
*/
|
|
180
|
-
toneMapping: {
|
|
181
|
-
/**
|
|
182
|
-
* Whether the tone mapping effect is enabled
|
|
183
|
-
*/
|
|
184
|
-
enabled: boolean;
|
|
185
|
-
/**
|
|
186
|
-
* The mode of the tone mapping effect
|
|
187
|
-
*/
|
|
188
|
-
mode: ToneMappingMode;
|
|
189
|
-
};
|
|
190
|
-
/**
|
|
191
|
-
* Vignette effect properties
|
|
192
|
-
*/
|
|
193
|
-
vignette: {
|
|
194
|
-
/**
|
|
195
|
-
* Whether the vignette effect is enabled
|
|
196
|
-
*/
|
|
197
|
-
enabled: boolean;
|
|
198
|
-
/**
|
|
199
|
-
* How far from the center the vignette starts (0-1)
|
|
200
|
-
*/
|
|
201
|
-
offset: number;
|
|
202
|
-
/**
|
|
203
|
-
* How dark the vignette effect is (0-1)
|
|
204
|
-
*/
|
|
205
|
-
darkness: number;
|
|
206
|
-
};
|
|
207
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
export var SceneLoadingState;
|
|
2
|
-
(function (SceneLoadingState) {
|
|
3
|
-
SceneLoadingState[SceneLoadingState["LoadingMap"] = 1] = "LoadingMap";
|
|
4
|
-
SceneLoadingState[SceneLoadingState["Resizing"] = 2] = "Resizing";
|
|
5
|
-
SceneLoadingState[SceneLoadingState["Rendering"] = 3] = "Rendering";
|
|
6
|
-
SceneLoadingState[SceneLoadingState["Initialized"] = 4] = "Initialized";
|
|
7
|
-
})(SceneLoadingState || (SceneLoadingState = {}));
|
|
8
|
-
export var SceneRotation;
|
|
9
|
-
(function (SceneRotation) {
|
|
10
|
-
SceneRotation[SceneRotation["Deg0"] = 0] = "Deg0";
|
|
11
|
-
SceneRotation[SceneRotation["Deg90"] = 90] = "Deg90";
|
|
12
|
-
SceneRotation[SceneRotation["Deg180"] = 180] = "Deg180";
|
|
13
|
-
SceneRotation[SceneRotation["Deg270"] = 270] = "Deg270";
|
|
14
|
-
})(SceneRotation || (SceneRotation = {}));
|
|
15
|
-
export var SceneLayer;
|
|
16
|
-
(function (SceneLayer) {
|
|
17
|
-
SceneLayer[SceneLayer["Main"] = 0] = "Main";
|
|
18
|
-
SceneLayer[SceneLayer["Overlay"] = 1] = "Overlay";
|
|
19
|
-
SceneLayer[SceneLayer["Input"] = 2] = "Input";
|
|
20
|
-
})(SceneLayer || (SceneLayer = {}));
|
|
21
|
-
export var SceneLayerOrder;
|
|
22
|
-
(function (SceneLayerOrder) {
|
|
23
|
-
SceneLayerOrder[SceneLayerOrder["Background"] = 0] = "Background";
|
|
24
|
-
SceneLayerOrder[SceneLayerOrder["Map"] = 10] = "Map";
|
|
25
|
-
SceneLayerOrder[SceneLayerOrder["Fog"] = 20] = "Fog";
|
|
26
|
-
SceneLayerOrder[SceneLayerOrder["Weather"] = 30] = "Weather";
|
|
27
|
-
SceneLayerOrder[SceneLayerOrder["EffectAnnotation"] = 35] = "EffectAnnotation";
|
|
28
|
-
SceneLayerOrder[SceneLayerOrder["Marker"] = 37] = "Marker";
|
|
29
|
-
SceneLayerOrder[SceneLayerOrder["FogOfWar"] = 40] = "FogOfWar";
|
|
30
|
-
SceneLayerOrder[SceneLayerOrder["Grid"] = 50] = "Grid";
|
|
31
|
-
SceneLayerOrder[SceneLayerOrder["EdgeOverlay"] = 70] = "EdgeOverlay";
|
|
32
|
-
SceneLayerOrder[SceneLayerOrder["Annotation"] = 80] = "Annotation";
|
|
33
|
-
SceneLayerOrder[SceneLayerOrder["Measurement"] = 90] = "Measurement";
|
|
34
|
-
SceneLayerOrder[SceneLayerOrder["Cursor"] = 100] = "Cursor";
|
|
35
|
-
})(SceneLayerOrder || (SceneLayerOrder = {}));
|
|
@@ -1,332 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { Canvas, T } from '@threlte/core';
|
|
3
|
-
import * as THREE from 'three';
|
|
4
|
-
import type { Callbacks, StageProps } from './types';
|
|
5
|
-
import Scene from '../Scene/Scene.svelte';
|
|
6
|
-
import { type SceneExports, SceneLayerOrder } from '../Scene/types';
|
|
7
|
-
import { setContext } from 'svelte';
|
|
8
|
-
import { PerfMonitor } from '@threlte/extras';
|
|
9
|
-
import { MarkerTooltip } from '../../../MarkerTooltip';
|
|
10
|
-
|
|
11
|
-
import type { CursorData } from './types';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Creates a custom WebGL renderer with high-performance settings.
|
|
15
|
-
* This fixes Chrome/Mac performance issues by:
|
|
16
|
-
* - Requesting high-performance GPU mode (critical for macOS)
|
|
17
|
-
* - Disabling unnecessary features like stencil buffer
|
|
18
|
-
*/
|
|
19
|
-
const createRenderer = (canvas: HTMLCanvasElement) => {
|
|
20
|
-
return new THREE.WebGLRenderer({
|
|
21
|
-
canvas,
|
|
22
|
-
powerPreference: 'high-performance',
|
|
23
|
-
antialias: true,
|
|
24
|
-
alpha: false,
|
|
25
|
-
stencil: false,
|
|
26
|
-
depth: true
|
|
27
|
-
});
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
interface Props {
|
|
31
|
-
props: StageProps;
|
|
32
|
-
callbacks: Callbacks;
|
|
33
|
-
receivedMeasurement?: {
|
|
34
|
-
startPoint: { x: number; y: number };
|
|
35
|
-
endPoint: { x: number; y: number };
|
|
36
|
-
type: number;
|
|
37
|
-
beamWidth?: number;
|
|
38
|
-
coneAngle?: number;
|
|
39
|
-
// Visual properties
|
|
40
|
-
color?: string;
|
|
41
|
-
thickness?: number;
|
|
42
|
-
outlineColor?: string;
|
|
43
|
-
outlineThickness?: number;
|
|
44
|
-
opacity?: number;
|
|
45
|
-
markerSize?: number;
|
|
46
|
-
// Timing properties
|
|
47
|
-
autoHideDelay?: number;
|
|
48
|
-
fadeoutTime?: number;
|
|
49
|
-
// Distance properties
|
|
50
|
-
showDistance?: boolean;
|
|
51
|
-
snapToGrid?: boolean;
|
|
52
|
-
enableDMG252?: boolean;
|
|
53
|
-
} | null;
|
|
54
|
-
cursors?: CursorData[];
|
|
55
|
-
trackLocalCursor?: boolean;
|
|
56
|
-
hoveredMarkerId?: string | null;
|
|
57
|
-
pinnedMarkerIds?: string[];
|
|
58
|
-
onPinToggle?: (markerId: string, pinned: boolean) => void;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
let {
|
|
62
|
-
props,
|
|
63
|
-
callbacks,
|
|
64
|
-
receivedMeasurement = null,
|
|
65
|
-
cursors = [],
|
|
66
|
-
trackLocalCursor = false,
|
|
67
|
-
hoveredMarkerId = null,
|
|
68
|
-
pinnedMarkerIds = [],
|
|
69
|
-
onPinToggle
|
|
70
|
-
}: Props = $props();
|
|
71
|
-
|
|
72
|
-
let sceneRef = $state<SceneExports>();
|
|
73
|
-
let containerElement = $state<HTMLDivElement>();
|
|
74
|
-
let tooltipPosition = $state<{ x: number; y: number } | null>(null);
|
|
75
|
-
interface MarkerData {
|
|
76
|
-
id: string;
|
|
77
|
-
title?: string;
|
|
78
|
-
note?: unknown;
|
|
79
|
-
visibility?: number;
|
|
80
|
-
size?: number;
|
|
81
|
-
tooltip?: {
|
|
82
|
-
title?: string;
|
|
83
|
-
content?: unknown;
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
let hoveredMarkerData = $state<MarkerData | null>(null);
|
|
88
|
-
let markerSizeInPixels = $state<number>(40);
|
|
89
|
-
|
|
90
|
-
let pinnedTooltips = $state<
|
|
91
|
-
Array<{
|
|
92
|
-
marker: MarkerData;
|
|
93
|
-
position: { x: number; y: number };
|
|
94
|
-
preferredPlacement: 'top' | 'bottom' | 'left' | 'right';
|
|
95
|
-
}>
|
|
96
|
-
>([]);
|
|
97
|
-
|
|
98
|
-
const renderedTooltips = new Map<string, { element: HTMLElement; bounds: DOMRect }>();
|
|
99
|
-
|
|
100
|
-
let stageContext = $state({ mode: props.mode, hoveredMarkerId, pinnedMarkerIds });
|
|
101
|
-
setContext('stage', stageContext);
|
|
102
|
-
|
|
103
|
-
$effect(() => {
|
|
104
|
-
stageContext.mode = props.mode;
|
|
105
|
-
stageContext.hoveredMarkerId = hoveredMarkerId;
|
|
106
|
-
stageContext.pinnedMarkerIds = pinnedMarkerIds;
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
setContext('callbacks', callbacks);
|
|
110
|
-
|
|
111
|
-
export const annotations = {
|
|
112
|
-
clear: (layerId: string) => sceneRef?.annotations.clear(layerId),
|
|
113
|
-
toRLE: () => sceneRef?.annotations?.toRLE() ?? Promise.resolve(new Uint8Array()),
|
|
114
|
-
fromRLE: (rleData: Uint8Array, width: number, height: number) =>
|
|
115
|
-
sceneRef?.annotations?.fromRLE(rleData, width, height) ?? Promise.resolve(),
|
|
116
|
-
loadMask: (layerId: string, rleData: Uint8Array) =>
|
|
117
|
-
sceneRef?.annotations?.loadMask(layerId, rleData) ?? Promise.resolve(),
|
|
118
|
-
isDrawing: () => sceneRef?.annotations?.isDrawing() ?? false
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
export const map = {
|
|
122
|
-
fill: () => sceneRef?.map.fill(),
|
|
123
|
-
fit: () => sceneRef?.map.fit(),
|
|
124
|
-
getSize: () => sceneRef?.map?.getSize?.() ?? null
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
export const fogOfWar = {
|
|
128
|
-
clear: () => sceneRef?.fogOfWar.clear(),
|
|
129
|
-
reset: () => sceneRef?.fogOfWar.reset(),
|
|
130
|
-
toPng: () => sceneRef?.fogOfWar.toPng() ?? Promise.resolve(new Blob()),
|
|
131
|
-
toRLE: () => sceneRef?.fogOfWar.toRLE() ?? Promise.resolve(new Uint8Array()),
|
|
132
|
-
fromRLE: (rleData: Uint8Array, width: number, height: number) =>
|
|
133
|
-
sceneRef?.fogOfWar.fromRLE(rleData, width, height) ?? Promise.resolve(),
|
|
134
|
-
isDrawing: () => sceneRef?.fogOfWar?.isDrawing() ?? false
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
export const scene = {
|
|
138
|
-
fill: () => sceneRef?.fill(),
|
|
139
|
-
fit: () => sceneRef?.fit(),
|
|
140
|
-
generateThumbnail: () => sceneRef?.generateThumbnail() ?? Promise.resolve(new Blob())
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
export const markers = {
|
|
144
|
-
get isHoveringMarker() {
|
|
145
|
-
return sceneRef?.markers?.isHoveringMarker ?? false;
|
|
146
|
-
},
|
|
147
|
-
get isDraggingMarker() {
|
|
148
|
-
return sceneRef?.markers?.isDraggingMarker ?? false;
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
export const measurement = {
|
|
153
|
-
getCurrentMeasurement: () => sceneRef?.measurement?.getCurrentMeasurement() ?? null,
|
|
154
|
-
isDrawing: () => sceneRef?.measurement?.isDrawing() ?? false
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Called when the scene changes to clear all transient state.
|
|
159
|
-
* Clears tooltips, marker hover/selection, and other scene-specific state.
|
|
160
|
-
*/
|
|
161
|
-
export function onSceneChange() {
|
|
162
|
-
// Clear tooltip state
|
|
163
|
-
hoveredMarkerData = null;
|
|
164
|
-
tooltipPosition = null;
|
|
165
|
-
|
|
166
|
-
// Clear marker interaction state
|
|
167
|
-
sceneRef?.markers?.onSceneChange?.();
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
$effect(() => {
|
|
171
|
-
// Update marker size when zoom changes or marker data changes
|
|
172
|
-
const zoom = props.scene.zoom;
|
|
173
|
-
if (sceneRef?.getMarkerSizeInScreenSpace) {
|
|
174
|
-
const markerSize = hoveredMarkerData?.size || 1;
|
|
175
|
-
markerSizeInPixels = sceneRef.getMarkerSizeInScreenSpace(markerSize);
|
|
176
|
-
}
|
|
177
|
-
// Use zoom to avoid unused variable warning
|
|
178
|
-
void zoom;
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
$effect(() => {
|
|
182
|
-
// Only show pinned tooltips in DM mode when activeLayer is None (0) or Marker (2)
|
|
183
|
-
// In player mode, always show pinned tooltips
|
|
184
|
-
const shouldShowPinnedTooltips = props.mode === 1 || props.activeLayer === 0 || props.activeLayer === 2;
|
|
185
|
-
|
|
186
|
-
if (
|
|
187
|
-
pinnedMarkerIds &&
|
|
188
|
-
pinnedMarkerIds.length > 0 &&
|
|
189
|
-
containerElement &&
|
|
190
|
-
sceneRef?.getMarkerScreenPosition &&
|
|
191
|
-
shouldShowPinnedTooltips
|
|
192
|
-
) {
|
|
193
|
-
const newPinnedTooltips = [];
|
|
194
|
-
|
|
195
|
-
const placementPatterns = [
|
|
196
|
-
['top', 'bottom', 'left', 'right'],
|
|
197
|
-
['bottom', 'top', 'right', 'left'],
|
|
198
|
-
['left', 'right', 'top', 'bottom'],
|
|
199
|
-
['right', 'left', 'bottom', 'top']
|
|
200
|
-
];
|
|
201
|
-
|
|
202
|
-
for (let i = 0; i < pinnedMarkerIds.length; i++) {
|
|
203
|
-
const markerId = pinnedMarkerIds[i];
|
|
204
|
-
const marker = props.marker.markers.find((m) => m.id === markerId);
|
|
205
|
-
if (marker) {
|
|
206
|
-
const screenPos = sceneRef.getMarkerScreenPosition(marker);
|
|
207
|
-
if (screenPos) {
|
|
208
|
-
const pattern = placementPatterns[i % placementPatterns.length];
|
|
209
|
-
const preferredPlacement = pattern[0] as 'top' | 'bottom' | 'left' | 'right';
|
|
210
|
-
|
|
211
|
-
newPinnedTooltips.push({ marker, position: screenPos, preferredPlacement });
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
pinnedTooltips = newPinnedTooltips;
|
|
216
|
-
} else {
|
|
217
|
-
pinnedTooltips = [];
|
|
218
|
-
}
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
$effect(() => {
|
|
222
|
-
let markerForTooltip = null;
|
|
223
|
-
|
|
224
|
-
if (props.mode === 0) {
|
|
225
|
-
const hoveredMarker = sceneRef?.markers?.hoveredMarker;
|
|
226
|
-
const isDragging = sceneRef?.markers?.isDraggingMarker;
|
|
227
|
-
// Only show tooltips when activeLayer is None (0) or Marker (2)
|
|
228
|
-
// MapLayerType: None = 0, FogOfWar = 1, Marker = 2, Annotation = 3, Measurement = 4
|
|
229
|
-
const isMarkerOrNoneLayer = props.activeLayer === 0 || props.activeLayer === 2;
|
|
230
|
-
if (hoveredMarker && !pinnedMarkerIds.includes(hoveredMarker.id) && !isDragging && isMarkerOrNoneLayer) {
|
|
231
|
-
// Look up the current marker from the markers array by ID to handle Y.js updates
|
|
232
|
-
// This prevents stale marker references from breaking tooltips after sync
|
|
233
|
-
const currentMarker = props.marker.markers.find((m) => m.id === hoveredMarker.id);
|
|
234
|
-
markerForTooltip = currentMarker || hoveredMarker;
|
|
235
|
-
}
|
|
236
|
-
} else if (props.mode === 1) {
|
|
237
|
-
// Player mode - only show tooltips for markers where:
|
|
238
|
-
// 1. The marker is pinned (handled separately in pinnedTooltips)
|
|
239
|
-
// 2. The marker visibility is "On hover" (MarkerVisibility.Hover = 3) AND DM is hovering
|
|
240
|
-
// 3. The marker visibility is "Everyone" (MarkerVisibility.Always = 0) AND DM is hovering
|
|
241
|
-
let dmBroadcastMarker = null;
|
|
242
|
-
if (hoveredMarkerId) {
|
|
243
|
-
if (!pinnedMarkerIds.includes(hoveredMarkerId)) {
|
|
244
|
-
const marker = props.marker.markers.find((m) => m.id === hoveredMarkerId);
|
|
245
|
-
// Only show if marker visibility is "On hover" or "Everyone"
|
|
246
|
-
// MarkerVisibility: Always = 0, DM = 1, Player = 2, Hover = 3
|
|
247
|
-
if (marker && (marker.visibility === 0 || marker.visibility === 3)) {
|
|
248
|
-
dmBroadcastMarker = marker;
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
// In player mode, also check if player has selected a marker
|
|
254
|
-
// But only show tooltip if it has appropriate visibility (not DM-only)
|
|
255
|
-
const selectedByPlayer = sceneRef?.markers?.selectedMarker;
|
|
256
|
-
const isDragging = sceneRef?.markers?.isDraggingMarker;
|
|
257
|
-
let selectedNotPinned = null;
|
|
258
|
-
if (selectedByPlayer && !pinnedMarkerIds.includes(selectedByPlayer.id) && !isDragging) {
|
|
259
|
-
// Only show if marker visibility is not DM-only (i.e., not visibility = 1)
|
|
260
|
-
// MarkerVisibility: Always = 0, DM = 1, Player = 2, Hover = 3
|
|
261
|
-
if (selectedByPlayer.visibility !== 1) {
|
|
262
|
-
selectedNotPinned = selectedByPlayer;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
markerForTooltip = dmBroadcastMarker || selectedNotPinned;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
if (markerForTooltip && containerElement) {
|
|
270
|
-
hoveredMarkerData = markerForTooltip;
|
|
271
|
-
const screenPos = sceneRef?.getMarkerScreenPosition?.(markerForTooltip);
|
|
272
|
-
if (screenPos) {
|
|
273
|
-
tooltipPosition = screenPos;
|
|
274
|
-
}
|
|
275
|
-
} else {
|
|
276
|
-
hoveredMarkerData = null;
|
|
277
|
-
tooltipPosition = null;
|
|
278
|
-
}
|
|
279
|
-
});
|
|
280
|
-
</script>
|
|
281
|
-
|
|
282
|
-
<div bind:this={containerElement} style="height: 100%; width: 100%; position: relative;">
|
|
283
|
-
<Canvas {createRenderer} renderMode="always">
|
|
284
|
-
<T.Mesh scale={[100000, 100000, 1]} layers={[SceneLayerOrder.Background]}>
|
|
285
|
-
<T.PlaneGeometry />
|
|
286
|
-
<T.MeshBasicMaterial color={props.backgroundColor} />
|
|
287
|
-
</T.Mesh>
|
|
288
|
-
|
|
289
|
-
<Scene bind:this={sceneRef} {props} {receivedMeasurement} {cursors} {trackLocalCursor} />
|
|
290
|
-
{#if props.debug.enableStats}
|
|
291
|
-
<PerfMonitor logsPerSecond={props.debug.loggingRate} anchorX={'right'} anchorY={'bottom'} />
|
|
292
|
-
{/if}
|
|
293
|
-
</Canvas>
|
|
294
|
-
|
|
295
|
-
{#each pinnedTooltips as { marker, position, preferredPlacement }, index}
|
|
296
|
-
<MarkerTooltip
|
|
297
|
-
{marker}
|
|
298
|
-
{position}
|
|
299
|
-
{containerElement}
|
|
300
|
-
markerDiameter={sceneRef?.getMarkerSizeInScreenSpace ? sceneRef.getMarkerSizeInScreenSpace(marker.size || 1) : 40}
|
|
301
|
-
isDM={props.mode === 0}
|
|
302
|
-
isPinned={true}
|
|
303
|
-
{onPinToggle}
|
|
304
|
-
{preferredPlacement}
|
|
305
|
-
existingTooltips={Array.from(renderedTooltips.values()).filter((t, i) => i < index)}
|
|
306
|
-
onTooltipMount={(element, bounds) => {
|
|
307
|
-
renderedTooltips.set(marker.id, { element, bounds });
|
|
308
|
-
}}
|
|
309
|
-
onTooltipUnmount={() => {
|
|
310
|
-
renderedTooltips.delete(marker.id);
|
|
311
|
-
}}
|
|
312
|
-
/>
|
|
313
|
-
{/each}
|
|
314
|
-
|
|
315
|
-
{#if hoveredMarkerData}
|
|
316
|
-
<MarkerTooltip
|
|
317
|
-
marker={hoveredMarkerData}
|
|
318
|
-
position={tooltipPosition}
|
|
319
|
-
{containerElement}
|
|
320
|
-
markerDiameter={markerSizeInPixels}
|
|
321
|
-
isDM={props.mode === 0}
|
|
322
|
-
isPinned={false}
|
|
323
|
-
{onPinToggle}
|
|
324
|
-
existingTooltips={Array.from(renderedTooltips.values())}
|
|
325
|
-
onTooltipHover={(isHovering) => {
|
|
326
|
-
if (props.mode === 0 && sceneRef?.markers?.maintainHover) {
|
|
327
|
-
sceneRef.markers.maintainHover(isHovering);
|
|
328
|
-
}
|
|
329
|
-
}}
|
|
330
|
-
/>
|
|
331
|
-
{/if}
|
|
332
|
-
</div>
|