blanchon's picture
Disable Inference
2d0da8c
<script lang="ts">
import { robotManager } from "$lib/elements/robot/RobotManager.svelte.js";
import { onMount, onDestroy } from "svelte";
import InputConnectionModal from "@/components/3d/elements/robot/modal/InputConnectionModal.svelte";
import OutputConnectionModal from "@/components/3d/elements/robot/modal/OutputConnectionModal.svelte";
import ManualControlSheet from "@/components/3d/elements/robot/modal/ManualControlSheet.svelte";
import type { Robot } from "$lib/elements/robot/Robot.svelte.js";
import { generateName } from "$lib/utils/generateName";
import RobotGridItem from "@/components/3d/elements/robot/RobotGridItem.svelte";
import { interactivity } from "@threlte/extras";
interface Props {
workspaceId: string;
}
let { workspaceId }: Props = $props();
let isInputModalOpen = $state(false);
let isOutputModalOpen = $state(false);
let isManualControlSheetOpen = $state(false);
let selectedRobot = $state<Robot | null>(null);
function onInputBoxClick(robot: Robot) {
selectedRobot = robot;
isInputModalOpen = true;
}
function onRobotBoxClick(robot: Robot) {
selectedRobot = robot;
isManualControlSheetOpen = true;
}
function onOutputBoxClick(robot: Robot) {
selectedRobot = robot;
isOutputModalOpen = true;
}
onMount(async () => {
async function createRobot() {
try {
const robotId = generateName();
await robotManager.createSO100Robot(robotId, {
x: 0,
y: 0,
z: 0
});
} catch (error) {
console.error("Failed to create robot:", error);
}
}
if (robotManager.robots.length === 0) {
await createRobot();
}
});
onDestroy(() => {
// Clean up robots and unlock servos for safety
console.log("🧹 Cleaning up robots and unlocking servos...");
robotManager
.destroy()
.then(() => {
console.log("✅ Cleanup completed successfully");
})
.catch((error) => {
console.error("❌ Error during cleanup:", error);
});
});
interactivity({
filter: (hits, state) => {
return hits.slice(0, 1);
}
});
</script>
{#each robotManager.robots as robot (robot.id)}
<RobotGridItem
{robot}
onCameraMove={() => {}}
{onInputBoxClick}
{onRobotBoxClick}
{onOutputBoxClick}
/>
{/each}
<!-- Connection Modals -->
{#if selectedRobot}
<InputConnectionModal bind:open={isInputModalOpen} robot={selectedRobot} {workspaceId} />
<OutputConnectionModal bind:open={isOutputModalOpen} robot={selectedRobot} {workspaceId} />
<ManualControlSheet bind:open={isManualControlSheetOpen} robot={selectedRobot} {workspaceId} />
{/if}