import { TILE, SEA_GY, BEDROCK_GY, GEN_MARGIN_X, GRAV, GRAV_WATER, MOVE, JUMP, DAY_LEN, SAVE_KEY, MOVE_SEND_INTERVAL, MAX_RAINDROPS, MAX_CHAT_MESSAGES, VOICE_SERVER } from './constants.js'; // Все мутабельные переменные игры в одном объекте состояния export const state = { // Константы (для доступа из модулей) TILE, SEA_GY, BEDROCK_GY, GEN_MARGIN_X, GRAV, GRAV_WATER, MOVE, JUMP, DAY_LEN, SAVE_KEY, MOVE_SEND_INTERVAL, MAX_RAINDROPS, MAX_CHAT_MESSAGES, VOICE_SERVER, // Камера camX: 0, camY: 0, W: 0, H: 0, dpr: 1, // Canvas/DOM (заполняется в main.js) gameEl: null, canvas: null, ctx: null, lightC: null, lightCtx: null, // День/ночь worldTime: 0, isNightTime: false, dayNightCycle: true, // Мультиплеер isMultiplayer: false, mySocketId: null, socket: null, voiceSocket: null, voicePosT: 0, // Сервер SERVER_URL: '', TELEGRAM_BOT_USERNAME: '', TELEGRAM_APP_SHORT_NAME: '', // Игрок playerName: null, worldId: null, // Инвентарь/UI selected: "dirt", showFullInventory: false, craftOpen: false, inventoryOpen: false, chatOpen: false, minimapOpen: false, modeIdx: 0, currentFurnaceKey: null, // Мир blocksVersion: 0, worldSeed: Math.floor(Math.random() * 1000000), // Погода weatherType: "clear", isRaining: false, rainIntensity: 0, weatherTimer: 0, weatherChangeInterval: 60 + Math.random() * 120, snowflakes: [], lightningFlash: 0, lightningTimer: 0, // Мобы/спавн spawnT: 0, // Цикл last: 0, prevJump: false, // Сеть — throttle отправки позиции lastMoveSendTime: 0, lastSentX: 0, lastSentY: 0, // Mining progress mining: { gx: null, gy: null, progress: 0, hardness: 0 }, // Trade/Market myTgId: null, tradePanel: null, tradeContent: null, marketPanel: null, marketContent: null, // DOM-ссылки (заполняются в main.js) hpEl: null, foodEl: null, sxEl: null, syEl: null, todEl: null, worldIdEl: null, playerCountEl: null, deathEl: null, hotbarEl: null, craftPanel: null, recipesEl: null, inventoryPanel: null, inventoryGrid: null, multiplayerStatus: null, tempEl: null, // Игрок player: { x: 6 * TILE, y: 0 * TILE, w: 34, h: 34, vx: 0, vy: 0, grounded: false, inWater: false, headInWater: false, hp: 100, hunger: 100, o2: 100, invuln: 0, fallStartY: 0, lastStepTime: 0, sleeping: false, inBoat: false, armor: 0, equippedArmor: null, temperature: 15, slowTimer: 0 }, // Точка спавна spawnPoint: { x: 6 * TILE, y: 0 * TILE }, // Инвентарь inv: { dirt: 6, stone: 0, sand: 0, gravel: 0, clay: 0, wood: 0, planks: 0, ladder: 0, leaves: 0, coal: 0, copper_ore: 0, iron_ore: 0, gold_ore: 0, diamond_ore: 0, brick: 0, glass: 0, tnt: 1, campfire: 0, torch: 0, meat: 0, cooked: 0, arrow: 0, wood_pickaxe: 0, stone_pickaxe: 0, iron_pickaxe: 0, wood_sword: 0, stone_sword: 0, iron_sword: 0, wood_axe: 0, stone_axe: 0, iron_axe: 0, wood_shovel: 0, stone_shovel: 0, iron_shovel: 0, iron_armor: 0, gold_armor: 0, bow: 0, furnace: 0, bed: 0, boat: 0, iron_ingot: 0, gold_ingot: 0, copper_ingot: 0, cobblestone: 0, // New items chicken_meat: 0, feather: 0, bone: 0, gunpowder: 0, wheat: 0, bread: 0, carrot: 0, potato: 0, baked_potato: 0, mushroom_stew: 0, scorpion_stinger: 0, polar_fur: 0, slime_ball: 0, eagle_feather: 0, snow: 0, ice: 0, cactus: 0, mushroom: 0, moss: 0, farmland: 0, spruce_leaves: 0, dead_bush: 0, swamp_water: 0, wheat_seeds: 0, wheat_stage0: 0, carrot_stage0: 0, potato_stage0: 0 }, // Лодка boat: { x: 0, y: 0, w: 34, h: 34, vx: 0, vy: 0, active: false, inWater: false }, // Ввод inp: { up: false, down: false, left: false, right: false, jump: false, mine: false, build: false, bow: false, l: false, r: false, j: false, s: false }, // Мышь mouse: { x: 0, y: 0 }, // Другие игроки (MP) otherPlayers: new Map(), // Серверные мобы (MP) serverMobs: new Map(), // Мобы mobs: [], // Снаряды projectiles: [], // Отслеживание изменений мира placedBlocks: [], removedBlocks: [], // Серверные изменения serverOverrides: new Map(), // Чат chatMessages: [], // Погода — капли raindrops: [], // Облака clouds: Array.from({ length: 10 }, () => ({ x: Math.random() * 2000, y: -200 - Math.random() * 260, w: 80 + Math.random() * 120, s: 12 + Math.random() * 20 })), // Частицы parts: [], // Активный TNT activeTNT: new Set(), // Прочность инструментов toolDurability: new Map(), protections: new Map(), // Последние выбранные предметы recentItems: [], // Активные печи activeFurnaces: new Map(), cropTimers: new Map(), // Сгенерированные колонны generated: new Set(), // Изображение героя heroImg: new Image(), // Сетка мира grid: new Map(), blocks: [], // In-memory save fallback inMemorySave: null, };