Client/client/src/views/GameInterface/GameInterface.jsx
2026-04-04 00:09:35 +03:00

99 lines
2.7 KiB
JavaScript

import React, { useEffect, useState } from "react";
import "./GameInterface.css";
import GameHeader from "./components/GameHeader";
import Navigation from "./components/Navigation";
import Console from "../../components/Console/Console.jsx";
import DashboardTab from "./tabs/DashboardTab";
import InventoryTab from "./tabs/InventoryTab";
import DungeonsTab from "./tabs/DungeonsTab";
import SkillsTab from "./tabs/SkillsTab";
import BaseTab from "./tabs/BaseTab";
import QuestsTab from "./tabs/QuestsTab";
import ShopTab from "./tabs/ShopTab";
import CraftingTab from "./tabs/CraftingTab";
import ChatTab from "./tabs/ChatTab";
import Notification from "./tabs/NotificationTab.jsx";
import DungeonScreen from "./components/DungeonScreen";
import { useSocket } from "../../hooks/useSocket.js";
import DatapackTab from "./tabs/DatapackTab.jsx";
const GameInterface = ({ onExit }) => {
const [activeTab, setActiveTab] = useState("dashboard");
const [activeDungeonSession, setActiveDungeonSession] = useState(null);
const { socket } = useSocket();
useEffect(() => {
if (!socket) return;
socket.on("dungeon:started", (sessionData) => {
setActiveDungeonSession(sessionData);
});
socket.on("dungeon:completed", (results) => {
setActiveDungeonSession(null);
});
socket.on("error", (err) => {
alert(`SYSTEM_ERROR: ${err.message}`);
});
return () => {
socket.off("dungeon:started");
socket.off("dungeon:completed");
socket.off("error");
};
}, [socket]);
const handleStartDungeon = (dungeonId) => {
socket.emit("dungeon:start", { dungeonId });
};
const handleAbortMission = () => {
if (
window.confirm(
"ARE YOU SURE YOU WANT TO ABORT? Energy will not be refunded.",
)
) {
setActiveDungeonSession(null);
}
};
if (activeDungeonSession) {
return (
<DungeonScreen
session={activeDungeonSession}
socket={socket}
onExit={handleAbortMission}
/>
);
}
const tabs = {
dashboard: <DashboardTab />,
dungeons: <DungeonsTab startDungeon={handleStartDungeon} />,
skills: <SkillsTab />,
base: <BaseTab />,
quests: <QuestsTab />,
inventory: <InventoryTab />,
shop: <ShopTab />,
crafting: <CraftingTab />,
datapack: <DatapackTab />,
chat: <ChatTab />,
notifications: <Notification />,
};
return (
<div id="gameInterface" className="game-interface">
<GameHeader onReturn={onExit} />
<Navigation activeTab={activeTab} onTabChange={setActiveTab} />
<main className="main-content">
{tabs[activeTab] || <DashboardTab />}
</main>
<Console />
</div>
);
};
export default GameInterface;