Обновить clicker.html

This commit is contained in:
2026-06-16 15:24:58 +03:00
parent 6e3ed30c96
commit b086c2b2a1
+17 -39
View File
@@ -100,18 +100,11 @@
@media (max-width: 768px) {
.game-container { grid-template-columns: 1fr; }
}
/* Статус API */
.api-status {
position: fixed;
top: 10px;
left: 10px;
padding: 8px 16px;
border-radius: 20px;
font-size: 12px;
background: rgba(0, 0, 0, 0.7);
color: #aaa;
z-index: 1000;
position: fixed; top: 10px; left: 10px;
padding: 8px 16px; border-radius: 20px;
font-size: 12px; background: rgba(0, 0, 0, 0.7);
color: #aaa; z-index: 1000;
}
.api-status.connected { color: #4caf50; }
.api-status.error { color: #f44336; }
@@ -139,8 +132,11 @@
<script>
// ═══════════════════════════════════════════════════════════
// СОСТОЯНИЕ ИГРЫ
// ══════════════════════════════════════════════════════════
// КОНФИГУРАЦИЯ
// ══════════════════════════════════════════════════════════
const MY_SAVE = 'main_save';
const TABLE_NAME = 'game_save';
let gameState = {
score: 0,
totalClicks: 0,
@@ -173,10 +169,9 @@
};
// ═══════════════════════════════════════════════════════════
// API КЛИЕНТ (через bridge в родителе)
// API КЛИЕНТ
// ═══════════════════════════════════════════════════════════
let api = null;
const TABLE_NAME = 'game_save';
const statusEl = document.getElementById('apiStatus');
function updateStatus(text, type = '') {
@@ -184,20 +179,17 @@
statusEl.className = 'api-status ' + type;
}
// Ждём готовности API
async function waitForAPI() {
if (window.gameApi) {
api = window.gameApi;
updateStatus('✓ API подключён', 'connected');
return true;
}
return new Promise((resolve) => {
const timeout = setTimeout(() => {
updateStatus(' API недоступен, используем localStorage', 'error');
updateStatus(' API недоступен, используем localStorage', 'error');
resolve(false);
}, 5000);
window.addEventListener('gameApiReady', () => {
clearTimeout(timeout);
api = window.gameApi;
@@ -207,14 +199,13 @@
});
}
// ══════════════════════════════════════════════════════════
// ══════════════════════════════════════════════════════════
// СОХРАНЕНИЕ / ЗАГРУЗКА
// ═══════════════════════════════════════════════════════════
async function loadGame() {
// Пытаемся загрузить через API
if (api) {
try {
const result = await api.selectData(TABLE_NAME, { key: 'game_state' });
const result = await api.selectData(TABLE_NAME, { key: 'game_state' }, MY_SAVE);
if (result.data && result.data.length > 0) {
const savedState = JSON.parse(result.data[0].value);
gameState = { ...gameState, ...savedState };
@@ -229,8 +220,6 @@
console.warn('API загрузка не удалась:', e.message);
}
}
// Fallback на localStorage
const saved = localStorage.getItem('clickerGame');
if (saved) {
const savedState = JSON.parse(saved);
@@ -243,38 +232,31 @@
}
async function saveGame() {
// Сохраняем через API
if (api) {
try {
// Сначала удаляем старую запись
await api.deleteData(TABLE_NAME, { key: 'game_state' });
// Затем вставляем новую
await api.deleteData(TABLE_NAME, { key: 'game_state' }, MY_SAVE);
await api.insertData(TABLE_NAME, {
key: 'game_state',
value: JSON.stringify(gameState),
updated_at: new Date().toISOString()
});
}, MY_SAVE);
return;
} catch (e) {
console.warn('API сохранение не удалось:', e.message);
}
}
// Fallback
localStorage.setItem('clickerGame', JSON.stringify(gameState));
}
async function resetGame() {
if (!confirm('Сбросить весь прогресс?')) return;
if (api) {
try {
await api.deleteData(TABLE_NAME, { key: 'game_state' });
await api.deleteData(TABLE_NAME, { key: 'game_state' }, MY_SAVE);
} catch (e) {
console.warn('API удаление не удалось:', e.message);
}
}
localStorage.removeItem('clickerGame');
location.reload();
}
@@ -369,24 +351,20 @@
// ИНИЦИАЛИЗАЦИЯ
// ═══════════════════════════════════════════════════════════
(async () => {
// Ждём API
await waitForAPI();
// Создаём таблицу при первом запуске
if (api) {
try {
await api.createTable(TABLE_NAME, {
'key': 'TEXT',
'value': 'TEXT',
'updated_at': 'TEXT'
}, 'Таблица сохранений игры');
}, MY_SAVE, 'Таблица сохранений кликера');
} catch (e) {
// Таблица уже существует — это нормально
console.log('Таблица уже существует или:', e.message);
}
}
// Загружаем игру
await loadGame();
updateUI();