tarinai/js/ui.js
2026-07-10 16:40:06 +09:00

128 lines
5.2 KiB
JavaScript

"use strict";
const canvas = document.getElementById("gameCanvas");
const ctx = canvas.getContext("2d");
const ui = {
pauseBtn: document.getElementById("pauseBtn"),
speedBtn: document.getElementById("speedBtn"),
ecologyBtn: document.getElementById("ecologyBtn"),
soundBtn: document.getElementById("soundBtn"),
soundMenu: document.getElementById("soundMenu"),
soundPanel: document.getElementById("soundPanel"),
soundMasterToggle: document.getElementById("soundMasterToggle"),
creditsBtn: document.getElementById("creditsBtn"),
saveBtn: document.getElementById("saveBtn"),
visualSettingsBtn: document.getElementById("visualSettingsBtn"),
resetBtn: document.getElementById("resetBtn"),
visualSettingsDialog: document.getElementById("visualSettingsDialog"),
visualSettingsCloseBtn: document.getElementById("visualSettingsCloseBtn"),
creditsDialog: document.getElementById("creditsDialog"),
creditsCloseBtn: document.getElementById("creditsCloseBtn"),
panel: document.querySelector(".panel"),
panelQuickTabs: document.getElementById("panelQuickTabs"),
toolPalette: document.getElementById("toolPalette"),
toolCard: document.getElementById("toolCard"),
selectedCard: document.getElementById("selectedCard"),
selectedCloseBtn: document.getElementById("selectedCloseBtn"),
colonyChartTabs: document.getElementById("colonyChartTabs"),
selectedInfo: document.getElementById("selectedInfo"),
log: document.getElementById("log"),
logPushControls: document.getElementById("logPushControls"),
logPushEnabled: document.getElementById("logPushEnabled"),
logPushOverlay: document.getElementById("logPushOverlay"),
mobileModeControls: document.getElementById("mobileModeControls"),
mobileRotateControls: document.getElementById("mobileRotateControls"),
backToGameBtn: document.getElementById("backToGameBtn"),
soundCategoryControls: document.getElementById("soundPanel"),
toast: document.getElementById("toast"),
statPop: document.getElementById("statPop"),
statSick: document.getElementById("statSick"),
statJuvenile: document.getElementById("statJuvenile"),
statElder: document.getElementById("statElder"),
statDead: document.getElementById("statDead"),
statColonyMood: document.getElementById("statColonyMood"),
temperatureValue: document.getElementById("temperatureValue"),
temperatureSlider: document.getElementById("temperatureSlider"),
temperatureAutoToggle: document.getElementById("temperatureAutoToggle"),
tarinaiPopulationLimitSlider: document.getElementById("tarinaiPopulationLimitSlider"),
tarinaiPopulationLimitInput: document.getElementById("tarinaiPopulationLimitInput"),
objectLimitSlider: document.getElementById("objectLimitSlider"),
objectLimitInput: document.getElementById("objectLimitInput"),
colonyLimitStatus: document.getElementById("colonyLimitStatus"),
statGroundType: document.getElementById("statGroundType"),
groundTypeBtn: document.getElementById("groundTypeBtn"),
colonyChart: document.getElementById("colonyChart"),
colonyChartLegend: document.getElementById("colonyChartLegend"),
archiveContent: document.getElementById("archiveContent"),
archiveUpdateToggleBtn: document.getElementById("archiveUpdateToggleBtn"),
archiveResetBtn: document.getElementById("archiveResetBtn"),
archiveResetDialog: document.getElementById("archiveResetDialog"),
archiveResetCancelBtn: document.getElementById("archiveResetCancelBtn"),
archiveResetConfirmBtn: document.getElementById("archiveResetConfirmBtn"),
fieldDialog: document.getElementById("fieldDialog"),
fieldCancelBtn: document.getElementById("fieldCancelBtn"),
fieldConfirmBtn: document.getElementById("fieldConfirmBtn"),
ecologyDialog: document.getElementById("ecologyDialog"),
ecologyGrid: document.getElementById("ecologyGrid"),
ecologyCloseBtn: document.getElementById("ecologyCloseBtn"),
};
const uiCache = {
stats: {},
selectedSnapshot: "",
selectedEmpty: false,
showSelectedEmpty: false,
selectedCollapsedCategories: new Set(),
logPushEnabled: false,
logPushKinds: new Set(["death", "accident", "birth"]),
archiveUpdateEnabled: false,
resetFieldType: "garden",
resetPreset: "default",
toolButtons: [],
archiveVersion: "",
archiveFamilyVersion: null,
archiveHtmlCache: new Map(),
archiveRenderTimer: 0,
archiveRenderForce: false,
archiveRenderRunning: false,
archiveScheduled: false,
archivePendingOffscreen: false,
archivePendingDirtyAfterRun: false,
archiveLastHiddenCheckAt: -Infinity,
archiveLastRenderedAt: 0,
deferArchiveUntil: 0,
chartHistory: [],
chartBucketStart: -Infinity,
chartBucketEnd: -Infinity,
chartBucketAccum: null,
chartBirthEventSeen: null,
chartDeathEventSeen: null,
lastChartDraw: "",
chartMode: "population",
chartHiddenSeries: new Set(),
canvasDpr: 0,
panning: false,
panLastX: 0,
panLastY: 0,
panMoved: false,
grabbing: false,
grabTarget: null,
grabKind: "",
grabMoved: false,
grabStartX: 0,
grabStartY: 0,
grabLastWorldX: 0,
grabLastWorldY: 0,
grabLastSpatialAt: 0,
mobileInputMode: window.TarinaiInputMode.currentMode || "auto",
touchMode: "",
touchMoved: false,
touchStartX: 0,
touchStartY: 0,
touchLastX: 0,
touchLastY: 0,
pinchStartDistance: 0,
pinchStartZoom: 1,
pinchLastCenterX: 0,
pinchLastCenterY: 0,
};