2026-07-05 18:01:36 +09:00
|
|
|
"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"]);
|
|
|
|
|
|
2026-07-29 20:52:11 +09:00
|
|
|
const STATE_IDS = Object.freeze(["idle", "sleep", "eat", "fight", "panic", "sunbath", "birth_ritual", "build", "social", "flee", "wander", "defeated"]);
|
2026-07-05 18:01:36 +09:00
|
|
|
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"]);
|
2026-07-29 20:52:11 +09:00
|
|
|
const STAGE_IDS = Object.freeze(["fresh", "aging", "old", "dry", "decomposing", "fertile_soil"]);
|
2026-07-05 18:01:36 +09:00
|
|
|
|
|
|
|
|
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);
|