Some checks failed
Build and Publish Mana Loop Docker Image / build-and-publish (push) Has been cancelled
Major changes: - Created docs/skills.md with comprehensive skill system documentation - Rewrote skill-evolution.ts with new upgrade tree structure: - Upgrades organized in branching paths with prerequisites - Each choice can lead to upgraded versions at future milestones - Support for upgrade children and requirement chains - Added getBaseSkillId and generateTierSkillDef helper functions - Fixed getFloorElement to use FLOOR_ELEM_CYCLE.length - Updated test files to match current skill definitions - Removed tests for non-existent skills Skill system now supports: - Levels 1-10 for most skills, level 5 caps for specialized, level 1 for research - Tier up system: Tier N Level 1 = Tier N-1 Level 10 in power - Milestone upgrades at levels 5 and 10 with branching upgrade trees - Attunement requirements for skill access and tier up - Study costs and time for leveling
75 lines
1.8 KiB
TypeScript
Executable File
75 lines
1.8 KiB
TypeScript
Executable File
// ─── UI Store ────────────────────────────────────────────────────────────────
|
|
// Handles logs, pause state, and UI-specific state
|
|
|
|
import { create } from 'zustand';
|
|
|
|
export interface LogEntry {
|
|
message: string;
|
|
timestamp: number;
|
|
}
|
|
|
|
export interface UIState {
|
|
logs: string[];
|
|
paused: boolean;
|
|
gameOver: boolean;
|
|
victory: boolean;
|
|
|
|
// Actions
|
|
addLog: (message: string) => void;
|
|
clearLogs: () => void;
|
|
togglePause: () => void;
|
|
setPaused: (paused: boolean) => void;
|
|
setGameOver: (gameOver: boolean, victory?: boolean) => void;
|
|
reset: () => void;
|
|
resetUI: () => void;
|
|
}
|
|
|
|
const MAX_LOGS = 50;
|
|
|
|
export const useUIStore = create<UIState>((set) => ({
|
|
logs: ['✨ The loop begins. You start with Mana Bolt. Gather your strength, mage.'],
|
|
paused: false,
|
|
gameOver: false,
|
|
victory: false,
|
|
|
|
addLog: (message: string) => {
|
|
set((state) => ({
|
|
logs: [message, ...state.logs.slice(0, MAX_LOGS - 1)],
|
|
}));
|
|
},
|
|
|
|
clearLogs: () => {
|
|
set({ logs: [] });
|
|
},
|
|
|
|
togglePause: () => {
|
|
set((state) => ({ paused: !state.paused }));
|
|
},
|
|
|
|
setPaused: (paused: boolean) => {
|
|
set({ paused });
|
|
},
|
|
|
|
setGameOver: (gameOver: boolean, victory: boolean = false) => {
|
|
set({ gameOver, victory });
|
|
},
|
|
|
|
reset: () => {
|
|
set({
|
|
logs: ['✨ The loop begins. You start with Mana Bolt. Gather your strength, mage.'],
|
|
paused: false,
|
|
gameOver: false,
|
|
victory: false,
|
|
});
|
|
},
|
|
|
|
resetUI: () => {
|
|
set({
|
|
logs: ['✨ The loop begins. You start with Mana Bolt. Gather your strength, mage.'],
|
|
paused: false,
|
|
gameOver: false,
|
|
victory: false,
|
|
});
|
|
},
|
|
}));
|