// 神明系統 - 與 API 整合 import { apiService } from './api-service.js' export class TempleSystem { constructor(petSystem, api = apiService) { this.petSystem = petSystem this.api = api this.deities = [] } // 初始化(從 API 載入神明資料) async initialize() { try { this.deities = await this.api.getDeities() console.log(`[TempleSystem] 載入 ${this.deities.length} 位神明`) } catch (error) { console.error('[TempleSystem] 載入神明失敗:', error) // 降級到本地載入 const { DEITIES } = await import('../data/deities.js') this.deities = DEITIES } } // 獲取所有神明 getDeities() { return [...this.deities] } // 獲取當前神明 getCurrentDeity() { const state = this.petSystem.getState() return this.deities.find(d => d.id === state.currentDeityId) || this.deities[0] } // 切換神明 async switchDeity(deityId) { const deity = this.deities.find(d => d.id === deityId) if (!deity) { return { success: false, message: '找不到該神明' } } await this.petSystem.updateState({ currentDeityId: deityId }) return { success: true, deity } } // 祈福(每日上限 3 次) async pray() { const state = this.petSystem.getState() if (state.dailyPrayerCount >= 3) { return { success: false, message: '今日祈福次數已用完' } } try { const result = await this.api.prayToDeity({ deityId: state.currentDeityId, petState: state }) // 更新好感度 const currentFavor = state.deityFavors[state.currentDeityId] || 0 const newFavor = Math.min(100, currentFavor + result.favorIncrease) await this.petSystem.updateState({ deityFavors: { ...state.deityFavors, [state.currentDeityId]: newFavor }, dailyPrayerCount: state.dailyPrayerCount + 1 }) // 獲取神明對話 const deity = this.getCurrentDeity() const dialogue = deity.dialogues[Math.floor(Math.random() * deity.dialogues.length)] return { success: true, favorIncrease: result.favorIncrease, newFavor, dialogue, message: result.message } } catch (error) { console.error('[TempleSystem] 祈福失敗:', error) return { success: false, message: '祈福失敗' } } } // 獲取好感度星級(每 20 點一星) getFavorStars(deityId) { const state = this.petSystem.getState() const favor = state.deityFavors[deityId] || 0 const stars = Math.floor(favor / 20) return '★'.repeat(stars) + '☆'.repeat(5 - stars) } // 抽籤 async drawFortune() { try { const result = await this.api.drawFortune() // 根據籤詩等級應用效果 const { FORTUNE_LOTS } = await import('../data/fortune-lots.js') const lot = FORTUNE_LOTS.find(l => l.grade === result.lot.grade) || FORTUNE_LOTS[0] if (lot.effects?.addBuff) { // 應用 Buff(需要透過 eventSystem) return { success: true, lot: result.lot, buff: lot.effects.addBuff } } return { success: true, lot: result.lot } } catch (error) { console.error('[TempleSystem] 抽籤失敗:', error) return { success: false, message: '抽籤失敗' } } } }