vimp-engine 0.7.2 → 0.8.0
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/package.json +11 -4
- package/src/client/InputListener.js +36 -0
- package/src/client/SoundManager.js +498 -0
- package/src/client/boot.js +113 -0
- package/src/client/components/controller/Auth.js +44 -0
- package/src/client/components/controller/CanvasManager.js +26 -0
- package/src/client/components/controller/Chat.js +56 -0
- package/src/client/components/controller/Controls.js +51 -0
- package/src/client/components/controller/Game.js +37 -0
- package/src/client/components/controller/Lobby.js +81 -0
- package/src/client/components/controller/LobbyAuth.js +41 -0
- package/src/client/components/controller/Panel.js +23 -0
- package/src/client/components/controller/Stat.js +33 -0
- package/src/client/components/controller/Vote.js +55 -0
- package/src/client/components/model/Auth.js +92 -0
- package/src/client/components/model/CanvasManager.js +319 -0
- package/src/client/components/model/Chat.js +119 -0
- package/src/client/components/model/Controls.js +120 -0
- package/src/client/components/model/Game.js +172 -0
- package/src/client/components/model/Lobby.js +226 -0
- package/src/client/components/model/LobbyAuth.js +161 -0
- package/src/client/components/model/Panel.js +70 -0
- package/src/client/components/model/Stat.js +77 -0
- package/src/client/components/model/Vote.js +216 -0
- package/src/client/components/view/Auth.js +167 -0
- package/src/client/components/view/CanvasManager.js +44 -0
- package/src/client/components/view/Chat.js +90 -0
- package/src/client/components/view/Controls.js +30 -0
- package/src/client/components/view/Game.js +48 -0
- package/src/client/components/view/Lobby.js +303 -0
- package/src/client/components/view/LobbyAuth.js +111 -0
- package/src/client/components/view/Panel.js +314 -0
- package/src/client/components/view/Stat.js +238 -0
- package/src/client/components/view/Vote.js +108 -0
- package/src/client/debug.js +158 -0
- package/src/client/lib/autostart.js +61 -0
- package/src/client/lib/contextTracker.js +46 -0
- package/src/client/lib/formBuilder.js +280 -0
- package/src/client/lib/hostGate.js +16 -0
- package/src/client/main.js +2011 -0
- package/src/client/network/HostConnectionManager.js +196 -0
- package/src/client/network/HostController.js +422 -0
- package/src/client/network/InlineHostBridge.js +152 -0
- package/src/client/network/LoopbackTransport.js +51 -0
- package/src/client/network/SignalingClient.js +146 -0
- package/src/client/network/WebRtcManager.js +147 -0
- package/src/client/network/WebSocketTransport.js +78 -0
- package/src/client/network/policyClose.js +54 -0
- package/src/client/network/workerSupport.js +34 -0
- package/src/client/providers/BakingProvider.js +88 -0
- package/src/client/providers/DependencyProvider.js +41 -0
- package/src/client/style.css +898 -0
- package/src/client/views/gameShell.js +190 -0
- package/src/client/views/includes/auth.pug +20 -0
- package/src/client/views/includes/chat.pug +5 -0
- package/src/client/views/includes/informer.pug +2 -0
- package/src/client/views/includes/lobby.pug +48 -0
- package/src/client/views/includes/lobbyAuth.pug +19 -0
- package/src/client/views/includes/panel.pug +3 -0
- package/src/client/views/includes/stat.pug +2 -0
- package/src/client/views/index.pug +8 -0
- package/src/config/closeCodes.js +18 -0
- package/src/config/env.js +61 -0
- package/src/devtools/ScenarioRunner.js +3 -8
- package/src/devtools/pluginLoader.js +8 -93
- package/src/host/HostGame.js +41 -3
- package/src/host/PortMachine.js +294 -0
- package/src/host/host.worker.js +29 -246
- package/src/host/identity.js +100 -0
- package/src/lib/clientIp.js +39 -0
- package/src/lib/loadGamePackage.js +122 -0
- package/src/lib/offlinePlayerData.js +18 -0
- package/src/standalone/index.js +125 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// рекурсивно уничтожает запечённое значение: пекарь волен вернуть текстуру,
|
|
2
|
+
// массив кадров анимации или вложенный объект текстур по состояниям.
|
|
3
|
+
// try/catch: после потери WebGL-контекста текстуры уже мертвы.
|
|
4
|
+
// seen — дедуп за проход (набор заводит вызывающий bakeAll): один объект
|
|
5
|
+
// может лежать под двумя ключами и в ассетах разных компонентов, а
|
|
6
|
+
// destroy(true) второй раз бессмысленен и маскировался бы тем же catch
|
|
7
|
+
function destroyBaked(value, seen) {
|
|
8
|
+
if (!value || typeof value !== 'object' || seen.has(value)) {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
seen.add(value);
|
|
13
|
+
|
|
14
|
+
if (typeof value.destroy === 'function') {
|
|
15
|
+
try {
|
|
16
|
+
value.destroy(true);
|
|
17
|
+
} catch (e) {
|
|
18
|
+
// текстура ушла вместе с контекстом — освобождать нечего
|
|
19
|
+
console.warn('[baking] destroy failed:', e);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
for (const item of Array.isArray(value) ? value : Object.values(value)) {
|
|
26
|
+
destroyBaked(item, seen);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// класс для управления "запеченными" ассетами
|
|
31
|
+
// каждый потребитель владеет собственной коллекцией ассетов
|
|
32
|
+
export default class BakingProvider {
|
|
33
|
+
// bakers — функции-пекари процедурных текстур (поставляет ClientPlugin игры).
|
|
34
|
+
// Пекарь владеет тем, что вернул: перепечка уничтожает результат вместе с
|
|
35
|
+
// его TextureSource, поэтому возвращать вьюху на чужой/общий атлас нельзя
|
|
36
|
+
constructor(bakers = {}) {
|
|
37
|
+
this._bakers = bakers;
|
|
38
|
+
|
|
39
|
+
// коллекция для хранения "запеченных" ассетов
|
|
40
|
+
// Map<constructor, assetsObject>
|
|
41
|
+
this._collection = new Map();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// "запекает" ассеты и упаковывает их для потребителей
|
|
45
|
+
// arr - массив объектов с данными для создания ассетов
|
|
46
|
+
// pixiApp - экземпляр PIXI приложения
|
|
47
|
+
bakeAll(arr, pixiApp) {
|
|
48
|
+
const renderer = pixiApp.renderer;
|
|
49
|
+
|
|
50
|
+
// перепечка (восстановление WebGL-контекста) идёт в тот же экземпляр
|
|
51
|
+
// Map — старые RenderTexture иначе останутся висеть в GPU-памяти.
|
|
52
|
+
// seen — дедуп на весь проход: один объект может лежать и в ассетах
|
|
53
|
+
// разных компонентов, второй destroy(true) по нему бессмысленен
|
|
54
|
+
const seen = new Set();
|
|
55
|
+
|
|
56
|
+
for (const assets of this._collection.values()) {
|
|
57
|
+
destroyBaked(assets, seen);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
this._collection.clear();
|
|
61
|
+
|
|
62
|
+
// "запекание" ассетов
|
|
63
|
+
for (const data of arr) {
|
|
64
|
+
const assetName = data.name;
|
|
65
|
+
const componentName = data.component;
|
|
66
|
+
const bakerFn = this._bakers[assetName];
|
|
67
|
+
|
|
68
|
+
if (bakerFn) {
|
|
69
|
+
const bakedAsset = bakerFn(data.params, renderer);
|
|
70
|
+
|
|
71
|
+
// если для этого компонента нет контейнера ассетов
|
|
72
|
+
if (!this._collection.has(componentName)) {
|
|
73
|
+
this._collection.set(componentName, {});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// добавляем "запеченный" ассет в контейнер соответствующего компонента
|
|
77
|
+
const assetsContainer = this._collection.get(componentName);
|
|
78
|
+
|
|
79
|
+
assetsContainer[assetName] = bakedAsset;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// возвращает всю коллекцию "запеченных" ассетов
|
|
85
|
+
getAssetsCollection() {
|
|
86
|
+
return this._collection;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export default class DependencyProvider {
|
|
2
|
+
constructor() {
|
|
3
|
+
// приватное хранилище для подготовленных объектов зависимостей
|
|
4
|
+
// Map<componentName, dependenciesObject>
|
|
5
|
+
this._collection = new Map();
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// собирает объекты зависимостей и упаковывает их для компонентов
|
|
9
|
+
// availableServices - пул всех доступных сервисов
|
|
10
|
+
// dependencyMap - карта, описывающая, какой компонент какой сервис требует
|
|
11
|
+
collectAll(availableServices, dependencyMap) {
|
|
12
|
+
this._collection.clear();
|
|
13
|
+
|
|
14
|
+
const services = Object.keys(dependencyMap || {});
|
|
15
|
+
|
|
16
|
+
for (const serviceName of services) {
|
|
17
|
+
// если сервис доступен
|
|
18
|
+
if (Object.hasOwn(availableServices, serviceName)) {
|
|
19
|
+
const componentNames = dependencyMap[serviceName] || [];
|
|
20
|
+
const service = availableServices[serviceName];
|
|
21
|
+
|
|
22
|
+
for (const componentName of componentNames) {
|
|
23
|
+
// получение существующего объекта зависимостей для компонента
|
|
24
|
+
// или создание нового
|
|
25
|
+
const dependencies = this._collection.get(componentName) || {};
|
|
26
|
+
|
|
27
|
+
// добавление текущего сервиса
|
|
28
|
+
dependencies[serviceName] = service;
|
|
29
|
+
|
|
30
|
+
// устанавка объекта зависимостей для компонента
|
|
31
|
+
this._collection.set(componentName, dependencies);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// возвращает всю коллекцию "собранных" зависимостей
|
|
38
|
+
getDependenciesCollection() {
|
|
39
|
+
return this._collection;
|
|
40
|
+
}
|
|
41
|
+
}
|