33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
import type { AetherShipKind } from "../game/aetherAssault";
|
|
|
|
export const AETHER_STANDARD_SHIP_COLORS = [
|
|
"#20c8e8",
|
|
"#8a5cff",
|
|
"#f044b5",
|
|
"#31cf74",
|
|
"#f06b3c",
|
|
"#d6b91c",
|
|
] as const;
|
|
|
|
export const AETHER_ARMORED_SHIP_COLORS = [
|
|
"#9ef5ff",
|
|
"#d0b8ff",
|
|
"#ff9bdc",
|
|
"#9af0b8",
|
|
"#ffb088",
|
|
"#ffe976",
|
|
] as const;
|
|
|
|
export function aetherShipColorIndex(seed: number, wave: number, shipIndex: number) {
|
|
const normalizedSeed = Math.floor(Number.isFinite(seed) ? seed : 0) >>> 0;
|
|
const mixedSeed = (normalizedSeed ^ (normalizedSeed >>> 16)) >>> 0;
|
|
const normalizedWave = Math.max(1, Math.floor(Number.isFinite(wave) ? wave : 1));
|
|
const normalizedIndex = Math.max(0, Math.floor(Number.isFinite(shipIndex) ? shipIndex : 0));
|
|
return (mixedSeed + (normalizedWave - 1) * 3 + normalizedIndex * 5) % AETHER_STANDARD_SHIP_COLORS.length;
|
|
}
|
|
|
|
export function aetherShipColor(seed: number, wave: number, shipIndex: number, kind: AetherShipKind) {
|
|
const palette = kind === "armored" ? AETHER_ARMORED_SHIP_COLORS : AETHER_STANDARD_SHIP_COLORS;
|
|
return palette[aetherShipColorIndex(seed, wave, shipIndex)];
|
|
}
|