feat: restaure l'éditeur map et ajoute les personnages
🔍 Lint / 🪄 Check lint (pull_request) Has been cancelled
🔍 Lint / 🎨 Check format (pull_request) Has been cancelled
🔍 Lint / 🔎 Typecheck (pull_request) Has been cancelled
📊 Quality / 🔒 Security Audit (pull_request) Has been cancelled
📊 Quality / 📋 Dependency Freshness (pull_request) Has been cancelled
📊 Quality / 📦 Bundle Size (pull_request) Has been cancelled
🔍 Lint / 🏗 Build (pull_request) Has been cancelled

This commit is contained in:
tom-boullay
2026-05-28 15:49:57 +02:00
parent fcdbf7270c
commit d5675fe82c
21 changed files with 454 additions and 57 deletions
+1 -8
View File
@@ -2,12 +2,5 @@ import editor from "../../../../docs/user/editor.md?raw";
import { DocsDocument } from "@/components/docs/DocsDocument";
export function DocsEditorPage(): React.JSX.Element {
return (
<DocsDocument
content={editor}
frContent={editor}
meta="14"
title="Editor User Guide"
/>
);
return <DocsDocument content={editor} meta="14" title="Editor User Guide" />;
}
+1 -8
View File
@@ -2,12 +2,5 @@ import repairGame from "../../../../docs/technical/repair-game.md?raw";
import { DocsDocument } from "@/components/docs/DocsDocument";
export function DocsRepairGamePage(): React.JSX.Element {
return (
<DocsDocument
content={repairGame}
frContent={repairGame}
meta="04"
title="Repair Game"
/>
);
return <DocsDocument content={repairGame} meta="04" title="Repair Game" />;
}
+33
View File
@@ -323,6 +323,7 @@ export function EditorPage(): React.JSX.Element {
const [newNodeName, setNewNodeName] = useState(DEFAULT_NEW_NODE_NAME);
const [lockTerrainSelection, setLockTerrainSelection] = useState(true);
const [resetCameraRequest, setResetCameraRequest] = useState(0);
const [snapAllToTerrainRequest, setSnapAllToTerrainRequest] = useState(0);
const [focusSelectedCameraRequest, setFocusSelectedCameraRequest] =
useState(0);
const [cameraViewMode, setCameraViewMode] = useState<"home" | "object">(
@@ -372,9 +373,14 @@ export function EditorPage(): React.JSX.Element {
const handleSelectNode = useCallback((index: number | null) => {
setSelectedNodeIndex(index);
setSelectedNodeIndexes(index === null ? [] : [index]);
if (index !== null) {
setCameraViewMode("object");
return;
}
setCameraViewMode("home");
setResetCameraRequest((request) => request + 1);
}, []);
const handleToggleNodeSelection = useCallback((index: number) => {
@@ -387,6 +393,9 @@ export function EditorPage(): React.JSX.Element {
setSelectedNodeIndex(nextIndexes.at(-1) ?? null);
if (nextIndexes.length > 0) {
setCameraViewMode("object");
} else {
setCameraViewMode("home");
setResetCameraRequest((request) => request + 1);
}
return nextIndexes;
@@ -396,6 +405,8 @@ export function EditorPage(): React.JSX.Element {
const handleClearSelection = useCallback(() => {
setSelectedNodeIndex(null);
setSelectedNodeIndexes([]);
setCameraViewMode("home");
setResetCameraRequest((request) => request + 1);
}, []);
const handleSelectionLockToggle = useCallback(() => {
@@ -406,6 +417,25 @@ export function EditorPage(): React.JSX.Element {
setSnapToTerrain((enabled) => !enabled);
}, []);
const handleSnapAllToTerrainRequest = useCallback(() => {
setSnapAllToTerrainRequest((request) => request + 1);
}, []);
const handleSnapAllToTerrain = useCallback(
(mapNodes: MapNode[]) => {
setSceneData((prev) => {
if (!prev) return null;
const nextSceneData = { ...prev, mapNodes };
if (!prev.mapTree) return nextSceneData;
const mapTree = mergeFlatNodeTransformsIntoTree(nextSceneData);
return updateSceneDataTree(nextSceneData, mapTree);
});
},
[setSceneData],
);
const handleNewNodeNameChange = useCallback((value: string) => {
setNewNodeName(value);
}, []);
@@ -710,6 +740,8 @@ export function EditorPage(): React.JSX.Element {
onTransformStart={handleTransformStart}
onTransformEnd={handleTransformEnd}
onNodeTransform={handleNodeTransform}
snapAllToTerrainRequest={snapAllToTerrainRequest}
onSnapAllToTerrain={handleSnapAllToTerrain}
onUndo={handleUndo}
onRedo={handleRedo}
resetCameraRequest={resetCameraRequest}
@@ -748,6 +780,7 @@ export function EditorPage(): React.JSX.Element {
onClearSelection={handleClearSelection}
snapToTerrain={snapToTerrain}
onSnapToTerrainToggle={handleSnapToTerrainToggle}
onSnapAllToTerrain={handleSnapAllToTerrainRequest}
newNodeName={newNodeName}
onNewNodeNameChange={handleNewNodeNameChange}
onAddNode={handleAddNode}