@vnejs/docs 0.2.65 → 0.2.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -35
- package/architecture/backends.md +18 -0
- package/architecture/build.md +37 -0
- package/architecture/bundles.md +20 -0
- package/architecture/cli.md +25 -0
- package/architecture/compatibility.md +22 -0
- package/architecture/configs.md +19 -0
- package/architecture/contracts.md +30 -0
- package/architecture/dependencies.md +55 -0
- package/architecture/editor.md +7 -0
- package/architecture/games.md +38 -0
- package/architecture/helpers.md +14 -0
- package/architecture/model.md +43 -0
- package/architecture/modules.md +87 -0
- package/architecture/packages.md +43 -0
- package/architecture/plugins.md +36 -0
- package/architecture/uis.md +23 -0
- package/changelog/0.2.18.md +7 -0
- package/changelog/0.2.19.md +14 -0
- package/changelog/0.2.20.md +10 -0
- package/changelog/0.2.21.md +5 -0
- package/changelog/0.2.22.md +11 -0
- package/changelog/0.2.23.md +4 -0
- package/changelog/0.2.25.md +6 -0
- package/changelog/0.2.26.md +12 -0
- package/changelog/0.2.29.md +10 -0
- package/changelog/0.2.31.md +5 -0
- package/changelog/0.2.32.md +3 -0
- package/changelog/0.2.33.md +5 -0
- package/changelog/0.2.34.md +8 -0
- package/changelog/0.2.35.md +33 -0
- package/changelog/0.2.36.md +10 -0
- package/changelog/0.2.38.md +19 -0
- package/changelog/0.2.39.md +16 -0
- package/changelog/0.2.40.md +9 -0
- package/changelog/0.2.42.md +3 -0
- package/changelog/0.2.43.md +10 -0
- package/changelog/0.2.46.md +3 -0
- package/changelog/0.2.47.md +25 -0
- package/changelog/0.2.49.md +3 -0
- package/changelog/0.2.50.md +6 -0
- package/changelog/0.2.51.md +6 -0
- package/changelog/0.2.52.md +5 -0
- package/changelog/0.2.53.md +12 -0
- package/changelog/0.2.55.md +19 -0
- package/changelog/0.2.56.md +11 -0
- package/changelog/0.2.57.md +7 -0
- package/changelog/0.2.58.md +8 -0
- package/changelog/0.2.59.md +6 -0
- package/changelog/0.2.60.md +5 -0
- package/changelog/0.2.61.md +11 -0
- package/changelog/0.2.62.md +8 -0
- package/changelog/0.2.63.md +4 -0
- package/changelog/0.2.64.md +4 -0
- package/changelog/0.2.65.md +3 -0
- package/changelog/0.2.66.md +5 -0
- package/changelog/README.md +43 -0
- package/manifest.json +66 -5
- package/package.json +6 -4
- package/plugins/ai/ai.md +29 -29
- package/plugins/ai/checkers.md +26 -26
- package/plugins/audio/ambient.md +20 -20
- package/plugins/audio/audio.md +40 -40
- package/plugins/audio/music.md +20 -20
- package/plugins/audio/sound.md +20 -20
- package/plugins/audio/voice.md +23 -23
- package/plugins/canvas/bg.md +44 -44
- package/plugins/canvas/bg.speak.md +34 -34
- package/plugins/canvas/fill.md +33 -33
- package/plugins/canvas/layer.md +35 -35
- package/plugins/canvas/sprite.md +46 -46
- package/plugins/canvas/sprite.speak.md +33 -33
- package/plugins/canvas/text.md +37 -37
- package/plugins/canvas/video.md +37 -37
- package/plugins/canvas.layers/bl.md +33 -33
- package/plugins/canvas.layers/fl.md +33 -33
- package/plugins/canvas.layers/ml.md +33 -33
- package/plugins/canvas.layers/ul.md +32 -32
- package/plugins/canvas.props/animation.md +25 -25
- package/plugins/canvas.props/clip.md +22 -22
- package/plugins/canvas.props/filters.md +20 -20
- package/plugins/canvas.props/mask.md +23 -23
- package/plugins/canvas.props/scale.md +20 -20
- package/plugins/common/grid.md +23 -23
- package/plugins/common/turn.md +18 -18
- package/plugins/controls/controls.md +31 -31
- package/plugins/controls/cursor.md +54 -54
- package/plugins/controls/gamepad.md +56 -56
- package/plugins/controls/keyboard.md +17 -17
- package/plugins/core/components.md +28 -28
- package/plugins/core/interact.md +26 -26
- package/plugins/core/logs.md +28 -28
- package/plugins/core/media.md +38 -38
- package/plugins/core/memory.md +28 -28
- package/plugins/core/platforms.md +19 -19
- package/plugins/core/scenario.md +48 -48
- package/plugins/core/settings.md +24 -24
- package/plugins/core/stack.md +39 -39
- package/plugins/core/state.md +30 -30
- package/plugins/core/storage.md +56 -56
- package/plugins/core/system.md +37 -37
- package/plugins/core/vendors.md +19 -19
- package/plugins/entities/entities.md +16 -16
- package/plugins/entities/wallet.md +27 -27
- package/plugins/font/montserrat.md +16 -16
- package/plugins/game/checkers.md +38 -38
- package/plugins/platform/android.md +17 -17
- package/plugins/platform/electron.md +21 -21
- package/plugins/platform/metric.md +23 -23
- package/plugins/rpg/damage.md +22 -22
- package/plugins/rpg/hit.md +24 -24
- package/plugins/rpg/skills.md +26 -26
- package/plugins/save/auto.md +26 -26
- package/plugins/save/continue.md +23 -23
- package/plugins/save/quick.md +24 -24
- package/plugins/save/save.md +37 -37
- package/plugins/scales/health.md +17 -17
- package/plugins/scales/mana.md +17 -17
- package/plugins/scales/scales.md +31 -31
- package/plugins/scenario/autoread.md +36 -36
- package/plugins/scenario/choose.md +74 -65
- package/plugins/scenario/fastforward.md +46 -46
- package/plugins/scenario/history.md +41 -41
- package/plugins/scenario/pause.md +27 -27
- package/plugins/scenario/point_and_click.md +51 -51
- package/plugins/scenario/qte.md +54 -54
- package/plugins/scenario/random.md +17 -17
- package/plugins/settings/filter.md +19 -19
- package/plugins/settings/potato.md +22 -22
- package/plugins/settings/ratio.md +19 -19
- package/plugins/settings/textsize.md +19 -19
- package/plugins/settings/volume.md +21 -21
- package/plugins/text/inject.md +22 -22
- package/plugins/text/locs.md +36 -36
- package/plugins/text/meet.md +19 -19
- package/plugins/text/smooth.md +33 -33
- package/plugins/text/text.md +76 -69
- package/plugins/text/wall.md +20 -20
- package/plugins/time/date.md +22 -22
- package/plugins/time/time.md +23 -23
- package/plugins/vars/counters.md +28 -28
- package/plugins/vars/flags.md +24 -24
- package/plugins/vars/vars.md +29 -29
- package/plugins/views/achievement.md +44 -44
- package/plugins/views/comment.md +31 -31
- package/plugins/views/controls.hints.md +34 -34
- package/plugins/views/cursor.md +19 -19
- package/plugins/views/fps.md +33 -33
- package/plugins/views/gamepad.debug.md +32 -32
- package/plugins/views/settings.md +39 -39
- package/plugins/views/video.md +37 -37
- package/plugins/views.scenario/choose.md +41 -41
- package/plugins/views.scenario/interface.controls.md +31 -31
- package/plugins/views.scenario/interface.fastforward.md +29 -29
- package/plugins/views.scenario/interface.md +74 -74
- package/plugins/views.scenario/point_and_click.md +39 -39
- package/plugins/views.scenario/qte.md +51 -51
- package/plugins/views.screens/checkers.md +35 -35
- package/plugins/views.screens/confirm.md +35 -35
- package/plugins/views.screens/credits.md +31 -31
- package/plugins/views.screens/disclaimer.md +42 -42
- package/plugins/views.screens/eula.md +37 -37
- package/plugins/views.screens/gallery.full.md +41 -41
- package/plugins/views.screens/gallery.md +75 -75
- package/plugins/views.screens/gamemenu.md +41 -41
- package/plugins/views.screens/history.md +39 -39
- package/plugins/views.screens/intro.md +32 -32
- package/plugins/views.screens/loading.md +30 -30
- package/plugins/views.screens/mainmenu.md +49 -49
- package/plugins/views.screens/mainmenu.socials.md +25 -25
- package/plugins/views.screens/save.md +66 -66
- package/plugins/views.screens/settings.defaults.md +37 -37
- package/plugins/views.screens/settings.md +40 -40
- package/scenario.catalog/README.md +13 -13
- package/scenario.catalog/index.md +35 -35
- package/scenario.catalog/stubs/achievement.md +4 -4
- package/scenario.catalog/stubs/audio.ambient.md +4 -4
- package/scenario.catalog/stubs/audio.music.md +4 -4
- package/scenario.catalog/stubs/audio.sound.md +4 -4
- package/scenario.catalog/stubs/audio.voice.md +4 -4
- package/scenario.catalog/stubs/bl.animation.md +5 -5
- package/scenario.catalog/stubs/bl.bg.md +5 -5
- package/scenario.catalog/stubs/bl.clip.md +5 -5
- package/scenario.catalog/stubs/bl.fill.md +5 -5
- package/scenario.catalog/stubs/bl.filter.md +5 -5
- package/scenario.catalog/stubs/bl.mask.md +5 -5
- package/scenario.catalog/stubs/bl.scale.md +5 -5
- package/scenario.catalog/stubs/bl.sprite.md +5 -5
- package/scenario.catalog/stubs/bl.text.md +5 -5
- package/scenario.catalog/stubs/bl.video.md +5 -5
- package/scenario.catalog/stubs/choose.block.md +7 -7
- package/scenario.catalog/stubs/choose.md +4 -4
- package/scenario.catalog/stubs/choose.option.md +7 -7
- package/scenario.catalog/stubs/comment.md +5 -5
- package/scenario.catalog/stubs/counter.md +5 -5
- package/scenario.catalog/stubs/credits.md +4 -4
- package/scenario.catalog/stubs/date.md +4 -4
- package/scenario.catalog/stubs/disclaimer.md +5 -5
- package/scenario.catalog/stubs/fl.animation.md +5 -5
- package/scenario.catalog/stubs/fl.bg.md +5 -5
- package/scenario.catalog/stubs/fl.clip.md +5 -5
- package/scenario.catalog/stubs/fl.fill.md +5 -5
- package/scenario.catalog/stubs/fl.filter.md +5 -5
- package/scenario.catalog/stubs/fl.mask.md +5 -5
- package/scenario.catalog/stubs/fl.scale.md +5 -5
- package/scenario.catalog/stubs/fl.sprite.md +5 -5
- package/scenario.catalog/stubs/fl.text.md +5 -5
- package/scenario.catalog/stubs/fl.video.md +5 -5
- package/scenario.catalog/stubs/flag.md +13 -13
- package/scenario.catalog/stubs/interface.md +4 -4
- package/scenario.catalog/stubs/intro.md +4 -4
- package/scenario.catalog/stubs/mainmenu.md +4 -4
- package/scenario.catalog/stubs/ml.animation.md +5 -5
- package/scenario.catalog/stubs/ml.bg.md +5 -5
- package/scenario.catalog/stubs/ml.clip.md +5 -5
- package/scenario.catalog/stubs/ml.fill.md +5 -5
- package/scenario.catalog/stubs/ml.filter.md +5 -5
- package/scenario.catalog/stubs/ml.mask.md +5 -5
- package/scenario.catalog/stubs/ml.scale.md +5 -5
- package/scenario.catalog/stubs/ml.sprite.md +5 -5
- package/scenario.catalog/stubs/ml.text.md +5 -5
- package/scenario.catalog/stubs/ml.video.md +5 -5
- package/scenario.catalog/stubs/other.md +6 -6
- package/scenario.catalog/stubs/pause.md +5 -5
- package/scenario.catalog/stubs/point-and-click.block.md +4 -4
- package/scenario.catalog/stubs/point-and-click.md +4 -4
- package/scenario.catalog/stubs/point-and-click.option.md +4 -4
- package/scenario.catalog/stubs/qte.md +4 -4
- package/scenario.catalog/stubs/random.md +4 -4
- package/scenario.catalog/stubs/random.option.md +4 -4
- package/scenario.catalog/stubs/save.auto.md +4 -4
- package/scenario.catalog/stubs/save.md +5 -5
- package/scenario.catalog/stubs/scenario.md +4 -4
- package/scenario.catalog/stubs/settings.defaults.md +4 -4
- package/scenario.catalog/stubs/stack.md +4 -4
- package/scenario.catalog/stubs/text.meet.md +4 -4
- package/scenario.catalog/stubs/text.wall.md +4 -4
- package/scenario.catalog/stubs/time.md +4 -4
- package/scenario.catalog/stubs/ul.animation.md +5 -5
- package/scenario.catalog/stubs/ul.bg.md +5 -5
- package/scenario.catalog/stubs/ul.clip.md +5 -5
- package/scenario.catalog/stubs/ul.fill.md +5 -5
- package/scenario.catalog/stubs/ul.filter.md +5 -5
- package/scenario.catalog/stubs/ul.mask.md +5 -5
- package/scenario.catalog/stubs/ul.scale.md +5 -5
- package/scenario.catalog/stubs/ul.sprite.md +5 -5
- package/scenario.catalog/stubs/ul.text.md +5 -5
- package/scenario.catalog/stubs/video.md +4 -4
- package/scenario.catalog/stubs/wallet.md +4 -4
- package/scenario.guide/README.md +38 -38
- package/scenario.guide/audio.md +11 -11
- package/scenario.guide/canvas.md +23 -23
- package/scenario.guide/choose.md +28 -28
- package/scenario.guide/dialogue.md +23 -23
- package/scenario.guide/flow.md +21 -21
- package/scenario.guide/point-and-click.md +12 -12
- package/scenario.guide/qte-random.md +20 -20
- package/scenario.guide/vars.md +19 -19
- package/scenario.guide/views.md +20 -20
- package/CHANGELOG.md +0 -387
- package/architecture.md +0 -566
package/architecture.md
DELETED
|
@@ -1,566 +0,0 @@
|
|
|
1
|
-
# Архитектура монорепозитория VNEJS
|
|
2
|
-
|
|
3
|
-
Документ описывает **общую модель** монорепозитория: каталоги движка, направление зависимостей и сборку игры. Конкретные пакеты не перечисляются — только принципы и связи.
|
|
4
|
-
|
|
5
|
-
## Суть модели
|
|
6
|
-
|
|
7
|
-
Движок построен на **событийной шине** и **глобальном реестре**:
|
|
8
|
-
|
|
9
|
-
- **`Observer`** — шина событий; модули подписываются (`on`) и публикуют (`emit`) по строковым ключам.
|
|
10
|
-
- **`VNE`** — реестр, заполняемый при загрузке: `CONST`, `EVENTS`, `SETTINGS`, `PARAMS` — по namespace каждого плагина.
|
|
11
|
-
- **`VneCore`** — runtime: собирает зарегистрированные модули, инжектит зависимости и запускает lifecycle (`inject → subscribe → setup → init → start`).
|
|
12
|
-
|
|
13
|
-
Регистрация происходит **side-effect импортами** — при импорте пакета код сразу вызывает `regPlugin` или `regModule`, не дожидаясь явного вызова API.
|
|
14
|
-
|
|
15
|
-
```mermaid
|
|
16
|
-
flowchart LR
|
|
17
|
-
subgraph load ["Загрузка bundles/"]
|
|
18
|
-
I[side-effect import]
|
|
19
|
-
RP[regPlugin / regModule]
|
|
20
|
-
VNE[(VNE + VNE_MODULES)]
|
|
21
|
-
I --> RP --> VNE
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
subgraph runtime ["Runtime"]
|
|
25
|
-
VC[VneCore]
|
|
26
|
-
OBS[Observer]
|
|
27
|
-
VC -->|"создаёт модули из VNE_MODULES"| MOD[Модули]
|
|
28
|
-
MOD -->|"on / emit"| OBS
|
|
29
|
-
MOD -->|"читает"| VNE
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
VNE --> VC
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## Граф зависимостей между каталогами
|
|
38
|
-
|
|
39
|
-
```mermaid
|
|
40
|
-
flowchart TD
|
|
41
|
-
G[games/] --> B[bundles/]
|
|
42
|
-
G --> CLI[cli/]
|
|
43
|
-
G -.->|HTTP| BE[backends/]
|
|
44
|
-
B --> P[plugins/]
|
|
45
|
-
B --> C[compatibility/]
|
|
46
|
-
P --> CT[contracts/]
|
|
47
|
-
C --> CT
|
|
48
|
-
P --> H[helpers/]
|
|
49
|
-
P --> U[uis/]
|
|
50
|
-
P --> ME[modules_extensions/]
|
|
51
|
-
ME --> PKG[packages/]
|
|
52
|
-
CT --> PKG
|
|
53
|
-
CFG[configs/] --> P
|
|
54
|
-
CFG --> PKG
|
|
55
|
-
CFG --> U
|
|
56
|
-
VSC[vs_code_extensions/] -.->|"подсветка .vne"| G
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
**Направление зависимостей:**
|
|
60
|
-
|
|
61
|
-
| От | К | Смысл |
|
|
62
|
-
| ---------------- | ----------------------------------- | -------------------------------------------------------- |
|
|
63
|
-
| `games/` | `bundles/`, `cli/` | Игра не знает про отдельные плагины; сборка через `cli/` |
|
|
64
|
-
| `games/` | `backends/` | HTTP к воркерам токена и меток, без импорта пакетов |
|
|
65
|
-
| `bundles/` | `plugins/`, `compatibility/` | Только импорт нужного набора |
|
|
66
|
-
| `plugins/` | `contracts/` | Реализация следует объявленному API |
|
|
67
|
-
| `plugins/` | `modules_extensions/` → `packages/` | Модули наследуют базы, базы опираются на shared/observer |
|
|
68
|
-
| `compatibility/` | `contracts/` (2+) | Связка по событиям, без импорта реализаций |
|
|
69
|
-
| `plugins/` | `helpers/`, `uis/` | Горизонтальные утилиты и UI |
|
|
70
|
-
| `plugins/` | — другой `plugins/` | **Напрямую не зависит** |
|
|
71
|
-
| `configs/` | пакеты workspace | Общие tsconfig, не runtime |
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
## packages/
|
|
76
|
-
|
|
77
|
-
**Runtime-основа движка** — публикуемые npm-пакеты `@vnejs/*`, на которых держатся `plugins/`, `bundles/` и `VneCore`.
|
|
78
|
-
|
|
79
|
-
### Состав и зависимости
|
|
80
|
-
|
|
81
|
-
```mermaid
|
|
82
|
-
flowchart BT
|
|
83
|
-
CONST["constants"]
|
|
84
|
-
OBS["observer"]
|
|
85
|
-
SH["shared"]
|
|
86
|
-
SS["sources-set"]
|
|
87
|
-
SEM["semaphore"]
|
|
88
|
-
HELP["helpers/"]
|
|
89
|
-
CR["core — VneCore"]
|
|
90
|
-
|
|
91
|
-
CONST --> CR
|
|
92
|
-
OBS --> CR
|
|
93
|
-
SH --> CR
|
|
94
|
-
HELP --> CR
|
|
95
|
-
SS --> CT[contracts/ / plugins/]
|
|
96
|
-
SEM --> PL[plugins/]
|
|
97
|
-
SH --> PL
|
|
98
|
-
OBS --> ME[modules_extensions/]
|
|
99
|
-
SH --> ME
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
| Пакет | Назначение |
|
|
103
|
-
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
|
|
104
|
-
| **`@vnejs/shared`** | Реестр **`VNE`**, массив **`VNE_MODULES`**, **`regPlugin`** / **`regModule`**, типы для module augmentation |
|
|
105
|
-
| **`@vnejs/observer`** | **`Observer`** — pub/sub: `subscribe` / `emit` с `priority` (группы по возрастанию), `emitOne`, `emitReal`, `emitReals` |
|
|
106
|
-
| **`@vnejs/core`** | **`VneCore`**: модули из `VNE_MODULES`, lifecycle, загрузка `mods.json` / `media_info/`, `reset` |
|
|
107
|
-
| **`@vnejs/constants`** | Общие константы-заглушки (`EMPTY_OBJECT`, `EMPTY_ARRAY`) |
|
|
108
|
-
| **`@vnejs/sources-set`** | **`SourcesSet`** — управление множеством «источников» (text и связанная логика) |
|
|
109
|
-
| **`@vnejs/semaphore`** | **`Semaphore`** — очередь задач с весами и ограничением параллелизма |
|
|
110
|
-
| **`@vnejs/test-utils`** | Harness для тестов модулей: observer stubs, `createTestModule`, spies, DOM mocks |
|
|
111
|
-
|
|
112
|
-
### Принципы
|
|
113
|
-
|
|
114
|
-
- **`shared` + `observer`** — фундамент; почти все плагины и модули зависят от них.
|
|
115
|
-
- **`core`** — точка сборки runtime; `games/` создают `new VneCore()` после импорта `bundles/`.
|
|
116
|
-
- **`test-utils`** — только для тестов workspace-пакетов; не часть игрового runtime.
|
|
117
|
-
- Пакеты **не содержат** игровой логики и **не привязаны** к конкретному `bundles/`.
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
## modules_extensions/
|
|
122
|
-
|
|
123
|
-
**Иерархия базовых классов** для модулей внутри `plugins/`.
|
|
124
|
-
|
|
125
|
-
### Иерархия классов
|
|
126
|
-
|
|
127
|
-
```mermaid
|
|
128
|
-
flowchart TD
|
|
129
|
-
M["@vnejs/module<br/>Module"]
|
|
130
|
-
MC["@vnejs/module.core<br/>ModuleCore"]
|
|
131
|
-
MR["@vnejs/module.replace<br/>ModuleReplace"]
|
|
132
|
-
MRE["@vnejs/module.replace.exec<br/>ModuleReplaceExec"]
|
|
133
|
-
MCO["@vnejs/module.components<br/>ModuleController, ModuleView"]
|
|
134
|
-
ML["@vnejs/module.layer<br/>canvas-слои"]
|
|
135
|
-
MA["@vnejs/module.audio"]
|
|
136
|
-
MCA["@vnejs/module.controller.audio"]
|
|
137
|
-
MCT["@vnejs/module.controller.tabs"]
|
|
138
|
-
MCP["@vnejs/module.controller.preload"]
|
|
139
|
-
MCB["@vnejs/module.controller.backgrounds"]
|
|
140
|
-
MCBG["@vnejs/module.controller.bg"]
|
|
141
|
-
MCAC["@vnejs/module.controller.accept"]
|
|
142
|
-
MCIN["@vnejs/module.controller.interact"]
|
|
143
|
-
MCAV["@vnejs/module.controller.arrows.vertical"]
|
|
144
|
-
MCAH["@vnejs/module.controller.arrows.horizontal"]
|
|
145
|
-
MCAG["@vnejs/module.controller.arrows.grid"]
|
|
146
|
-
MCPG["@vnejs/module.controller.pages"]
|
|
147
|
-
MCHS["@vnejs/module.controller.hide.on.state"]
|
|
148
|
-
MCHC["@vnejs/module.controller.hide.on.controls"]
|
|
149
|
-
MSC["@vnejs/module.scales.common"]
|
|
150
|
-
|
|
151
|
-
M --> MC
|
|
152
|
-
MC --> MR
|
|
153
|
-
MC --> MRE
|
|
154
|
-
MC --> MCO
|
|
155
|
-
MC --> MA
|
|
156
|
-
MC --> MCA
|
|
157
|
-
MC --> MCT
|
|
158
|
-
MC --> MCP
|
|
159
|
-
MC --> MCB
|
|
160
|
-
MC --> MCBG
|
|
161
|
-
MC --> MCAC
|
|
162
|
-
MC --> MCIN
|
|
163
|
-
MC --> MCAV
|
|
164
|
-
MC --> MCAH
|
|
165
|
-
MC --> MCAG
|
|
166
|
-
MC --> MCPG
|
|
167
|
-
MC --> MCHS
|
|
168
|
-
MC --> MCHC
|
|
169
|
-
MC --> MSC
|
|
170
|
-
MCO --> ML
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
| Пакет | Назначение |
|
|
174
|
-
| ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
175
|
-
| **`@vnejs/module`** | **`Module`**: `VNE`, `on`/`emit`, `inject`, state, shared, media, lifecycle |
|
|
176
|
-
| **`@vnejs/module.core`** | **`ModuleCore`** — типизированный доступ к **core-контрактам** |
|
|
177
|
-
| **`@vnejs/module.replace`** | **`ModuleReplace`** — последовательная подмена значения поля payload через `REPLACE_KEY` и цепочку handlers |
|
|
178
|
-
| **`@vnejs/module.replace.exec`** | **`ModuleReplaceExec`** — реестр exec-handlers по имени модуля (`EXEC_REG` / `EXEC_GET`) |
|
|
179
|
-
| **`@vnejs/module.components`** | **`ModuleView`**, **`ModuleController`** — React-view, zustand, media, controls. `SHOW`: `GATE` `-200`, `BEFORE` `-100`, `MAIN` `0`, `CONTROLS` `100`, `AFTER` `200`, `CLEANUP` `300`. `HIDE`: `GATE` `-300`, `CONTROLS` `-200`, `BEFORE` `-100`, `MAIN` `0`, `AFTER` `100`, `CLEANUP` `200`. `setShow` эмитит `UPDATE_STATE` `{ isShow }`, затем `updateView(isForce, false)`. `UPDATE_FAST`, `EXTERNAL_UPDATE` (`isShow` → `updateViewFast`) |
|
|
180
|
-
| **`@vnejs/module.layer`** | Canvas layers: controller, image, sprite, text, video, props, view |
|
|
181
|
-
| **`@vnejs/module.audio`** | База для audio-плагинов scenario-слоёв (`music` / `sound` / …) |
|
|
182
|
-
| **`@vnejs/module.controller.audio`** | Overlay-BGM для view-экранов: pause global / play `view` / resume на `SHOW.AFTER` / `HIDE.AFTER` / PRELOAD |
|
|
183
|
-
| **`@vnejs/module.controller.tabs`** | Навигация по вкладкам: TAB_PREV/TAB_NEXT → `TAB_SET`; guard + `applyTab` (`UPDATE_STATE` `{ tab }`) + abstract `onTabSet`; вкладка на `SHOW.BEFORE`, PUSH/POP на `CONTROLS` |
|
|
184
|
-
| **`@vnejs/module.controller.preload`** | Предзагрузка меток и событий на `SHOW.BEFORE` (эмитит PRELOAD) и по PRELOAD. `isShow` из `UPDATE_STATE`; `MEMORY.CLEARED` — только при `isShow`. События задаёт плагин (`EVENT_SHOW` / `EVENT_HIDE` / `EVENT_PRELOAD` / `EVENT_UPDATE_STATE`) |
|
|
185
|
-
| **`@vnejs/module.controller.backgrounds`** | Ротация списка фонов на `SHOW.AFTER` / таймеру / `MEMORY.CLEARED` при `isShow` из `UPDATE_STATE`. Таймер на `HIDE.AFTER` снимается всегда. События и список задаёт плагин |
|
|
186
|
-
| **`@vnejs/module.controller.bg`** | Статичный фон экрана: `SHOW.BEFORE` пишет `bgSrc` через `UPDATE_STATE`; `isShow` приходит из `UPDATE_STATE`. Опционально PRELOAD / start / STATE.CLEAR; `MEMORY.CLEARED` — preload и/или refresh при `isShow` |
|
|
187
|
-
| **`@vnejs/module.controller.accept`** | ACCEPT / INTERACT → событие ACCEPT плагина; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS` |
|
|
188
|
-
| **`@vnejs/module.controller.interact`** | `BUTTONS.ANY` → `INTERACT.EMIT`; после показа `INTERACT.PUSH` (`onInteract`), перед скрытием `INTERACT.POP`; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS` |
|
|
189
|
-
| **`@vnejs/module.controller.arrows.vertical`** | ARROW_UP / ARROW_BOTTOM по видимым пунктам; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS`; индекс через `UPDATE_STATE`; на `HIDE.CLEANUP` `currentArrowVerticalItem` становится `undefined` через `UPDATE_STATE`, затем `UPDATE_FAST` |
|
|
190
|
-
| **`@vnejs/module.controller.arrows.horizontal`** | ARROW_LEFT / ARROW_RIGHT по пунктам; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS`; индекс через `UPDATE_STATE`; на `HIDE.CLEANUP` `currentArrowHorizontalItem` становится `undefined` через `UPDATE_STATE`, затем `UPDATE_FAST` |
|
|
191
|
-
| **`@vnejs/module.controller.arrows.grid`** | Четыре стрелки по сетке; `GRID_NEXT` / `GRID_PREV` на краю; PUSH/POP на `SHOW.CONTROLS` / `HIDE.CONTROLS`; `GRID_UPDATE_ITEMS` без payload, meta через `UPDATE_STATE`; на `HIDE.CLEANUP` `gridRow` / `gridColumn` становятся `undefined` через `UPDATE_STATE`, затем `UPDATE_FAST` |
|
|
192
|
-
| **`@vnejs/module.controller.pages`** | Пагинация: `PAGE_SET` / `PAGE_NEXT` / `PAGE_PREV` → `setPage` → `UPDATE_STATE` (`pageIndex`) + abstract `applyPage` + `UPDATE_FAST` |
|
|
193
|
-
| **`@vnejs/module.controller.hide.on.state`** | STATE.SET / STATE.CLEAR → emit HIDE плагина (`isForce` задаёт наследник) |
|
|
194
|
-
| **`@vnejs/module.controller.hide.on.controls`** | BACK / MENU / GAMEMENU → emit HIDE плагина; PUSH/POP controls на `SHOW.CONTROLS` / `HIDE.CONTROLS` |
|
|
195
|
-
| **`@vnejs/module.scales.common`** | База для scales / RPG-модулей |
|
|
196
|
-
|
|
197
|
-
### Принципы
|
|
198
|
-
|
|
199
|
-
- Плагин берёт нужную базу (`ModuleCore`, `ModuleView`, `ModuleLayerController`, …), а не `Module` напрямую.
|
|
200
|
-
- Базы тянут **контракты** из `contracts/` — отсюда типизация `EVENTS` / `CONST`.
|
|
201
|
-
- **`ModuleCore`** — `plugins/core/` и `compatibility/`; **`ModuleView` / `ModuleLayer*`** — view/canvas + **`@vnejs/uis.react`**.
|
|
202
|
-
|
|
203
|
-
| | `packages/` | `modules_extensions/` |
|
|
204
|
-
| ----------------- | ------------------------ | ---------------------------- |
|
|
205
|
-
| Роль | Runtime и инфраструктура | Шаблоны для модулей плагинов |
|
|
206
|
-
| Регистрация в VNE | да (`shared`, `core`) | нет |
|
|
207
|
-
| Наследование | — | `plugins/` наследуют базы |
|
|
208
|
-
|
|
209
|
-
---
|
|
210
|
-
|
|
211
|
-
## configs/
|
|
212
|
-
|
|
213
|
-
**Общие конфигурации сборки** — переиспользуемые TypeScript-настройки, не runtime.
|
|
214
|
-
|
|
215
|
-
| Пакет | Назначение |
|
|
216
|
-
| ------------------------------ | ------------------------------------------------------------------------------------- |
|
|
217
|
-
| **`@vnejs/configs.ts-common`** | tsconfig для `plugins/`, `contracts/`, `packages/`, `modules_extensions/`, `helpers/` |
|
|
218
|
-
| **`@vnejs/configs.ts-uis`** | tsconfig для `uis/react/` и view-кода `games/` (JSX, React-типы) |
|
|
219
|
-
| **`@vnejs/configs.vitest`** | Общий Vitest-конфиг (`create-config.js`, `setup.js`) для пакетов с тестами |
|
|
220
|
-
|
|
221
|
-
```mermaid
|
|
222
|
-
flowchart LR
|
|
223
|
-
TC[configs.ts-common] --> PL[plugins/ / contracts/ / packages/]
|
|
224
|
-
TU[configs.ts-uis] --> UI[uis/react/]
|
|
225
|
-
TU --> GM[games/]
|
|
226
|
-
TV[configs.vitest] --> TEST[пакеты с vitest]
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
Пакеты `ts-*` экспортируют json; локальный `tsconfig.json` пакета **extends** общий и задаёт `rootDir` / `outDir`. Vitest-конфиг — JS-хелперы, не tsconfig.
|
|
230
|
-
|
|
231
|
-
---
|
|
232
|
-
|
|
233
|
-
## contracts/
|
|
234
|
-
|
|
235
|
-
**Контракт** — публичный API одного плагина: **спецификация**, не поведение.
|
|
236
|
-
|
|
237
|
-
### Что входит в контракт
|
|
238
|
-
|
|
239
|
-
- **`PLUGIN_NAME`** — namespace в реестре `VNE`.
|
|
240
|
-
- **`CONSTANTS`**, **`SUBSCRIBE_EVENTS`**, **`PARAMS`**, **`SETTINGS_KEYS`**.
|
|
241
|
-
- **Типы** — payload событий, shape глобального state, shared-поля.
|
|
242
|
-
|
|
243
|
-
### TypeScript augmentation
|
|
244
|
-
|
|
245
|
-
Контракт расширяет типы через `declare module`:
|
|
246
|
-
|
|
247
|
-
- `@vnejs/shared` — `VnePluginEventsMap`, `VnePluginConstantsMap`, …
|
|
248
|
-
- `@vnejs/module` — `ModuleGlobalState`, `ModuleShared`
|
|
249
|
-
- другие контракты — при cross-cutting типах
|
|
250
|
-
|
|
251
|
-
### Принципы
|
|
252
|
-
|
|
253
|
-
- Один контракт обычно соответствует **одному плагину** в `plugins/` (1:1).
|
|
254
|
-
- Контракт **не импортирует** реализацию из `plugins/`.
|
|
255
|
-
- Доменная структура `contracts/` зеркалит таксономию `plugins/`.
|
|
256
|
-
|
|
257
|
-
```mermaid
|
|
258
|
-
flowchart LR
|
|
259
|
-
CT[contracts/] -->|"declare module"| TS[Типы VNE / Module]
|
|
260
|
-
CT -->|"CONSTANTS, EVENTS, PARAMS"| REG[regPlugin при загрузке plugins/]
|
|
261
|
-
PL[plugins/] -->|"import"| CT
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
---
|
|
265
|
-
|
|
266
|
-
## plugins/
|
|
267
|
-
|
|
268
|
-
**Плагин** — реализация поведения, описанного в `contracts/`.
|
|
269
|
-
|
|
270
|
-
### Регистрация
|
|
271
|
-
|
|
272
|
-
1. Импорт контракта из `contracts/`.
|
|
273
|
-
2. `regPlugin(PLUGIN_NAME, { constants, events, params, settings }, [ModuleClasses])`.
|
|
274
|
-
3. Классы попадают в `VNE_MODULES` через `regModule`.
|
|
275
|
-
|
|
276
|
-
### Модули и lifecycle
|
|
277
|
-
|
|
278
|
-
Плагин — **набор модулей** с уникальным `name`. После `new VneCore()`:
|
|
279
|
-
|
|
280
|
-
1. **`inject`** — observer, global state, shared, media. В конце, если метод есть, вызывается `postinject`.
|
|
281
|
-
2. **`subscribe`** — подписки на события.
|
|
282
|
-
3. **`setup`** — подготовка до `init` (все `setup` завершаются раньше любого `init`).
|
|
283
|
-
4. **`init`** — асинхронная инициализация.
|
|
284
|
-
5. **`start`** — после всех `init` (все `init` завершаются раньше любого `start`).
|
|
285
|
-
|
|
286
|
-
```mermaid
|
|
287
|
-
sequenceDiagram
|
|
288
|
-
participant A as Модуль plugins/ A
|
|
289
|
-
participant OBS as Observer
|
|
290
|
-
participant B as Модуль plugins/ B
|
|
291
|
-
|
|
292
|
-
A->>OBS: emit(EVENT_A.DONE, payload)
|
|
293
|
-
OBS->>B: handler
|
|
294
|
-
B->>OBS: emit(EVENT_B.START)
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
Пакеты из `plugins/` **не импортируют** код соседних плагинов — только контракт и `VNE`.
|
|
298
|
-
|
|
299
|
-
### Зависимости
|
|
300
|
-
|
|
301
|
-
- `contracts/`, **`@vnejs/module.*`**, **`@vnejs/helpers`**, **`@vnejs/uis.*`** (view).
|
|
302
|
-
|
|
303
|
-
---
|
|
304
|
-
|
|
305
|
-
## compatibility/
|
|
306
|
-
|
|
307
|
-
**Опциональная интеграция** между независимыми плагинами — включается в `bundles/`, не зашивается внутрь `plugins/`.
|
|
308
|
-
|
|
309
|
-
- Один модуль, наследник `ModuleCore`.
|
|
310
|
-
- В **`subscribe`** слушает A, эмитит B.
|
|
311
|
-
- **`regModule`** без `regPlugin` — нет своего namespace в `VNE`.
|
|
312
|
-
- Зависит только от **контрактов** из `contracts/`, не от реализаций в `plugins/`.
|
|
313
|
-
|
|
314
|
-
Именование: `@vnejs/compatibility.{источник}-with-{цель}` → путь `compatibility/{источник}/{цель}/`.
|
|
315
|
-
|
|
316
|
-
```mermaid
|
|
317
|
-
flowchart LR
|
|
318
|
-
PA[plugins/ A] -->|"emit EVENT_A"| OBS[Observer]
|
|
319
|
-
OBS --> CM[compatibility/]
|
|
320
|
-
CM -->|"emit EVENT_B"| OBS
|
|
321
|
-
OBS --> PB[plugins/ B]
|
|
322
|
-
|
|
323
|
-
PA -.->|"не импортирует"| PB
|
|
324
|
-
CM --> CTA[contracts/ A]
|
|
325
|
-
CM --> CTB[contracts/ B]
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
---
|
|
329
|
-
|
|
330
|
-
## bundles/
|
|
331
|
-
|
|
332
|
-
**Композиция** без бизнес-логики — цепочка side-effect импортов из `plugins/` и `compatibility/`.
|
|
333
|
-
|
|
334
|
-
- Определяет **набор возможностей** для `games/`.
|
|
335
|
-
- Экспортирует **`VneCore`**.
|
|
336
|
-
- Дочерний пакет в `bundles/` импортирует родительский и **добавляет** плагины.
|
|
337
|
-
|
|
338
|
-
```mermaid
|
|
339
|
-
flowchart BT
|
|
340
|
-
CORE["bundles/core/"]
|
|
341
|
-
CANVAS["bundles/canvas.react/"]
|
|
342
|
-
SKEL["bundles/vn.skeleton/"]
|
|
343
|
-
BASE["bundles/vn.base/"]
|
|
344
|
-
GAME["bundles/coraline/"]
|
|
345
|
-
|
|
346
|
-
CORE --> CANVAS --> SKEL --> BASE --> GAME
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
Entry point: re-export `VneCore` → импорт `plugins/` → импорт `compatibility/`.
|
|
350
|
-
|
|
351
|
-
---
|
|
352
|
-
|
|
353
|
-
## helpers/
|
|
354
|
-
|
|
355
|
-
**Чистые утилиты** вне event-архитектуры.
|
|
356
|
-
|
|
357
|
-
- **`helpers/primitives/`** — атомарные функции (`tokenize-*`, `get-id`, `to-json`, …).
|
|
358
|
-
- **`helpers/composites/`** — составные утилиты поверх primitives (например `call-all-promises`).
|
|
359
|
-
- **`helpers/base/`** — barrel **`@vnejs/helpers`** (реэкспорт primitives и composites).
|
|
360
|
-
|
|
361
|
-
```mermaid
|
|
362
|
-
flowchart LR
|
|
363
|
-
H[helpers/] --> P[plugins/]
|
|
364
|
-
H --> CORE[VneCore]
|
|
365
|
-
H -.->|"не связан"| VNE[(VNE / Observer)]
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
---
|
|
369
|
-
|
|
370
|
-
## uis/
|
|
371
|
-
|
|
372
|
-
**Презентационный слой** для view-плагинов — не плагин, не в `VNE`.
|
|
373
|
-
|
|
374
|
-
| Часть | Назначение |
|
|
375
|
-
| --------------------------- | ----------------------------- |
|
|
376
|
-
| **`uis/utils/`** | `cn`, `injectStyles`, `sel` |
|
|
377
|
-
| **`uis/react/primitives/`** | Атомы (button, text, icon, …) |
|
|
378
|
-
| **`uis/react/composites/`** | Составные компоненты |
|
|
379
|
-
| **`uis/react/complex/`** | Крупные UI-блоки |
|
|
380
|
-
| **`uis/react/hooks/`** | React-хуки |
|
|
381
|
-
| **`uis/react/base/`** | Barrel **`@vnejs/uis.react`** |
|
|
382
|
-
|
|
383
|
-
View-плагины в `plugins/`: **`ModuleView`** + render на компонентах из `uis/`.
|
|
384
|
-
|
|
385
|
-
```mermaid
|
|
386
|
-
flowchart TD
|
|
387
|
-
VP[plugins/ view / ModuleView]
|
|
388
|
-
VP --> UIR["@vnejs/uis.react"]
|
|
389
|
-
VP --> UU["@vnejs/uis.utils"]
|
|
390
|
-
VP --> OBS[Observer]
|
|
391
|
-
UIR -.->|"не использует"| VNE
|
|
392
|
-
```
|
|
393
|
-
|
|
394
|
-
---
|
|
395
|
-
|
|
396
|
-
## cli/
|
|
397
|
-
|
|
398
|
-
**CLI** для монорепы и сборки `games/` (`npx @vnejs/*`).
|
|
399
|
-
|
|
400
|
-
```mermaid
|
|
401
|
-
flowchart LR
|
|
402
|
-
MR["@vnejs/monorepo"]
|
|
403
|
-
BD["@vnejs/build"]
|
|
404
|
-
DS["@vnejs/desktop"]
|
|
405
|
-
TL["@vnejs/tools"]
|
|
406
|
-
|
|
407
|
-
MR --> WS[workspace-пакеты]
|
|
408
|
-
BD --> G[games/]
|
|
409
|
-
DS --> G
|
|
410
|
-
TL --> G
|
|
411
|
-
```
|
|
412
|
-
|
|
413
|
-
| CLI | Роль |
|
|
414
|
-
| --------------------- | ----------------------------------------------------------------------------------- |
|
|
415
|
-
| **`@vnejs/monorepo`** | `build`, `package`, `publish`, `bump`, `sync-deps`, `graph`, `run-changed`, `clear` |
|
|
416
|
-
| **`@vnejs/build`** | **`data`** — `game/` → JSON в `dist/`; **`client`** — Vite entry → `dist/` |
|
|
417
|
-
| **`@vnejs/desktop`** | **`web`** — static-сервер для `dist/` |
|
|
418
|
-
| **`@vnejs/tools`** | Resize image/video/audio, контент-пайплайн |
|
|
419
|
-
|
|
420
|
-
Корень: `npm run build` → monorepo build; **Turbo** кэширует `build` с `dependsOn: ["^build"]`.
|
|
421
|
-
|
|
422
|
-
---
|
|
423
|
-
|
|
424
|
-
## games/
|
|
425
|
-
|
|
426
|
-
**Проекты игр** — потребители `bundles/` + `cli/`.
|
|
427
|
-
|
|
428
|
-
```
|
|
429
|
-
games/<name>/
|
|
430
|
-
├── entry/ # index.ts, index.html → импорт bundles/, new VneCore()
|
|
431
|
-
├── game/<mod>/ # scenario (.vne), scripts, media, public
|
|
432
|
-
├── desktop/ # Electron dev/prod
|
|
433
|
-
├── dist/ # JSON + JS после сборки
|
|
434
|
-
│ ├── mods.json
|
|
435
|
-
│ ├── label/ # label/<path>.json (например label/prologue/1.json)
|
|
436
|
-
│ └── media_info/ # media_info/<mod>.json (не путать с /media/ ассетов)
|
|
437
|
-
└── package.json
|
|
438
|
-
```
|
|
439
|
-
|
|
440
|
-
```mermaid
|
|
441
|
-
flowchart LR
|
|
442
|
-
SC["game/**/*.vne"]
|
|
443
|
-
DATA["build data"]
|
|
444
|
-
JSON["dist mods.json label/ media_info/"]
|
|
445
|
-
ENTRY["entry/index.ts"]
|
|
446
|
-
CLIENT["build client"]
|
|
447
|
-
DIST["dist/"]
|
|
448
|
-
SRV["desktop web"]
|
|
449
|
-
|
|
450
|
-
SC --> DATA --> JSON
|
|
451
|
-
ENTRY --> CLIENT --> DIST
|
|
452
|
-
JSON --> RUN[Browser / Electron]
|
|
453
|
-
DIST --> RUN
|
|
454
|
-
SRV --> RUN
|
|
455
|
-
```
|
|
456
|
-
|
|
457
|
-
1. **`build:data`** — JSON для **`VneCore.init()`**: `mods.json`, `label/<path>.json`, `media_info/<mod>.json`.
|
|
458
|
-
2. **`build:client`** — Vite + `bundles/`.
|
|
459
|
-
3. **`entry/`** — `new VneCore()`, `await init()`.
|
|
460
|
-
|
|
461
|
-
`games/` **не собирает** `plugins/` — выбирает `bundles/` и добавляет контент.
|
|
462
|
-
|
|
463
|
-
---
|
|
464
|
-
|
|
465
|
-
## backends/
|
|
466
|
-
|
|
467
|
-
**Отдельные Cloudflare Workers** — не плагины и не часть `VneCore`. Игра ходит к ним по HTTP. Пакеты в `plugins/` их не импортируют.
|
|
468
|
-
|
|
469
|
-
| Пакет | Назначение |
|
|
470
|
-
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
|
|
471
|
-
| **`backends/auth`** | Steam OpenID и проверка покупки своего AppID. Отдаёт подписанный JWT (`steamId`, `ownsApp`, `exp`). |
|
|
472
|
-
| **`backends/content`** | `GET /label/*` — JSON меток из `dist/label`. Пускает только запрос с тем же JWT и `ownsApp`. Картинки и `mods.json` не отдаёт. |
|
|
473
|
-
|
|
474
|
-
Оба воркера знают один `AUTH_SECRET`. Контент-воркер Steam не вызывает. Каталог ассетов при деплое указывает на `dist` игры, сами JSON в репозиторий воркера не копируются. Закрытый деплой не кладёт то же дерево `label/` рядом со статикой игры.
|
|
475
|
-
|
|
476
|
-
```mermaid
|
|
477
|
-
flowchart LR
|
|
478
|
-
Game[games/] -->|popup OpenID| Auth[backends/auth]
|
|
479
|
-
Auth --> Steam[steamcommunity.com]
|
|
480
|
-
Game -->|GET /label Bearer| Content[backends/content]
|
|
481
|
-
Auth -.->|общий AUTH_SECRET| Content
|
|
482
|
-
```
|
|
483
|
-
|
|
484
|
-
---
|
|
485
|
-
|
|
486
|
-
## vs_code_extensions/
|
|
487
|
-
|
|
488
|
-
**Расширения редактора** для формата сценария — не runtime.
|
|
489
|
-
|
|
490
|
-
| Расширение | Назначение |
|
|
491
|
-
| --------------------- | -------------------------------------------------- |
|
|
492
|
-
| **`@vnejs/language`** | Подсветка **`.vne`** в `games/*/game/**/scenario/` |
|
|
493
|
-
|
|
494
|
-
---
|
|
495
|
-
|
|
496
|
-
## Именование npm-пакетов
|
|
497
|
-
|
|
498
|
-
```
|
|
499
|
-
plugins/core/system/ → @vnejs/plugins.core.system
|
|
500
|
-
contracts/text/text/ → @vnejs/contracts.text
|
|
501
|
-
compatibility/text/scenario.autoread/ → @vnejs/compatibility.text-with-scenario.autoread
|
|
502
|
-
```
|
|
503
|
-
|
|
504
|
-
Слеш в пути → точка в имени; `compatibility/` — суффикс **`-with-`**.
|
|
505
|
-
|
|
506
|
-
---
|
|
507
|
-
|
|
508
|
-
## Сборка end-to-end
|
|
509
|
-
|
|
510
|
-
```mermaid
|
|
511
|
-
flowchart TD
|
|
512
|
-
subgraph repo ["Монорепозиторий"]
|
|
513
|
-
CFG[configs/]
|
|
514
|
-
PKG[packages/]
|
|
515
|
-
ME[modules_extensions/]
|
|
516
|
-
CT[contracts/]
|
|
517
|
-
PL[plugins/]
|
|
518
|
-
CP[compatibility/]
|
|
519
|
-
BD[bundles/]
|
|
520
|
-
CL[cli/]
|
|
521
|
-
end
|
|
522
|
-
|
|
523
|
-
subgraph game_proj ["games/my-game/"]
|
|
524
|
-
SC[scenario .vne]
|
|
525
|
-
EN[entry/]
|
|
526
|
-
end
|
|
527
|
-
|
|
528
|
-
CFG --> PL
|
|
529
|
-
PKG --> ME --> PL
|
|
530
|
-
CT --> PL
|
|
531
|
-
CT --> CP
|
|
532
|
-
PL --> BD
|
|
533
|
-
CP --> BD
|
|
534
|
-
BD --> EN
|
|
535
|
-
SC --> CL
|
|
536
|
-
CL -->|"data + client"| ART[dist/]
|
|
537
|
-
EN --> ART
|
|
538
|
-
ART --> PLAY[Browser / Electron]
|
|
539
|
-
```
|
|
540
|
-
|
|
541
|
-
1. `bundles/` регистрирует `plugins/` и `compatibility/` в `VNE`.
|
|
542
|
-
2. `cli/` собирает сценарий в JSON и клиент в `dist/`.
|
|
543
|
-
3. `new VneCore().init()` — модули, media, lifecycle до `start`.
|
|
544
|
-
4. Игра живёт на событиях шины; cross-plugin связи — через `compatibility/` из `bundles/`.
|
|
545
|
-
|
|
546
|
-
---
|
|
547
|
-
|
|
548
|
-
## Резюме
|
|
549
|
-
|
|
550
|
-
| Каталог | Одной фразой |
|
|
551
|
-
| ------------------------- | --------------------------------- |
|
|
552
|
-
| **`packages/`** | Реестр, шина, VneCore |
|
|
553
|
-
| **`modules_extensions/`** | Базовые классы модулей |
|
|
554
|
-
| **`configs/`** | Общие tsconfig |
|
|
555
|
-
| **`contracts/`** | API плагина: события, типы |
|
|
556
|
-
| **`plugins/`** | Реализация на шине |
|
|
557
|
-
| **`compatibility/`** | Opt-in связка двух плагинов |
|
|
558
|
-
| **`bundles/`** | Набор способностей для игры |
|
|
559
|
-
| **`helpers/`** | Утилиты без движка |
|
|
560
|
-
| **`uis/`** | React/UI для view |
|
|
561
|
-
| **`cli/`** | Сборка монорепы и игр |
|
|
562
|
-
| **`games/`** | Сценарий + entry + dist |
|
|
563
|
-
| **`backends/`** | Workers: токен Steam и JSON меток |
|
|
564
|
-
| **`vs_code_extensions/`** | Подсветка `.vne` |
|
|
565
|
-
|
|
566
|
-
**Главное правило:** `plugins/` не знают друг о друге; интеграция — через события по `contracts/` и явный `compatibility/` в `bundles/`.
|