JAQUIN_C vor 1 Monat
Ursprung
Commit
8e210f0236

+ 2 - 1
src/engine/ClassicView.tsx

@@ -1,6 +1,7 @@
 
 import styles from './SimulationDashboard.module.css';
 import Icon from '../assets/icon';
+import type { InserterData, MachineData } from './FactorioSimulationDashBoard';
 
 const INSERTER_STATES = [
   { label: 'IDLE', color: '#475569' },
@@ -10,7 +11,7 @@ const INSERTER_STATES = [
   { label: 'SWING_BACK', color: '#64748b' }
 ];
 
-export default function ClassicView({ machines, inserters }: { machines: any[], inserters: any[] }) {
+export default function ClassicView({ machines, inserters }: { machines: MachineData[], inserters: InserterData[] }) {
   return (
     <div className={styles.grid}>
       <div className={styles.panel}>

+ 33 - 1
src/engine/FactorioSimulationDashBoard.tsx

@@ -5,6 +5,38 @@ import GraphView from './GraphView';
 import TimelineView from './TimelineView';
 import type { FactorioEngineOrchestrator } from './simulator';
 
+export interface MachineData {
+  recipe: { name: string };
+  isCrafting: boolean;
+  craftProgress: number;
+  inputBuffer: Record<string, number>;
+  outputBuffer: Record<string, number>;
+  outputBlockLimits: Record<string, number>;
+}
+
+export interface InserterData {
+  targetItemId: string;
+  state: number;
+  heldItems: number;
+  swingCount: number;
+  handSize?: number;
+  source: any; // Ideally MachineData | ChestData
+  destination: any; // Ideally MachineData | ChestData
+}
+
+export interface HistorySnapshot {
+  tick: number;
+  machines: {
+    isCrafting: boolean;
+    out: number;
+    in: number;
+  }[];
+  inserters: {
+    state: number;
+    held: number;
+  }[];
+}
+
 export default function FactorioSimulationDashboard({ orchestrator }: { orchestrator: FactorioEngineOrchestrator }) {
   const [viewMode, setViewMode] = useState<'classic' | 'graph' | 'timeline'>('classic');
   const [tick, setTick] = useState(0);
@@ -12,7 +44,7 @@ export default function FactorioSimulationDashboard({ orchestrator }: { orchestr
   const [tps, setTps] = useState(60); 
   const [stepAmount, setStepAmount] = useState(1); 
   
-  const [history, setHistory] = useState<any[]>([]);
+  const [history, setHistory] = useState<HistorySnapshot[]>([]);
   const requestRef = useRef<number>(1);
   const lastUpdateRef = useRef<number>(0);
 

+ 2 - 1
src/engine/GraphView.tsx

@@ -2,6 +2,7 @@ import { useMemo, useEffect, useState } from 'react';
 import ReactFlow, { Background, Controls, MarkerType } from 'reactflow';
 import 'reactflow/dist/style.css';
 import styles from './SimulationDashboard.module.css';
+import type { FactorioEngineOrchestrator } from './simulator';
 
 const MachineNode = ({ data }: any) => {
   const machine = data.instance;
@@ -43,7 +44,7 @@ const ChestNode = ({ data }: any) => (
 
 const nodeTypes = { machine: MachineNode, chest: ChestNode };
 
-export default function GraphView({ orchestrator, tick }: { orchestrator: any, tick: number }) {
+export default function GraphView({ orchestrator, tick }: { orchestrator: FactorioEngineOrchestrator, tick: number }) {
   const { initialNodes, initialEdges } = useMemo(() => {
     const nodes: any[] = [];
     const edges: any[] = [];

+ 2 - 1
src/engine/TimelineView.tsx

@@ -1,9 +1,10 @@
+import type { HistorySnapshot, InserterData, MachineData } from './FactorioSimulationDashBoard';
 import styles from './SimulationDashboard.module.css';
 
 const MAX_HISTORY = 300;
 const INSERTER_STATES = ['#475569', '#d97706', '#2563eb', '#9333ea', '#64748b'];
 
-export default function TimelineView({ history, machines, inserters }: { history: any[], machines: any[], inserters: any[] }) {
+export default function TimelineView({ history, machines, inserters }: { history: HistorySnapshot[], machines: MachineData[], inserters: InserterData[] }) {
   
   return (
     <div className={styles.panel}>