initial commit

This commit is contained in:
azykov@mail.ru
2026-08-31 20:54:53 +03:00
commit f76370151e
27 changed files with 3473 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
# Граф ресурсов — тиковая симуляция (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 обнуляет буферы и таймеры конвертеров, настройки узлов/связей не трогает.