83 lines
4.7 KiB
JavaScript
83 lines
4.7 KiB
JavaScript
"use strict";
|
|
|
|
const GROUND_TYPE_ORDER = window.TarinaiDomainIds.GROUND_IDS;
|
|
const GROUND_TYPES = Object.freeze({
|
|
// \u30c7\u30d5\u30a9\u30eb\u30c8\u5730\u9762ID\u3002\u8868\u793a\u540d\u306f\u300c\u5730\u9762\u300d\u3002
|
|
soil: Object.freeze({ id: "soil", label: "\u7802", description: "\u666e\u901a\u306e\u7802\u5730\u3002", stressMultiplier: 1.0, grassMultiplier: 1.0, grassGrowthMultiplier: 1.0 }),
|
|
dirt: Object.freeze({ id: "dirt", label: "\u571f", description: "\u8349\u304c\u3088\u304f\u80b2\u3064\u5730\u9762\u3002", stressMultiplier: 1.0, grassMultiplier: 1.75, grassGrowthMultiplier: 2.45 }),
|
|
concrete: Object.freeze({ id: "concrete", label: "\u30b3\u30f3\u30af\u30ea\u30fc\u30c8", description: "\u8349\u304c\u751f\u3048\u306a\u3044", stressMultiplier: 1.0, grassMultiplier: 0.0, grassGrowthMultiplier: 0.0, grassLimit: 0 }),
|
|
blanket: Object.freeze({ id: "blanket", label: "\u3075\u308f\u3075\u308f\u6bdb\u5e03", description: "\u30b9\u30c8\u30ec\u30b9\u304c\u5897\u3048\u306b\u304f\u3044\u3002\u8349\u306f\u751f\u3048\u306a\u3044", stressMultiplier: 0.5, grassMultiplier: 0.0, grassGrowthMultiplier: 0.0, grassLimit: 0 }),
|
|
foot_massage: Object.freeze({ id: "foot_massage", label: "\u8db3\u3064\u307c", description: "\u9752\u3044\u307e\u3060\u3089\u5730\u9762\u3002\u30b9\u30c8\u30ec\u30b9\u304c\u5897\u3048\u3084\u3059\u3044", stressMultiplier: 1.5, grassMultiplier: 1.0, grassGrowthMultiplier: 1.0 }),
|
|
ice: Object.freeze({ id: "ice", label: "\u6c37", description: "\u3064\u308b\u3064\u308b\u6ed1\u308b\u3002\u8349\u306f\u751f\u3048\u306b\u304f\u3044", stressMultiplier: 1.1, grassMultiplier: 0.15, grassGrowthMultiplier: 0.35 }),
|
|
laboratory: Object.freeze({ id: "laboratory", label: "\u5b9f\u9a13\u5ba4", description: "\u5e38\u306b\u6674\u308c\u3002\u8349\u306f\u751f\u3048\u305a\u3001\u305a\u3093\u3061\u306f\u3059\u3050\u6d88\u3048\u308b\u3002", stressMultiplier: 1.0, grassMultiplier: 0.0, grassGrowthMultiplier: 0.0, grassLimit: 0, fixedWeather: "sunny", zunchiStageMultiplier: 8.0, zunchiDecayMultiplier: 520.0 }),
|
|
});
|
|
|
|
function groundDefinition(id = "soil") {
|
|
return GROUND_TYPES[id] || GROUND_TYPES.soil;
|
|
}
|
|
|
|
function groundExists(id = "soil") {
|
|
return Boolean(GROUND_TYPES[id]);
|
|
}
|
|
|
|
function groundLabel(id = "soil") {
|
|
return groundDefinition(id).label || "\u5730\u9762";
|
|
}
|
|
|
|
function normalizedGroundStressMultiplier(id = "soil") {
|
|
const mult = Number(groundDefinition(id).stressMultiplier);
|
|
return Number.isFinite(mult) && mult > 0 ? mult : 1;
|
|
}
|
|
|
|
function normalizedGroundGrassMultiplier(id = "soil") {
|
|
const mult = Number(groundDefinition(id).grassMultiplier);
|
|
return Number.isFinite(mult) && mult >= 0 ? mult : 1;
|
|
}
|
|
|
|
function grassGrowthMulForGround(id = "soil") {
|
|
const def = groundDefinition(id);
|
|
const mult = Number(def.grassGrowthMultiplier ?? def.grassMultiplier);
|
|
return Number.isFinite(mult) && mult >= 0 ? mult : 1;
|
|
}
|
|
|
|
function groundLimitForField(fieldType = "garden") {
|
|
const config = typeof CONFIG !== "undefined" ? CONFIG : null;
|
|
const byField = config?.grassLimitsByField || { cage: 19, garden: 99, park: 299 };
|
|
const fieldLimit = byField[fieldType || "garden"];
|
|
return Number(Number.isFinite(fieldLimit) ? fieldLimit : (config?.grassLimit ?? 99));
|
|
}
|
|
|
|
function groundGrassLimit(id = "soil", fieldType = "garden") {
|
|
const def = groundDefinition(id);
|
|
if (Number.isFinite(def.grassLimit)) return Math.max(0, Math.floor(Number(def.grassLimit)));
|
|
const mult = normalizedGroundGrassMultiplier(def.id);
|
|
if (mult <= 0) return 0;
|
|
const limit = groundLimitForField(fieldType) * mult;
|
|
return Number.isFinite(limit) && limit >= 0 ? Math.floor(limit) : Infinity;
|
|
}
|
|
|
|
function nextGroundTypeId(current = "soil") {
|
|
const index = GROUND_TYPE_ORDER.indexOf(current || "soil");
|
|
return GROUND_TYPE_ORDER[(index + 1 + GROUND_TYPE_ORDER.length) % GROUND_TYPE_ORDER.length] || "soil";
|
|
}
|
|
|
|
function groundTooltipText(id = "soil") {
|
|
const def = groundDefinition(id);
|
|
const desc = def.description || "\u30af\u30ea\u30c3\u30af\u3067\u5207\u308a\u66ff\u3048";
|
|
return `${def.label || "\u5730\u9762"}\n${desc}`;
|
|
}
|
|
|
|
window.TarinaiGround = Object.freeze({
|
|
definition: groundDefinition,
|
|
exists: groundExists,
|
|
label: groundLabel,
|
|
stressMultiplier: normalizedGroundStressMultiplier,
|
|
grassMultiplier: normalizedGroundGrassMultiplier,
|
|
grassGrowthMultiplier: grassGrowthMulForGround,
|
|
grassLimit: groundGrassLimit,
|
|
nextId: nextGroundTypeId,
|
|
tooltipText: groundTooltipText,
|
|
fixedWeather(id = "soil") { return groundDefinition(id).fixedWeather || ""; },
|
|
zunchiStageMultiplier(id = "soil") { const v = Number(groundDefinition(id).zunchiStageMultiplier); return Number.isFinite(v) && v > 0 ? v : 1; },
|
|
zunchiDecayMultiplier(id = "soil") { const v = Number(groundDefinition(id).zunchiDecayMultiplier); return Number.isFinite(v) && v > 0 ? v : 1; },
|
|
});
|