44 lines
2.2 KiB
Markdown
44 lines
2.2 KiB
Markdown
# Граф ресурсов — тиковая симуляция (Vite + React + TypeScript)
|
|
|
|
## Запуск
|
|
|
|
```bash
|
|
npm install
|
|
npm run dev
|
|
```
|
|
|
|
Откроется адрес вида `http://localhost:5173`.
|
|
|
|
## Сборка
|
|
|
|
```bash
|
|
npm run build # tsc -b && vite build -> dist/
|
|
npm run preview # локальный просмотр собранного dist/
|
|
```
|
|
|
|
## Структура
|
|
|
|
- `src/engine.ts` — ядро симуляции: типы (`SimNode`, `SimEdge`, `Behavior`,
|
|
`Topology`, `Buffers`), функция `tick()` (один детерминированный тик) и
|
|
`resetBuffers()`. Модуль не зависит от React/DOM — логика переносима на
|
|
другой стек (Rust/C#/GDScript) по этой же спецификации.
|
|
- `src/storage.ts` — чтение/запись localStorage (`incsim.topology.v1`,
|
|
`incsim.buffers.v1`, `incsim.tickcount.v1`).
|
|
- `src/App.tsx` — состояние приложения (topology/buffers/tickCount/selected),
|
|
все обработчики мутаций, эффекты персистентности.
|
|
- `src/components/` — `Topbar`, `WorldCanvas` (холст с узлами и SVG-связями),
|
|
`NodeCard` (перетаскиваемая карточка узла), `EdgeLines` (SVG-стрелки),
|
|
`Sidebar`, `NodeEditor`, `EdgeEditor`, `RecipeEditor`.
|
|
|
|
## Модель
|
|
|
|
- **Storage** — пассивный буфер с ёмкостью.
|
|
- **Converter** — единственный активный узел: раз в `period` тиков атомарно
|
|
списывает `inputs` и начисляет `outputs` в собственном буфере.
|
|
`source`/`consumer` — его частные случаи с пустым списком входов/выходов.
|
|
- **Edge** — перенос ресурса между буферами узлов; конкуренция при
|
|
fan-in/fan-out разрешается по `priority` (выше — раньше), порядок
|
|
обработки узлов/рёбер фиксирован — тик полностью детерминирован.
|
|
|
|
Reset обнуляет буферы и таймеры конвертеров, настройки узлов/связей не трогает.
|