duu
This commit is contained in:
parent
88f618cadf
commit
8f9f5b5100
108 changed files with 2139 additions and 1500 deletions
70
js/domain_ids.js
Normal file
70
js/domain_ids.js
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
"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"]);
|
||||
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"]);
|
||||
|
||||
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);
|
||||
Loading…
Add table
Add a link
Reference in a new issue