initial commit
This commit is contained in:
@@ -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 обнуляет буферы и таймеры конвертеров, настройки узлов/связей не трогает.
|
||||
Reference in New Issue
Block a user