cyberia 3.2.22 → 3.2.70
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/.env.example +127 -68
- package/.github/workflows/cyberia-client.cd.yml +40 -0
- package/.github/workflows/cyberia-server.cd.yml +40 -0
- package/.github/workflows/docker-image.cyberia-client.ci.yml +49 -0
- package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +48 -0
- package/.github/workflows/docker-image.cyberia-server.ci.yml +69 -0
- package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +69 -0
- package/.github/workflows/docker-image.engine-cyberia.ci.yml +52 -0
- package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +52 -0
- package/.github/workflows/engine-cyberia.cd.yml +33 -24
- package/.github/workflows/engine-cyberia.ci.yml +13 -3
- package/.github/workflows/ghpkg.ci.yml +88 -1
- package/.github/workflows/gitlab.ci.yml +1 -1
- package/.github/workflows/hardhat.ci.yml +1 -1
- package/.github/workflows/npmpkg.ci.yml +10 -7
- package/.github/workflows/publish.ci.yml +2 -2
- package/.github/workflows/publish.cyberia.ci.yml +5 -16
- package/.github/workflows/pwa-microservices-template-page.cd.yml +1 -8
- package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
- package/CHANGELOG.md +301 -1
- package/CLI-HELP.md +71 -6
- package/Dockerfile +141 -43
- package/Dockerfile.dev +143 -0
- package/Dockerfile.test +165 -0
- package/README.md +1 -1
- package/baremetal/commission-workflows.json +1 -0
- package/bin/build.js +31 -0
- package/bin/cyberia.js +1080 -184
- package/bin/deploy.js +2 -2
- package/bin/index.js +1080 -184
- package/bump.config.js +1 -0
- package/compose.env +131 -0
- package/conf.js +18 -1
- package/deployment.yaml +2 -2
- package/docker-compose.yml +316 -0
- package/hardhat/hardhat.config.js +2 -2
- package/hardhat/package-lock.json +620 -2041
- package/hardhat/package.json +7 -5
- package/hardhat/scripts/deployObjectLayerToken.js +18 -18
- package/hardhat/test/ObjectLayerToken.js +378 -274
- package/ipfs/configure-ipfs.sh +13 -0
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +2 -2
- package/manifests/deployment/dd-cyberia-development/grpc-service.yaml +17 -0
- package/manifests/deployment/dd-cyberia-development/pv-pvc.yaml +32 -0
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/mongodb/entrypoint.sh +76 -0
- package/nginx.conf +87 -0
- package/package.json +31 -19
- package/pv-pvc.yaml +32 -0
- package/scripts/disk-clean.sh +85 -60
- package/scripts/kubeadm-node-setup.sh +317 -0
- package/scripts/rocky-kickstart.sh +877 -185
- package/scripts/rpmfusion-ffmpeg-setup.sh +26 -50
- package/scripts/test-monitor.sh +3 -5
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +43 -7
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +17 -25
- package/src/api/cyberia-action/cyberia-action.controller.js +19 -0
- package/src/api/cyberia-action/cyberia-action.model.js +21 -29
- package/src/api/cyberia-action/cyberia-action.router.js +42 -7
- package/src/api/cyberia-action/cyberia-action.service.js +20 -4
- package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +58 -57
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +37 -6
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +8 -2
- package/src/api/cyberia-entity/cyberia-entity.router.js +39 -7
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +74 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.model.js +67 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +63 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +46 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +62 -10
- package/src/api/cyberia-instance/cyberia-instance.model.js +32 -2
- package/src/api/cyberia-instance/cyberia-instance.router.js +6 -6
- package/src/api/cyberia-instance/cyberia-world-generator.js +116 -3
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +3 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +39 -7
- package/src/api/cyberia-map/cyberia-map.router.js +21 -6
- package/src/api/cyberia-quest/cyberia-quest.controller.js +38 -0
- package/src/api/cyberia-quest/cyberia-quest.router.js +47 -7
- package/src/api/cyberia-quest/cyberia-quest.service.js +59 -4
- package/src/api/cyberia-saga/cyberia-saga.controller.js +74 -0
- package/src/api/cyberia-saga/cyberia-saga.model.js +59 -0
- package/src/api/cyberia-saga/cyberia-saga.router.js +63 -0
- package/src/api/cyberia-saga/cyberia-saga.service.js +42 -0
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +551 -129
- package/src/api/cyberia-skill/cyberia-skill.controller.js +74 -0
- package/src/api/cyberia-skill/cyberia-skill.model.js +50 -0
- package/src/api/cyberia-skill/cyberia-skill.router.js +63 -0
- package/src/api/cyberia-skill/cyberia-skill.service.js +42 -0
- package/src/api/ipfs/ipfs.service.js +28 -15
- package/src/api/object-layer/object-layer.router.js +25 -15
- package/src/api/object-layer/object-layer.service.js +15 -20
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +39 -7
- package/src/cli/baremetal.js +717 -16
- package/src/cli/cluster.js +80 -5
- package/src/cli/deploy.js +127 -11
- package/src/cli/docker-compose.js +648 -0
- package/src/cli/env.js +11 -2
- package/src/cli/fs.js +75 -30
- package/src/cli/image.js +129 -51
- package/src/cli/index.js +110 -6
- package/src/cli/kickstart.js +142 -20
- package/src/cli/release.js +46 -4
- package/src/cli/repository.js +238 -33
- package/src/cli/run.js +520 -114
- package/src/cli/secrets.js +82 -48
- package/src/cli/ssh.js +234 -0
- package/src/cli/static.js +2 -2
- package/src/client/components/cyberia/ActionEngineCyberia.js +1867 -0
- package/src/client/components/cyberia/EntityEngineCyberia.js +585 -0
- package/src/client/components/cyberia/InstanceEngineCyberia.js +219 -13
- package/src/client/components/cyberia/MapEngineCyberia.js +154 -71
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +40 -63
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +34 -20
- package/src/client/components/cyberia/SharedDefaultsCyberia.js +195 -4
- package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +66 -0
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +8 -0
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +8 -0
- package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +45 -27
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +3 -3
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +39 -22
- package/src/client/public/cyberia-docs/CYBERIA-LORE.md +88 -0
- package/src/client/public/cyberia-docs/CYBERIA-SAGA.md +394 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +8 -1
- package/src/client/public/cyberia-docs/CYBERIA.md +1 -1
- package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +5 -5
- package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
- package/src/client/services/cyberia-entity-type-default/cyberia-entity-type-default.service.js +99 -0
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +2 -2
- package/src/client/services/cyberia-map/cyberia-map.management.js +2 -2
- package/src/client/services/cyberia-saga/cyberia-saga.service.js +99 -0
- package/src/client/services/cyberia-skill/cyberia-skill.service.js +99 -0
- package/src/client/services/object-layer/object-layer.management.js +6 -6
- package/src/{server → client-builder}/client-build-docs.js +15 -5
- package/src/{server → client-builder}/client-build-live.js +3 -3
- package/src/{server → client-builder}/client-build.js +25 -22
- package/src/{server → client-builder}/client-dev-server.js +3 -3
- package/src/{server → client-builder}/client-icons.js +2 -2
- package/src/{server → client-builder}/ssr.js +5 -5
- package/src/client.build.js +1 -3
- package/src/client.dev.js +1 -1
- package/src/db/mongo/MongoBootstrap.js +12 -12
- package/src/grpc/cyberia/grpc-server.js +255 -70
- package/src/index.js +12 -1
- package/src/mailer/EmailRender.js +1 -1
- package/src/{server → projects/cyberia}/atlas-sprite-sheet-generator.js +2 -2
- package/src/{server → projects/cyberia}/besu-genesis-generator.js +3 -3
- package/src/projects/cyberia/catalog-cyberia.js +81 -0
- package/src/projects/cyberia/gemini-client.js +175 -0
- package/src/projects/cyberia/generate-saga.js +2107 -0
- package/src/{server → projects/cyberia}/ipfs-client.js +2 -2
- package/src/{server → projects/cyberia}/object-layer.js +12 -108
- package/src/{server → projects/cyberia}/semantic-layer-generator-floor.js +1 -1
- package/src/{server → projects/cyberia}/semantic-layer-generator-resource.js +1 -1
- package/src/{server → projects/cyberia}/semantic-layer-generator-skin.js +1 -1
- package/src/{server → projects/cyberia}/semantic-layer-generator.js +2 -2
- package/src/{server → projects/cyberia}/shape-generator.js +2 -2
- package/src/{server → projects/underpost}/catalog-underpost.js +1 -2
- package/src/runtime/cyberia-client/Dockerfile +27 -61
- package/src/runtime/cyberia-client/Dockerfile.dev +20 -12
- package/src/runtime/cyberia-server/Dockerfile +21 -20
- package/src/runtime/cyberia-server/Dockerfile.dev +17 -8
- package/src/runtime/engine-cyberia/Dockerfile +143 -0
- package/src/runtime/engine-cyberia/Dockerfile.dev +143 -0
- package/src/runtime/engine-cyberia/Dockerfile.test +165 -0
- package/src/runtime/engine-cyberia/compose.env +131 -0
- package/src/runtime/engine-cyberia/docker-compose.yml +316 -0
- package/src/runtime/engine-cyberia/ipfs/configure-ipfs.sh +13 -0
- package/src/runtime/engine-cyberia/mongodb/entrypoint.sh +76 -0
- package/src/runtime/engine-cyberia/nginx.conf +87 -0
- package/src/runtime/express/Express.js +2 -2
- package/src/runtime/nginx/Nginx.js +250 -0
- package/src/server/catalog.js +9 -14
- package/src/server/conf.js +3 -6
- package/src/server/runtime-status.js +18 -1
- package/src/server/start.js +12 -2
- package/src/server.js +6 -2
- package/test/cyberia-instance-conf-defaults.test.js +140 -0
- package/test/deploy-monitor.test.js +26 -10
- package/test/shape-generator.test.js +7 -1
- package/typedoc.dd-cyberia.json +3 -1
- package/typedoc.json +3 -1
- /package/src/client/ssr/{Render.js → RootDocument.js} +0 -0
- /package/src/{server → client-builder}/client-formatted.js +0 -0
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
* @namespace IpfsClient
|
|
12
12
|
*/
|
|
13
13
|
import stringify from 'fast-json-stable-stringify';
|
|
14
|
-
import { loggerFactory } from '
|
|
15
|
-
import Underpost from '
|
|
14
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
15
|
+
import Underpost from '../../index.js';
|
|
16
16
|
const logger = loggerFactory(import.meta);
|
|
17
17
|
const DEFAULT_IPFS_HTTP_TIMEOUT_MS = Number(process.env.IPFS_HTTP_TIMEOUT_MS || 10000);
|
|
18
18
|
const getRequestTimeoutMs = (kind = 'kubo') => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Provides utilities and engine logic for processing and managing Cyberia Online's object layer assets (skins, floors, weapons, etc.).
|
|
3
3
|
* Shared logic consumed by both the Cyberia CLI and the REST API service layer.
|
|
4
|
-
* @module src/
|
|
4
|
+
* @module src/projects/cyberia/object-layer.js
|
|
5
5
|
* @namespace CyberiaObjectLayer
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -13,9 +13,13 @@ import { Jimp, intToRGBA, rgbaToInt } from 'jimp';
|
|
|
13
13
|
import crypto from 'crypto';
|
|
14
14
|
import stringify from 'fast-json-stable-stringify';
|
|
15
15
|
|
|
16
|
-
import { range } from '
|
|
17
|
-
import {
|
|
18
|
-
|
|
16
|
+
import { range } from '../../client/components/core/CommonJs.js';
|
|
17
|
+
import {
|
|
18
|
+
generateRandomStats,
|
|
19
|
+
getKeyframeDirectionsByCode,
|
|
20
|
+
OBJECT_LAYER_DIRECTION_NAME_TO_CODE,
|
|
21
|
+
} from '../../client/components/cyberia/SharedDefaultsCyberia.js';
|
|
22
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
19
23
|
|
|
20
24
|
const logger = loggerFactory(import.meta);
|
|
21
25
|
|
|
@@ -206,46 +210,6 @@ export class ObjectLayerEngine {
|
|
|
206
210
|
return { frame, colors };
|
|
207
211
|
}
|
|
208
212
|
|
|
209
|
-
/**
|
|
210
|
-
* Converts a numerical folder direction (e.g., '08', '14') into an array of corresponding keyframe names (e.g., 'down_idle', 'left_walking').
|
|
211
|
-
* @static
|
|
212
|
-
* @param {string} direction - The numerical direction string.
|
|
213
|
-
* @returns {string[]} An array of keyframe direction names.
|
|
214
|
-
* @memberof CyberiaObjectLayer
|
|
215
|
-
*/
|
|
216
|
-
static getKeyFramesDirectionsFromNumberFolderDirection(direction) {
|
|
217
|
-
let objectLayerFrameDirections = [];
|
|
218
|
-
|
|
219
|
-
switch (direction) {
|
|
220
|
-
case '08':
|
|
221
|
-
objectLayerFrameDirections = ['down_idle', 'none_idle', 'default_idle'];
|
|
222
|
-
break;
|
|
223
|
-
case '18':
|
|
224
|
-
objectLayerFrameDirections = ['down_walking'];
|
|
225
|
-
break;
|
|
226
|
-
case '02':
|
|
227
|
-
objectLayerFrameDirections = ['up_idle'];
|
|
228
|
-
break;
|
|
229
|
-
case '12':
|
|
230
|
-
objectLayerFrameDirections = ['up_walking'];
|
|
231
|
-
break;
|
|
232
|
-
case '04':
|
|
233
|
-
objectLayerFrameDirections = ['left_idle', 'up_left_idle', 'down_left_idle'];
|
|
234
|
-
break;
|
|
235
|
-
case '14':
|
|
236
|
-
objectLayerFrameDirections = ['left_walking', 'up_left_walking', 'down_left_walking'];
|
|
237
|
-
break;
|
|
238
|
-
case '06':
|
|
239
|
-
objectLayerFrameDirections = ['right_idle', 'up_right_idle', 'down_right_idle'];
|
|
240
|
-
break;
|
|
241
|
-
case '16':
|
|
242
|
-
objectLayerFrameDirections = ['right_walking', 'up_right_walking', 'down_right_walking'];
|
|
243
|
-
break;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
return objectLayerFrameDirections;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
213
|
/**
|
|
250
214
|
* Processes an image file through {@link ObjectLayerEngine.frameFactory} and adds the resulting frame to the render data structure.
|
|
251
215
|
* Updates the color palette and pushes the frame to all keyframe directions corresponding to the given direction code.
|
|
@@ -278,7 +242,7 @@ export class ObjectLayerEngine {
|
|
|
278
242
|
objectLayerRenderFramesData.colors = processedObjectLayerRenderFramesData.colors;
|
|
279
243
|
|
|
280
244
|
// Get all keyframe directions for this direction code
|
|
281
|
-
const keyframeDirections =
|
|
245
|
+
const keyframeDirections = getKeyframeDirectionsByCode(directionCode);
|
|
282
246
|
|
|
283
247
|
// Push the frame to all corresponding directions
|
|
284
248
|
for (const keyframeDirection of keyframeDirections) {
|
|
@@ -355,23 +319,6 @@ export class ObjectLayerEngine {
|
|
|
355
319
|
await image.write(imagePath);
|
|
356
320
|
}
|
|
357
321
|
|
|
358
|
-
/**
|
|
359
|
-
* Generates a random set of character statistics for an item, with values between 0 and 10.
|
|
360
|
-
* @static
|
|
361
|
-
* @returns {{effect: number, resistance: number, agility: number, range: number, intelligence: number, utility: number}} The random stats object.
|
|
362
|
-
* @memberof CyberiaObjectLayer
|
|
363
|
-
*/
|
|
364
|
-
static generateRandomStats() {
|
|
365
|
-
return {
|
|
366
|
-
effect: random(0, 10),
|
|
367
|
-
resistance: random(0, 10),
|
|
368
|
-
agility: random(0, 10),
|
|
369
|
-
range: random(0, 10),
|
|
370
|
-
intelligence: random(0, 10),
|
|
371
|
-
utility: random(0, 10),
|
|
372
|
-
};
|
|
373
|
-
}
|
|
374
|
-
|
|
375
322
|
// ──────────────────────────────────────────────────────────────────────────
|
|
376
323
|
// Document lifecycle methods
|
|
377
324
|
// ──────────────────────────────────────────────────────────────────────────
|
|
@@ -441,7 +388,7 @@ export class ObjectLayerEngine {
|
|
|
441
388
|
description: '',
|
|
442
389
|
activable: true,
|
|
443
390
|
},
|
|
444
|
-
stats: metadata.data.stats ||
|
|
391
|
+
stats: metadata.data.stats || generateRandomStats(),
|
|
445
392
|
ledger: metadata.data.ledger || { type: 'OFF_CHAIN' },
|
|
446
393
|
},
|
|
447
394
|
};
|
|
@@ -454,7 +401,7 @@ export class ObjectLayerEngine {
|
|
|
454
401
|
description: '',
|
|
455
402
|
activable: true,
|
|
456
403
|
},
|
|
457
|
-
stats:
|
|
404
|
+
stats: generateRandomStats(),
|
|
458
405
|
ledger: { type: 'OFF_CHAIN' },
|
|
459
406
|
},
|
|
460
407
|
};
|
|
@@ -506,34 +453,6 @@ export class ObjectLayerEngine {
|
|
|
506
453
|
return crypto.createHash('sha256').update(stringify(data)).digest('hex');
|
|
507
454
|
}
|
|
508
455
|
|
|
509
|
-
/**
|
|
510
|
-
* Map of keyframe direction names to their numeric folder direction codes.
|
|
511
|
-
* Inverse of {@link ObjectLayerEngine.getKeyFramesDirectionsFromNumberFolderDirection}.
|
|
512
|
-
* @static
|
|
513
|
-
* @type {Object<string, string>}
|
|
514
|
-
* @memberof CyberiaObjectLayer
|
|
515
|
-
*/
|
|
516
|
-
static directionNameToCode = {
|
|
517
|
-
down_idle: '08',
|
|
518
|
-
none_idle: '08',
|
|
519
|
-
default_idle: '08',
|
|
520
|
-
up_idle: '02',
|
|
521
|
-
left_idle: '04',
|
|
522
|
-
up_left_idle: '04',
|
|
523
|
-
down_left_idle: '04',
|
|
524
|
-
right_idle: '06',
|
|
525
|
-
up_right_idle: '06',
|
|
526
|
-
down_right_idle: '06',
|
|
527
|
-
down_walking: '18',
|
|
528
|
-
up_walking: '12',
|
|
529
|
-
left_walking: '14',
|
|
530
|
-
up_left_walking: '14',
|
|
531
|
-
down_left_walking: '14',
|
|
532
|
-
right_walking: '16',
|
|
533
|
-
up_right_walking: '16',
|
|
534
|
-
down_right_walking: '16',
|
|
535
|
-
};
|
|
536
|
-
|
|
537
456
|
/**
|
|
538
457
|
* Writes frame PNGs and an optional metadata.json to one or more base asset
|
|
539
458
|
* directories. This is the shared write-to-disk step consumed by both the
|
|
@@ -571,7 +490,7 @@ export class ObjectLayerEngine {
|
|
|
571
490
|
cellPixelDim = 20,
|
|
572
491
|
}) {
|
|
573
492
|
const writtenPaths = [];
|
|
574
|
-
const dirToCode =
|
|
493
|
+
const dirToCode = OBJECT_LAYER_DIRECTION_NAME_TO_CODE;
|
|
575
494
|
|
|
576
495
|
for (const basePath of basePaths) {
|
|
577
496
|
// Track which directionCode/frameIndex combos we already wrote for
|
|
@@ -995,14 +914,6 @@ export const readPngAsync = ObjectLayerEngine.readPngAsync;
|
|
|
995
914
|
*/
|
|
996
915
|
export const frameFactory = ObjectLayerEngine.frameFactory;
|
|
997
916
|
|
|
998
|
-
/**
|
|
999
|
-
* @see {@link ObjectLayerEngine.getKeyFramesDirectionsFromNumberFolderDirection}
|
|
1000
|
-
* @function getKeyFramesDirectionsFromNumberFolderDirection
|
|
1001
|
-
* @memberof CyberiaObjectLayer
|
|
1002
|
-
*/
|
|
1003
|
-
export const getKeyFramesDirectionsFromNumberFolderDirection =
|
|
1004
|
-
ObjectLayerEngine.getKeyFramesDirectionsFromNumberFolderDirection;
|
|
1005
|
-
|
|
1006
917
|
/**
|
|
1007
918
|
* @see {@link ObjectLayerEngine.processAndPushFrame}
|
|
1008
919
|
* @function processAndPushFrame
|
|
@@ -1017,13 +928,6 @@ export const processAndPushFrame = ObjectLayerEngine.processAndPushFrame;
|
|
|
1017
928
|
*/
|
|
1018
929
|
export const buildImgFromTile = ObjectLayerEngine.buildImgFromTile;
|
|
1019
930
|
|
|
1020
|
-
/**
|
|
1021
|
-
* @see {@link ObjectLayerEngine.generateRandomStats}
|
|
1022
|
-
* @function generateRandomStats
|
|
1023
|
-
* @memberof CyberiaObjectLayer
|
|
1024
|
-
*/
|
|
1025
|
-
export const generateRandomStats = ObjectLayerEngine.generateRandomStats;
|
|
1026
|
-
|
|
1027
931
|
/**
|
|
1028
932
|
* @see {@link ObjectLayerEngine.buildObjectLayerDataFromDirectory}
|
|
1029
933
|
* @function buildObjectLayerDataFromDirectory
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* parent module (circular import is safe because the function body is only
|
|
10
10
|
* executed after module initialisation completes).
|
|
11
11
|
*
|
|
12
|
-
* @module src/
|
|
12
|
+
* @module src/projects/cyberia/semantic-layer-generator-floor.js
|
|
13
13
|
* @namespace SemanticLayerGeneratorFloor
|
|
14
14
|
*/
|
|
15
15
|
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* frame pipeline (`down_idle` / `default_idle`) is used — matching the
|
|
24
24
|
* stateless, non-directional nature of world-placed resource pickups.
|
|
25
25
|
*
|
|
26
|
-
* @module src/
|
|
26
|
+
* @module src/projects/cyberia/semantic-layer-generator-resource.js
|
|
27
27
|
* @namespace SemanticLayerGeneratorResource
|
|
28
28
|
*/
|
|
29
29
|
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* The canonical side template is direction 06 (right); LEFT is derived by
|
|
25
25
|
* mirroring it so generated frame keys stay aligned with 04 = left and 06 = right.
|
|
26
26
|
*
|
|
27
|
-
* @module src/
|
|
27
|
+
* @module src/projects/cyberia/semantic-layer-generator-skin.js
|
|
28
28
|
* @namespace SemanticLayerGeneratorSkin
|
|
29
29
|
*/
|
|
30
30
|
import { readFileSync } from 'fs';
|
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
* • semantic-layer-generator-floor.js — all floor-* descriptors
|
|
13
13
|
* • semantic-layer-generator-skin.js — skin-* descriptors
|
|
14
14
|
*
|
|
15
|
-
* @module src/
|
|
15
|
+
* @module src/projects/cyberia/semantic-layer-generator.js
|
|
16
16
|
* @namespace SemanticLayerGenerator
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
import crypto from 'crypto';
|
|
20
20
|
|
|
21
21
|
import { createRng, seedToInt, createNoise2D, generateShape, listShapes } from './shape-generator.js';
|
|
22
|
-
import { loggerFactory } from '
|
|
22
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
23
23
|
|
|
24
24
|
import { registerFloorSemantics } from './semantic-layer-generator-floor.js';
|
|
25
25
|
import { registerSkinSemantics } from './semantic-layer-generator-skin.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Parametric shape generator with procedural noise, seeded RNG, and arc-length resampling.
|
|
3
3
|
* Exports a single pure function `generateShape` that returns ordered contour points.
|
|
4
|
-
* @module src/
|
|
4
|
+
* @module src/projects/cyberia/shape-generator.js
|
|
5
5
|
* @namespace ShapeGenerator
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -161,7 +161,7 @@ registerShape('thick-parabola', (t, params) => {
|
|
|
161
161
|
// `a` controls curvature, `rangeX` controls horizontal span, and
|
|
162
162
|
// `thickness` controls band width (vertical gap between outer/inner).
|
|
163
163
|
const a = params.a ?? 0.6;
|
|
164
|
-
const rangeX = params.rangeX ??
|
|
164
|
+
const rangeX = params.rangeX ?? 2.0;
|
|
165
165
|
const thickness = params.thickness ?? 0.35;
|
|
166
166
|
if (t <= 0.5) {
|
|
167
167
|
// Outer parabola (forward: left → right)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Underpost platform content catalog — the base `pwa-microservices-template`.
|
|
3
3
|
*
|
|
4
|
-
* @module src/
|
|
4
|
+
* @module src/projects/underpost/catalog-underpost.js
|
|
5
5
|
* @namespace UnderpostCatalog
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
* @memberof UnderpostCatalog
|
|
12
12
|
*/
|
|
13
13
|
const TEMPLATE_RESTORE_PATHS = [
|
|
14
|
-
`./src/server/catalog-underpost.js`,
|
|
15
14
|
`./.github/workflows/pwa-microservices-template-page.cd.yml`,
|
|
16
15
|
`./.github/workflows/pwa-microservices-template-test.ci.yml`,
|
|
17
16
|
`./.github/workflows/npmpkg.ci.yml`,
|
|
@@ -2,82 +2,48 @@
|
|
|
2
2
|
ARG BUILD_MODE=RELEASE
|
|
3
3
|
|
|
4
4
|
# --- Build Image ---
|
|
5
|
-
FROM
|
|
5
|
+
FROM emscripten/emsdk:5.0.6 AS builder
|
|
6
6
|
|
|
7
7
|
ARG BUILD_MODE=RELEASE
|
|
8
8
|
|
|
9
|
-
RUN dnf -y update && \
|
|
10
|
-
dnf -y install epel-release && \
|
|
11
|
-
dnf -y install --allowerasing \
|
|
12
|
-
git \
|
|
13
|
-
curl \
|
|
14
|
-
wget \
|
|
15
|
-
openssl-devel \
|
|
16
|
-
libnsl \
|
|
17
|
-
perl \
|
|
18
|
-
gnupg2 \
|
|
19
|
-
bzip2 && \
|
|
20
|
-
dnf clean all
|
|
21
|
-
|
|
22
|
-
# System packages (raylib gfx + build dependencies)
|
|
23
|
-
RUN dnf groupinstall -y "Development Tools" && \
|
|
24
|
-
dnf install -y \
|
|
25
|
-
cmake \
|
|
26
|
-
unzip \
|
|
27
|
-
python3 \
|
|
28
|
-
python3.11 \
|
|
29
|
-
alsa-lib-devel \
|
|
30
|
-
mesa-libGL-devel \
|
|
31
|
-
mesa-libGLU-devel \
|
|
32
|
-
libX11-devel \
|
|
33
|
-
libXrandr-devel \
|
|
34
|
-
libXi-devel \
|
|
35
|
-
libXcursor-devel \
|
|
36
|
-
libXinerama-devel \
|
|
37
|
-
libXfixes-devel \
|
|
38
|
-
freeglut-devel \
|
|
39
|
-
glfw-devel \
|
|
40
|
-
libatomic.x86_64 && \
|
|
41
|
-
dnf clean all && \
|
|
42
|
-
alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 2 && \
|
|
43
|
-
alternatives --set python3 /usr/bin/python3.11
|
|
44
|
-
ENV EMSDK=/opt/emsdk
|
|
45
|
-
ENV PATH="${EMSDK}:${EMSDK}/upstream/emscripten:${PATH}"
|
|
46
|
-
|
|
47
|
-
ARG EMSDK_VERSION=5.0.6
|
|
48
|
-
WORKDIR /opt
|
|
49
|
-
RUN git clone https://github.com/emscripten-core/emsdk.git ${EMSDK}
|
|
50
|
-
WORKDIR ${EMSDK}
|
|
51
|
-
RUN ./emsdk install ${EMSDK_VERSION} && \
|
|
52
|
-
./emsdk activate ${EMSDK_VERSION}
|
|
53
|
-
|
|
54
9
|
WORKDIR /cyberia-client
|
|
55
10
|
|
|
56
11
|
COPY . .
|
|
57
12
|
|
|
58
|
-
RUN make -f Web.mk clean
|
|
13
|
+
RUN make -f Web.mk clean all BUILD_MODE=${BUILD_MODE} OUTPUT_DIR=bin/
|
|
59
14
|
|
|
60
15
|
# --- Runtime Image ---
|
|
61
16
|
FROM rockylinux/rockylinux:9 AS runtime
|
|
62
|
-
|
|
63
|
-
ARG
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
dnf -y
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
17
|
+
ARG UNDERPOST_VERSION=3.2.70
|
|
18
|
+
ARG NODE_VERSION=24.15.0
|
|
19
|
+
|
|
20
|
+
RUN set -eux; \
|
|
21
|
+
dnf install -y python3 git tar xz; \
|
|
22
|
+
arch="$(uname -m)"; \
|
|
23
|
+
case "$arch" in \
|
|
24
|
+
x86_64) node_arch=x64 ;; \
|
|
25
|
+
aarch64) node_arch=arm64 ;; \
|
|
26
|
+
*) echo "unsupported arch: $arch" >&2; exit 1 ;; \
|
|
27
|
+
esac; \
|
|
28
|
+
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${node_arch}.tar.xz" \
|
|
29
|
+
| tar -xJ -C /usr/local --strip-components=1; \
|
|
30
|
+
node --version; npm --version; \
|
|
31
|
+
npm install -g underpost@${UNDERPOST_VERSION}; \
|
|
32
|
+
dnf clean all; rm -rf /var/cache/dnf; \
|
|
71
33
|
npm cache clean --force
|
|
72
34
|
|
|
35
|
+
# Path + server layout is the contract with conf.instances.json mmo-client cmd,
|
|
36
|
+
# which execs `python3 /home/dd/engine/cyberia-client/docker-driver.py <port>
|
|
37
|
+
# /home/dd/engine/cyberia-client/bin` in both development and production.
|
|
38
|
+
# Keep this identical to Dockerfile.dev so prod and dev images are interchangeable.
|
|
73
39
|
WORKDIR /home/dd/engine/cyberia-client
|
|
74
40
|
|
|
75
|
-
COPY --from=builder /cyberia-client/
|
|
76
|
-
COPY --from=builder /cyberia-client/bin
|
|
41
|
+
COPY --from=builder /cyberia-client/docker-driver.py ./docker-driver.py
|
|
42
|
+
COPY --from=builder /cyberia-client/bin ./bin/
|
|
77
43
|
|
|
44
|
+
ENV PYTHONUNBUFFERED=1
|
|
78
45
|
ENV CYBERIA_PORT=8081
|
|
79
|
-
ENV CYBERIA_MODE=production
|
|
80
46
|
|
|
81
|
-
EXPOSE 8081
|
|
47
|
+
EXPOSE 8081
|
|
82
48
|
|
|
83
|
-
CMD ["sh", "-c", "exec python3
|
|
49
|
+
CMD ["sh", "-c", "exec python3 docker-driver.py ${CYBERIA_PORT} bin"]
|
|
@@ -43,25 +43,33 @@ RUN make -f Web.mk all BUILD_MODE=${BUILD_MODE} OUTPUT_DIR=bin/
|
|
|
43
43
|
# --- Runtime Image ---
|
|
44
44
|
FROM rockylinux/rockylinux:9 AS runtime
|
|
45
45
|
|
|
46
|
-
ARG UNDERPOST_VERSION=3.2.
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
ARG UNDERPOST_VERSION=3.2.70
|
|
47
|
+
ARG NODE_VERSION=24.15.0
|
|
48
|
+
RUN set -eux; \
|
|
49
|
+
dnf -y update; \
|
|
50
|
+
dnf -y install epel-release; \
|
|
49
51
|
dnf -y install --allowerasing \
|
|
50
|
-
curl git python3 \
|
|
51
|
-
procps-ng strace lsof vim-minimal
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
curl git python3 tar xz \
|
|
53
|
+
procps-ng strace lsof vim-minimal; \
|
|
54
|
+
arch="$(uname -m)"; \
|
|
55
|
+
case "$arch" in \
|
|
56
|
+
x86_64) node_arch=x64 ;; \
|
|
57
|
+
aarch64) node_arch=arm64 ;; \
|
|
58
|
+
*) echo "unsupported arch: $arch" >&2; exit 1 ;; \
|
|
59
|
+
esac; \
|
|
60
|
+
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${node_arch}.tar.xz" \
|
|
61
|
+
| tar -xJ -C /usr/local --strip-components=1; \
|
|
62
|
+
node --version; npm --version; \
|
|
63
|
+
npm install -g underpost@${UNDERPOST_VERSION}; \
|
|
55
64
|
dnf clean all
|
|
56
65
|
|
|
57
66
|
WORKDIR /home/dd/engine/cyberia-client
|
|
58
67
|
|
|
59
|
-
COPY --from=builder /cyberia-client/
|
|
60
|
-
COPY --from=builder /cyberia-client/bin
|
|
68
|
+
COPY --from=builder /cyberia-client/docker-driver.py ./docker-driver.py
|
|
69
|
+
COPY --from=builder /cyberia-client/bin ./bin/
|
|
61
70
|
|
|
62
71
|
ENV CYBERIA_PORT=8082
|
|
63
|
-
ENV CYBERIA_MODE=development
|
|
64
72
|
|
|
65
73
|
EXPOSE 8081 8082
|
|
66
74
|
|
|
67
|
-
CMD ["sh", "-c", "exec python3
|
|
75
|
+
CMD ["sh", "-c", "exec python3 docker-driver.py ${CYBERIA_PORT} bin"]
|
|
@@ -1,36 +1,37 @@
|
|
|
1
1
|
# --- Build Image ---
|
|
2
|
-
FROM
|
|
3
|
-
|
|
4
|
-
RUN dnf -y update && \
|
|
5
|
-
dnf -y install epel-release && \
|
|
6
|
-
dnf -y install --allowerasing \
|
|
7
|
-
git \
|
|
8
|
-
make \
|
|
9
|
-
golang && \
|
|
10
|
-
dnf clean all
|
|
2
|
+
FROM golang:1.24 AS builder
|
|
11
3
|
|
|
12
4
|
WORKDIR /build
|
|
13
5
|
|
|
14
|
-
|
|
15
6
|
COPY go.mod go.sum ./
|
|
16
7
|
RUN go mod download
|
|
17
8
|
|
|
18
9
|
COPY . ./
|
|
19
|
-
RUN
|
|
10
|
+
RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o server ./cmd/cyberia-server/
|
|
20
11
|
|
|
21
12
|
# --- Runtime Image ---
|
|
22
13
|
FROM rockylinux/rockylinux:9 AS runtime
|
|
23
|
-
|
|
24
|
-
ARG
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
dnf -y
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
14
|
+
ARG UNDERPOST_VERSION=3.2.70
|
|
15
|
+
ARG NODE_VERSION=24.15.0
|
|
16
|
+
|
|
17
|
+
RUN set -eux; \
|
|
18
|
+
dnf install -y git tar xz; \
|
|
19
|
+
arch="$(uname -m)"; \
|
|
20
|
+
case "$arch" in \
|
|
21
|
+
x86_64) node_arch=x64 ;; \
|
|
22
|
+
aarch64) node_arch=arm64 ;; \
|
|
23
|
+
*) echo "unsupported arch: $arch" >&2; exit 1 ;; \
|
|
24
|
+
esac; \
|
|
25
|
+
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${node_arch}.tar.xz" \
|
|
26
|
+
| tar -xJ -C /usr/local --strip-components=1; \
|
|
27
|
+
node --version; npm --version; \
|
|
28
|
+
npm install -g underpost@${UNDERPOST_VERSION}; \
|
|
29
|
+
dnf clean all; rm -rf /var/cache/dnf; \
|
|
32
30
|
npm cache clean --force
|
|
33
31
|
|
|
32
|
+
# Path is the contract with conf.instances.json mmo-server cmd, which execs
|
|
33
|
+
# /home/dd/engine/cyberia-server/server in both development and production.
|
|
34
|
+
# Keep this identical to Dockerfile.dev so prod and dev images are interchangeable.
|
|
34
35
|
WORKDIR /home/dd/engine/cyberia-server
|
|
35
36
|
|
|
36
37
|
COPY --from=builder /build/server ./server
|
|
@@ -25,15 +25,24 @@ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
|
|
|
25
25
|
# --- Runtime Image ---
|
|
26
26
|
FROM rockylinux/rockylinux:9 AS runtime
|
|
27
27
|
|
|
28
|
-
ARG UNDERPOST_VERSION=3.2.
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
ARG UNDERPOST_VERSION=3.2.70
|
|
29
|
+
ARG NODE_VERSION=24.15.0
|
|
30
|
+
RUN set -eux; \
|
|
31
|
+
dnf -y update; \
|
|
32
|
+
dnf -y install epel-release; \
|
|
31
33
|
dnf -y install --allowerasing \
|
|
32
|
-
curl git \
|
|
33
|
-
procps-ng strace lsof vim-minimal
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
curl git tar xz \
|
|
35
|
+
procps-ng strace lsof vim-minimal; \
|
|
36
|
+
arch="$(uname -m)"; \
|
|
37
|
+
case "$arch" in \
|
|
38
|
+
x86_64) node_arch=x64 ;; \
|
|
39
|
+
aarch64) node_arch=arm64 ;; \
|
|
40
|
+
*) echo "unsupported arch: $arch" >&2; exit 1 ;; \
|
|
41
|
+
esac; \
|
|
42
|
+
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${node_arch}.tar.xz" \
|
|
43
|
+
| tar -xJ -C /usr/local --strip-components=1; \
|
|
44
|
+
node --version; npm --version; \
|
|
45
|
+
npm install -g underpost@${UNDERPOST_VERSION}; \
|
|
37
46
|
dnf clean all
|
|
38
47
|
|
|
39
48
|
WORKDIR /home/dd/engine/cyberia-server
|