Add ink integration UI and media playback
This commit is contained in:
Vendored
+94
@@ -0,0 +1,94 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.projectPath = projectPath;
|
||||
exports.loadGameConfig = loadGameConfig;
|
||||
exports.ensureConfiguredAssetDirectories = ensureConfiguredAssetDirectories;
|
||||
exports.clientGameConfig = clientGameConfig;
|
||||
const path_1 = __importDefault(require("path"));
|
||||
const fs_1 = require("fs");
|
||||
const PROJECT_ROOT = path_1.default.resolve(__dirname, '../..');
|
||||
function fallbackConfig(engine) {
|
||||
return {
|
||||
engine,
|
||||
locale: 'en_US',
|
||||
paths: {
|
||||
mainGameFile: engine === 'ink'
|
||||
? 'data/ink/story.ink.json'
|
||||
: engine === 'zork'
|
||||
? 'data/z-code/zork1.bin'
|
||||
: 'data/worlds/example_world.yml',
|
||||
music: 'public/music',
|
||||
sfx: 'public/sounds',
|
||||
images: 'public/images',
|
||||
},
|
||||
metadata: {
|
||||
title: 'AI Interactive Fiction',
|
||||
author: 'Generative AI',
|
||||
subtitle: 'An open-world text adventure',
|
||||
version: '1.0.0',
|
||||
copyright: '',
|
||||
},
|
||||
};
|
||||
}
|
||||
function projectPath(relativeOrAbsolutePath) {
|
||||
return path_1.default.isAbsolute(relativeOrAbsolutePath)
|
||||
? relativeOrAbsolutePath
|
||||
: path_1.default.resolve(PROJECT_ROOT, relativeOrAbsolutePath);
|
||||
}
|
||||
function loadGameConfig(configPath, engine) {
|
||||
const absolutePath = projectPath(configPath);
|
||||
if (!(0, fs_1.existsSync)(absolutePath)) {
|
||||
console.warn(`[config] Missing ${absolutePath}; using ${engine} defaults.`);
|
||||
return fallbackConfig(engine);
|
||||
}
|
||||
const parsed = JSON.parse((0, fs_1.readFileSync)(absolutePath, 'utf8'));
|
||||
const fallback = fallbackConfig(engine);
|
||||
return {
|
||||
engine: parsed.engine ?? fallback.engine,
|
||||
locale: parsed.locale ?? fallback.locale,
|
||||
paths: {
|
||||
...fallback.paths,
|
||||
...(parsed.paths ?? {}),
|
||||
},
|
||||
metadata: {
|
||||
...fallback.metadata,
|
||||
...(parsed.metadata ?? {}),
|
||||
},
|
||||
};
|
||||
}
|
||||
function ensureConfiguredAssetDirectories(config) {
|
||||
const directories = [
|
||||
config.paths.music,
|
||||
config.paths.sfx,
|
||||
config.paths.images,
|
||||
config.paths.inkSource ? path_1.default.dirname(config.paths.inkSource) : undefined,
|
||||
config.paths.inkCompiled ? path_1.default.dirname(config.paths.inkCompiled) : undefined,
|
||||
config.paths.mainGameFile ? path_1.default.dirname(config.paths.mainGameFile) : undefined,
|
||||
config.paths.promptDir,
|
||||
];
|
||||
for (const directory of directories) {
|
||||
if (!directory)
|
||||
continue;
|
||||
const absolutePath = projectPath(directory);
|
||||
if (!(0, fs_1.existsSync)(absolutePath)) {
|
||||
(0, fs_1.mkdirSync)(absolutePath, { recursive: true });
|
||||
}
|
||||
}
|
||||
}
|
||||
function clientGameConfig(config) {
|
||||
return {
|
||||
engine: config.engine,
|
||||
locale: config.locale,
|
||||
metadata: config.metadata,
|
||||
assets: {
|
||||
music: '/music/',
|
||||
sfx: '/sounds/',
|
||||
sounds: '/sounds/',
|
||||
images: '/images/',
|
||||
},
|
||||
};
|
||||
}
|
||||
//# sourceMappingURL=game-config.js.map
|
||||
Reference in New Issue
Block a user