From 6b5d3fd67efd1b31bad8502ae2121bdffbc61d54 Mon Sep 17 00:00:00 2001 From: kruschen Date: Sun, 8 Sep 2024 17:09:24 +0000 Subject: [PATCH] requested changes --- src/layers/renderers/drawIce.ts | 18 ++++------ src/scripts/generation/pack/generateIce.ts | 39 ++++++++++++++-------- src/types/pack/ice.d.ts | 14 ++++---- 3 files changed, 39 insertions(+), 32 deletions(-) diff --git a/src/layers/renderers/drawIce.ts b/src/layers/renderers/drawIce.ts index e1bed7cc..c1251b7d 100644 --- a/src/layers/renderers/drawIce.ts +++ b/src/layers/renderers/drawIce.ts @@ -1,22 +1,16 @@ -import { getGridPolygon } from "utils/graphUtils"; -import { P, normalize, rn, last } from "utils"; -import { clipPoly } from "utils/lineUtils"; -import { ERROR } from "config/logging"; -import * as d3 from "d3"; +import { byId } from "utils/nodeUtils"; export function drawIce() { - const ice = d3.select("#ice"); + const ice = byId("ice"); const { ice: icePack } = pack; + let innerHTML = ""; for (const shield of icePack.iceShields) { - ice - .append("polygon") - .attr("points", shield.points.toString()) + innerHTML += ``; } for (const iceberg of icePack.icebergs) { - ice - .append("polygon") - .attr("points", iceberg.points.toString()) + innerHTML += ``; } + ice.innerHTML = innerHTML; } diff --git a/src/scripts/generation/pack/generateIce.ts b/src/scripts/generation/pack/generateIce.ts index bb393a86..98b98113 100644 --- a/src/scripts/generation/pack/generateIce.ts +++ b/src/scripts/generation/pack/generateIce.ts @@ -1,6 +1,5 @@ import { ERROR } from "config/logging"; import { aleaPRNG } from "scripts/aleaPRNG"; -import { IIce, Iiceberg } from "types/pack/ice"; import { clipPoly, last, normalize, P, rn } from "utils"; export function generateIce( @@ -8,7 +7,7 @@ export function generateIce( vertices: IGraphVertices, temp: Int8Array, features: TGridFeatures, - gridCells: Pick, + gridCells: Pick ): IIce { const shieldMin = -8; // max temp to form ice shield (glacier) const icebergMax = 1; // max temp to form an iceberg @@ -34,12 +33,16 @@ export function generateIce( const chain = connectVertices(vertex); if (chain.length < 3) continue; const points = clipPoly(chain.map((v) => vertices.p[v])); - icePack.iceShields.push({ points, type: "iceShield" }); + icePack.iceShields.push({ points, transform: { x: 0, y: 0 } }); continue; } // mildly cold: iceberd if (P(normalize(temperature, -7, 2.5))) continue; // t[-5; 2] cold: skip some cells - if (gridCells.f[i] !== 0 && (features[gridCells.f[i]] as IGridFeature).type === "lake") continue; // lake: no icebers // MARKER as IGridFeature + if ( + gridCells.f[i] !== 0 && + (features[gridCells.f[i]] as IGridFeature).type === "lake" + ) + continue; // lake: no icebers // MARKER as IGridFeature let size = (6.5 + temperature) / 10; // iceberg size: 0 = full size, 1 = zero size if (gridCells.t[i] === -1) size *= 1.3; // coasline: smaller icebers size = Math.min(size * (0.4 + Math.random() * 1.2), 0.95); // randomize iceberg size @@ -48,13 +51,20 @@ export function generateIce( return icePack; // Helper functions - function generateIceberg(i: number, size: number): Iiceberg { + function generateIceberg(i: number, size: number): IiceBerg { const cellMidPoint = cells.p[i]; - const points = cells.v[i].map(v => vertices.p[v]).map((point) => [ - (point[0] + (cellMidPoint[0] - point[0]) * size) | 0, - (point[1] + (cellMidPoint[1] - point[1]) * size) | 0, - ]); - return { points, cell: i, size: rn(1 - size, 2) }; + const points: TPoints = cells.v[i] + .map((v) => vertices.p[v]) + .map((point) => [ + (point[0] + (cellMidPoint[0] - point[0]) * size) | 0, + (point[1] + (cellMidPoint[1] - point[1]) * size) | 0, + ]); + return { + points, + transform: { x: 0, y: 0 }, + cell: i, + size: rn(1 - size, 2), + }; } // connect vertices to chain @@ -71,9 +81,12 @@ export function generateIce( currentVertex .filter((cellIndicie) => temp[cellIndicie] <= shieldMin) .forEach((cellIndice) => (used[cellIndice] = 1)); - const c0 = currentVertex[0] >= nOfCells || temp[currentVertex[0]] > shieldMin; - const c1 = currentVertex[1] >= nOfCells || temp[currentVertex[1]] > shieldMin; - const c2 = currentVertex[2] >= nOfCells || temp[currentVertex[2]] > shieldMin; + const c0 = + currentVertex[0] >= nOfCells || temp[currentVertex[0]] > shieldMin; + const c1 = + currentVertex[1] >= nOfCells || temp[currentVertex[1]] > shieldMin; + const c2 = + currentVertex[2] >= nOfCells || temp[currentVertex[2]] > shieldMin; const vertexNeighbors = vertices.v[current]; // neighboring vertices if (vertexNeighbors[0] !== prev && c0 !== c1) current = vertexNeighbors[0]; diff --git a/src/types/pack/ice.d.ts b/src/types/pack/ice.d.ts index 07d0aba5..d16e09a6 100644 --- a/src/types/pack/ice.d.ts +++ b/src/types/pack/ice.d.ts @@ -1,18 +1,18 @@ -export interface IIceBase { - points: number[][]; +interface IIceBase { + points: TPoints; + transform: {x: number, y: number}; } -export interface Iiceberg extends IIceBase { +interface IiceBerg extends IIceBase { cell: number; size: number; } -export interface IiceShield extends IIceBase { - type: string; +interface IiceShield extends IIceBase { } -export interface IIce{ - icebergs: Iiceberg[]; +interface IIce{ + icebergs: IiceBerg[]; iceShields: IiceShield[]; } \ No newline at end of file