Files
logic-gates/js/state.js
Jose Luis 99f0fefe5c feat: shift+drag to cut wires and create bus connectors
Hold Shift and drag across wires to create a BUS gate that groups
them together. The cut line shows a live preview with wire count.
BUS gates are pass-through (each input maps to its output) and
render as a thin cyan bar with ports on each side.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 04:39:00 +01:00

50 lines
1.2 KiB
JavaScript

// Shared application state — single source of truth
export const state = {
// Circuit
gates: [],
connections: [],
nextId: 1,
// Interaction
placingGate: null,
dragging: null,
dragOffset: { x: 0, y: 0 },
connecting: null,
hoveredGate: null,
hoveredPort: null,
mouseX: 0,
mouseY: 0,
// Camera (pan/zoom)
camX: 0,
camY: 0,
zoom: 1,
// Waveform
waveformVisible: false,
waveformHeight: 220,
recording: true,
waveData: {}, // { gateId: [{ t, value }] }
timeStep: 0,
waveZoom: 20, // pixels per time step
waveScroll: 0,
resizingWave: false,
// Simulation
simRunning: false,
simInterval: null,
simSpeed: 500, // ms per tick
// Puzzle/Components
customComponents: {}, // { id -> component definition }
// Component Editor
componentEditorActive: false,
savedMainCircuit: null, // { gates, connections, nextId } saved before entering editor
componentEditorName: '',
editingComponentId: null, // ID of component being edited (null = new component)
// Bus cutting (shift+drag)
busCutting: null // { startX, startY, endX, endY } in world coords, or null
};