import { KeyedHashMap } from "../lib/util/data_structures/hash"; import { Vector2 } from "../lib/util/geometry/vector2"; export type WorldGenState = { seed: number; zLevels: { [z: number]: ZLevelGen }; }; export type ZLevelGen = { id: number; chunks: KeyedHashMap<Vector2, ChunkGen>; }; export type ChunkGen = { id: number; pointNodes: KeyedHashMap<Vector2, PointNodeGen>; }; export class ChunkGenConstants { public static CHUNK_DIM = 9; // each chunk is a DIM x DIM grid of nodes, centered on a single node public static CHUNK_HALF_DIM = (ChunkGenConstants.CHUNK_DIM - 1) / 2; public static DROP_NODES_CHANCE = 0.3; // before generating edges, how many of the nodes to throw out } export type PointNodeGen = { id: number; // more data to be generated here - size, color, etc. resourceType: ResourceType; resourceModifier: ResourceModifier; resourceAmount: number; }; export enum ResourceNontrivialType { Mana0 = "Mana0", Mana1 = "Mana1", Mana2 = "Mana2", } export type ResourceType = "Nothing" | ResourceNontrivialType; // eslint-disable-next-line export const ResourceType = { Nothing: "Nothing", ...ResourceNontrivialType }; export enum ResourceModifier { Flat = "Flat", Increased0 = "% increased", AfterIncreased0 = "added after % increased", Increased1 = "% increased multiplier", AfterIncreased1 = "added after % increased multiplier", }