tarinai/js/domain_ids.js
2026-07-29 20:52:11 +09:00

70 lines
2.8 KiB
JavaScript

"use strict";
// Layer: data/domain-ids
// Owns current domain identifier order shared by UI, simulation labels, and save schema.
// Old save compatibility is intentionally not preserved; current encode/decode only need
// to agree within the same app build.
(function (global) {
const FIELD_IDS = Object.freeze(["garden", "cage", "park"]);
const GROUND_IDS = Object.freeze(["soil", "dirt", "concrete", "blanket", "foot_massage", "ice", "laboratory"]);
const WEATHER_IDS = Object.freeze(["sunny", "cloudy", "light_rain"]);
const MOOD_IDS = Object.freeze(["relaxed", "devastation", "crisis", "confusion", "fearful", "disease_spread", "weakened", "breeding", "happy", "overcrowded", "isolated"]);
const STATE_IDS = Object.freeze(["idle", "sleep", "eat", "fight", "panic", "sunbath", "birth_ritual", "build", "social", "flee", "wander", "defeated"]);
const POWER_MODE_IDS = Object.freeze(["", "protein", "niteropu"]);
const SIZE_MODE_IDS = Object.freeze(["", "giant_drug", "dwarf_drug"]);
const LIFE_MODE_IDS = Object.freeze(["", "mercury"]);
const PIN_STATE_IDS = Object.freeze(["loose", "lodged", "falling", "stuck"]);
const STAGE_IDS = Object.freeze(["fresh", "aging", "old", "dry", "decomposing", "fertile_soil"]);
function indexMap(list) {
return Object.freeze(Object.fromEntries(list.map((id, index) => [id, index])));
}
const FIELD_INDEX = indexMap(FIELD_IDS);
const GROUND_INDEX = indexMap(GROUND_IDS);
const WEATHER_INDEX = indexMap(WEATHER_IDS);
const MOOD_INDEX = indexMap(MOOD_IDS);
function enumIndex(list, value, fallback = 0) {
const i = list.indexOf(String(value ?? ""));
return i >= 0 ? i : fallback;
}
function enumValue(list, index, fallback = "") {
const i = Number(index) | 0;
return list[i] ?? fallback ?? list[0] ?? "";
}
function canonicalFrom(list, value, fallback) {
const id = String(value || fallback || list[0] || "");
return list.includes(id) ? id : (fallback || list[0] || "");
}
function canonicalFieldId(value = "garden") { return canonicalFrom(FIELD_IDS, value, "garden"); }
function canonicalGroundId(value = "soil") { return canonicalFrom(GROUND_IDS, value, "soil"); }
function canonicalWeatherId(value = "sunny") { return canonicalFrom(WEATHER_IDS, value, "sunny"); }
function canonicalMoodId(value = "relaxed") { return canonicalFrom(MOOD_IDS, value, "relaxed"); }
global.TarinaiDomainIds = Object.freeze({
FIELD_IDS,
GROUND_IDS,
WEATHER_IDS,
MOOD_IDS,
STATE_IDS,
POWER_MODE_IDS,
SIZE_MODE_IDS,
LIFE_MODE_IDS,
PIN_STATE_IDS,
STAGE_IDS,
FIELD_INDEX,
GROUND_INDEX,
WEATHER_INDEX,
MOOD_INDEX,
enumIndex,
enumValue,
canonicalFieldId,
canonicalGroundId,
canonicalWeatherId,
canonicalMoodId,
});
})(typeof window !== "undefined" ? window : globalThis);