mirror of
https://github.com/Azgaar/Fantasy-Map-Generator.git
synced 2026-03-22 15:17:23 +01:00
fix: update type definitions and improve renderer initialization in draw-relief-icons
This commit is contained in:
parent
828534ebd9
commit
ffe350bca8
4 changed files with 19 additions and 13 deletions
|
|
@ -30,6 +30,7 @@
|
|||
"@types/delaunator": "^5.0.3",
|
||||
"@types/node": "^25.0.10",
|
||||
"@types/polylabel": "^1.1.3",
|
||||
"@types/three": "^0.183.1",
|
||||
"@vitest/browser": "^4.0.18",
|
||||
"@vitest/browser-playwright": "^4.0.18",
|
||||
"playwright": "^1.57.0",
|
||||
|
|
@ -38,7 +39,6 @@
|
|||
"vitest": "^4.0.18"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/three": "^0.183.1",
|
||||
"alea": "^1.0.1",
|
||||
"d3": "^7.9.0",
|
||||
"delaunator": "^5.0.1",
|
||||
|
|
|
|||
|
|
@ -4,10 +4,12 @@ function editReliefIcon() {
|
|||
closeDialogs(".stable");
|
||||
|
||||
// Switch from WebGL to editable SVG <use> elements
|
||||
undrawRelief();
|
||||
drawRelief("svg");
|
||||
if (!layerIsOn("toggleRelief")) {
|
||||
undrawRelief();
|
||||
turnButtonOn("toggleRelief");
|
||||
drawRelief("svg");
|
||||
}
|
||||
|
||||
if (!layerIsOn("toggleRelief")) toggleRelief();
|
||||
terrain.selectAll("use").call(d3.drag().on("drag", dragReliefIcon)).classed("draggable", true);
|
||||
|
||||
// Click-to-select: delegation on the terrain group covers existing and newly added <use> elements.
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ function processFeatureRegeneration(event, button) {
|
|||
drawStateLabels();
|
||||
} else if (button === "regenerateReliefIcons") {
|
||||
generateReliefIcons();
|
||||
if (!layerIsOn("toggleRelief")) toggleRelief();
|
||||
layerIsOn("toggleRelief") ? drawRelief() : toggleRelief();
|
||||
} else if (button === "regenerateRoutes") {
|
||||
regenerateRoutes();
|
||||
if (!layerIsOn("toggleRoutes")) toggleRoutes();
|
||||
|
|
|
|||
|
|
@ -5,18 +5,19 @@ import { generateRelief } from "../modules/relief-generator";
|
|||
import { byId } from "../utils";
|
||||
|
||||
let fo: SVGForeignObjectElement | null = null;
|
||||
let renderer: any = null; // THREE.WebGLRenderer
|
||||
let camera: any = null; // THREE.OrthographicCamera
|
||||
let scene: any = null; // THREE.Scene
|
||||
let renderer: THREE.WebGLRenderer | null = null;
|
||||
let camera: THREE.OrthographicCamera | null = null;
|
||||
let scene: THREE.Scene | null = null;
|
||||
|
||||
const textureCache = new Map<string, any>(); // set name → THREE.Texture
|
||||
const textureCache = new Map<string, THREE.Texture>(); // set name → THREE.Texture
|
||||
|
||||
function preloadTextures(): void {
|
||||
for (const set of Object.keys(RELIEF_SYMBOLS)) loadTexture(set);
|
||||
}
|
||||
|
||||
function loadTexture(set: string): Promise<any> {
|
||||
if (textureCache.has(set)) return Promise.resolve(textureCache.get(set));
|
||||
function loadTexture(set: string): Promise<THREE.Texture | null> {
|
||||
if (textureCache.has(set))
|
||||
return Promise.resolve(textureCache.get(set) || null);
|
||||
return new Promise((resolve) => {
|
||||
const loader = new THREE.TextureLoader();
|
||||
loader.load(
|
||||
|
|
@ -179,10 +180,13 @@ function disposeTextureCache(): void {
|
|||
function disposeScene(): void {
|
||||
if (!scene) return;
|
||||
while (scene.children.length) {
|
||||
const mesh = scene.children[0];
|
||||
const mesh = scene.children[0] as THREE.Mesh<
|
||||
THREE.BufferGeometry,
|
||||
THREE.Material
|
||||
>;
|
||||
scene.remove(mesh);
|
||||
mesh.geometry?.dispose();
|
||||
if (mesh.material) {
|
||||
if (mesh.material && "map" in mesh.material) {
|
||||
mesh.material.map = null;
|
||||
mesh.material.dispose();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue