@directivegames/genesys.sdk 3.2.2 → 3.2.4
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 +60 -60
- package/dist/src/core/cli.js +22 -22
- package/dist/src/templates/scripts/genesys/genesys-mcp.js +25 -25
- package/dist/src/templates/scripts/genesys/mcp/editor-functions.js +4 -4
- package/dist/src/templates/src/templates/vehicle/src/ui-hints.js +30 -30
- package/package.json +176 -176
- package/scripts/post-install.ts +143 -143
- package/src/asset-pack/.gitattributes +88 -88
- package/src/asset-pack/eslint.config.js +45 -45
- package/src/asset-pack/gitignore +11 -11
- package/src/asset-pack/scripts/postinstall.ts +81 -81
- package/src/asset-pack/tsconfig.json +33 -33
- package/src/templates/.cursor/mcp.json +20 -20
- package/src/templates/.cursorignore +2 -2
- package/src/templates/.gitattributes +88 -88
- package/src/templates/.vscode/settings.json +6 -6
- package/src/templates/AGENTS.md +86 -86
- package/src/templates/README.md +24 -24
- package/src/templates/eslint.config.js +45 -45
- package/src/templates/gitignore +11 -11
- package/src/templates/index.html +34 -34
- package/src/templates/pnpm-lock.yaml +3676 -3676
- package/src/templates/scripts/genesys/build-project.ts +51 -51
- package/src/templates/scripts/genesys/calc-bounding-box.ts +272 -272
- package/src/templates/scripts/genesys/common.ts +46 -46
- package/src/templates/scripts/genesys/const.ts +9 -9
- package/src/templates/scripts/genesys/dev/dump-default-scene.ts +11 -11
- package/src/templates/scripts/genesys/dev/generate-manifest.ts +146 -146
- package/src/templates/scripts/genesys/dev/launcher.ts +46 -46
- package/src/templates/scripts/genesys/dev/storage-provider.ts +229 -229
- package/src/templates/scripts/genesys/dev/update-template-scenes.ts +84 -84
- package/src/templates/scripts/genesys/doc-server.ts +16 -16
- package/src/templates/scripts/genesys/genesys-mcp.ts +526 -526
- package/src/templates/scripts/genesys/mcp/doc-tools.ts +86 -86
- package/src/templates/scripts/genesys/mcp/editor-functions.ts +151 -151
- package/src/templates/scripts/genesys/mcp/editor-tools.ts +73 -73
- package/src/templates/scripts/genesys/mcp/get-scene-state.ts +35 -35
- package/src/templates/scripts/genesys/mcp/run-subprocess.ts +30 -30
- package/src/templates/scripts/genesys/mcp/search-actors.ts +858 -858
- package/src/templates/scripts/genesys/mcp/search-assets.ts +380 -380
- package/src/templates/scripts/genesys/mcp/utils.ts +281 -281
- package/src/templates/scripts/genesys/misc.ts +42 -42
- package/src/templates/scripts/genesys/mock.ts +6 -6
- package/src/templates/scripts/genesys/place-actors.ts +179 -179
- package/src/templates/scripts/genesys/post-install.ts +30 -30
- package/src/templates/scripts/genesys/prefab.schema.json +84 -84
- package/src/templates/scripts/genesys/remove-engine-comments.ts +134 -134
- package/src/templates/scripts/genesys/run-mcp-inspector.bat +4 -4
- package/src/templates/scripts/genesys/storageProvider.ts +182 -182
- package/src/templates/scripts/genesys/validate-prefabs.ts +138 -138
- package/src/templates/src/index.ts +22 -22
- package/src/templates/src/templates/firstPerson/assets/default.genesys-scene +165 -165
- package/src/templates/src/templates/firstPerson/src/game.ts +39 -39
- package/src/templates/src/templates/firstPerson/src/player.ts +63 -63
- package/src/templates/src/templates/fps/assets/default.genesys-scene +9459 -9459
- package/src/templates/src/templates/fps/src/game.ts +39 -39
- package/src/templates/src/templates/fps/src/player.ts +69 -69
- package/src/templates/src/templates/fps/src/weapon.ts +54 -54
- package/src/templates/src/templates/freeCamera/assets/default.genesys-scene +165 -165
- package/src/templates/src/templates/freeCamera/src/game.ts +39 -39
- package/src/templates/src/templates/freeCamera/src/player.ts +45 -45
- package/src/templates/src/templates/sideScroller/assets/default.genesys-scene +121 -121
- package/src/templates/src/templates/sideScroller/src/const.ts +45 -45
- package/src/templates/src/templates/sideScroller/src/game.ts +122 -122
- package/src/templates/src/templates/sideScroller/src/level-generator.ts +361 -361
- package/src/templates/src/templates/sideScroller/src/player.ts +125 -125
- package/src/templates/src/templates/thirdPerson/assets/default.genesys-scene +165 -165
- package/src/templates/src/templates/thirdPerson/src/game.ts +39 -39
- package/src/templates/src/templates/thirdPerson/src/player.ts +61 -61
- package/src/templates/src/templates/vehicle/assets/default.genesys-scene +225 -225
- package/src/templates/src/templates/vehicle/src/base-vehicle.ts +145 -145
- package/src/templates/src/templates/vehicle/src/game.ts +43 -43
- package/src/templates/src/templates/vehicle/src/mesh-vehicle.ts +191 -191
- package/src/templates/src/templates/vehicle/src/player.ts +109 -109
- package/src/templates/src/templates/vehicle/src/primitive-vehicle.ts +266 -266
- package/src/templates/src/templates/vehicle/src/ui-hints.ts +101 -101
- package/src/templates/src/templates/vr-game/assets/default.genesys-scene +246 -246
- package/src/templates/src/templates/vr-game/src/auto-imports.ts +1 -1
- package/src/templates/src/templates/vr-game/src/game.ts +66 -66
- package/src/templates/src/templates/vr-game/src/sample-vr-actor.ts +26 -26
- package/src/templates/tsconfig.json +34 -34
- package/src/templates/vite.config.ts +52 -52
|
@@ -1,138 +1,138 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
|
|
4
|
-
import Ajv, { type ErrorObject } from 'ajv';
|
|
5
|
-
|
|
6
|
-
import { getProjectRoot } from './common.js';
|
|
7
|
-
|
|
8
|
-
interface ValidationError {
|
|
9
|
-
file: string;
|
|
10
|
-
errors: string[];
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
function findPrefabFiles(dir: string, prefabFiles: string[] = []): string[] {
|
|
14
|
-
const files = fs.readdirSync(dir);
|
|
15
|
-
|
|
16
|
-
for (const file of files) {
|
|
17
|
-
const filePath = path.join(dir, file);
|
|
18
|
-
const stat = fs.statSync(filePath);
|
|
19
|
-
|
|
20
|
-
if (stat.isDirectory()) {
|
|
21
|
-
// Skip node_modules and other common directories that shouldn't contain prefabs
|
|
22
|
-
if (file === 'node_modules' || file === 'dist' || file === '.git') {
|
|
23
|
-
continue;
|
|
24
|
-
}
|
|
25
|
-
findPrefabFiles(filePath, prefabFiles);
|
|
26
|
-
} else if (file.endsWith('.prefab.json')) {
|
|
27
|
-
prefabFiles.push(filePath);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
return prefabFiles;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function validatePrefabs() {
|
|
35
|
-
const projectRoot = getProjectRoot();
|
|
36
|
-
const schemaPath = path.join(__dirname, 'prefab.schema.json');
|
|
37
|
-
|
|
38
|
-
// Load the schema
|
|
39
|
-
let schema: any;
|
|
40
|
-
try {
|
|
41
|
-
const schemaContent = fs.readFileSync(schemaPath, 'utf-8');
|
|
42
|
-
schema = JSON.parse(schemaContent);
|
|
43
|
-
} catch (error) {
|
|
44
|
-
console.error(`❌ Failed to load schema from ${schemaPath}`);
|
|
45
|
-
console.error(error);
|
|
46
|
-
process.exit(1);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// Initialize Ajv
|
|
50
|
-
const ajv = new (Ajv as any)({
|
|
51
|
-
allErrors: true,
|
|
52
|
-
validateSchema: false // Don't validate the schema itself
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
// Process $ref in the schema to use proper format
|
|
56
|
-
const processedSchema = JSON.parse(JSON.stringify(schema), (key, value) => {
|
|
57
|
-
if (key === '$ref' && typeof value === 'string' && !value.startsWith('#')) {
|
|
58
|
-
return `#/definitions/${value}`;
|
|
59
|
-
}
|
|
60
|
-
return value;
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
const validate = ajv.compile(processedSchema);
|
|
64
|
-
|
|
65
|
-
// Find all prefab files
|
|
66
|
-
const prefabFiles = findPrefabFiles(projectRoot);
|
|
67
|
-
|
|
68
|
-
if (prefabFiles.length === 0) {
|
|
69
|
-
console.log('⚠️ No prefab files found in the project.');
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
console.log(`Found ${prefabFiles.length} prefab file(s) to validate:\n`);
|
|
74
|
-
|
|
75
|
-
const validationErrors: ValidationError[] = [];
|
|
76
|
-
let validCount = 0;
|
|
77
|
-
|
|
78
|
-
// Validate each prefab file
|
|
79
|
-
for (const prefabPath of prefabFiles) {
|
|
80
|
-
const relativePath = path.relative(projectRoot, prefabPath);
|
|
81
|
-
|
|
82
|
-
try {
|
|
83
|
-
const prefabContent = fs.readFileSync(prefabPath, 'utf-8');
|
|
84
|
-
const prefabData = JSON.parse(prefabContent);
|
|
85
|
-
|
|
86
|
-
const valid = validate(prefabData);
|
|
87
|
-
|
|
88
|
-
if (valid) {
|
|
89
|
-
console.log(`✅ ${relativePath}`);
|
|
90
|
-
validCount++;
|
|
91
|
-
} else {
|
|
92
|
-
console.log(`❌ ${relativePath}`);
|
|
93
|
-
const errors = validate.errors?.map((err: ErrorObject) => {
|
|
94
|
-
const path = (err as any).instancePath ?? '/';
|
|
95
|
-
const message = err.message ?? 'unknown error';
|
|
96
|
-
return ` - ${path}: ${message}`;
|
|
97
|
-
}) ?? [];
|
|
98
|
-
validationErrors.push({
|
|
99
|
-
file: relativePath,
|
|
100
|
-
errors
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
} catch (error) {
|
|
104
|
-
console.log(`❌ ${relativePath} (parse error)`);
|
|
105
|
-
validationErrors.push({
|
|
106
|
-
file: relativePath,
|
|
107
|
-
errors: [`Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`]
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// Print summary
|
|
113
|
-
console.log(`\n${'='.repeat(60)}`);
|
|
114
|
-
console.log('Validation Summary:');
|
|
115
|
-
console.log(` Total files: ${prefabFiles.length}`);
|
|
116
|
-
console.log(` Valid: ${validCount}`);
|
|
117
|
-
console.log(` Invalid: ${validationErrors.length}`);
|
|
118
|
-
console.log(`${'='.repeat(60)}\n`);
|
|
119
|
-
|
|
120
|
-
// Print detailed errors if any
|
|
121
|
-
if (validationErrors.length > 0) {
|
|
122
|
-
console.log('Validation Errors:\n');
|
|
123
|
-
for (const { file, errors } of validationErrors) {
|
|
124
|
-
console.log(`${file}:`);
|
|
125
|
-
for (const error of errors) {
|
|
126
|
-
console.log(error);
|
|
127
|
-
}
|
|
128
|
-
console.log('');
|
|
129
|
-
}
|
|
130
|
-
process.exit(1);
|
|
131
|
-
} else {
|
|
132
|
-
console.log('🎉 All prefab files are valid!');
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Run validation
|
|
137
|
-
validatePrefabs();
|
|
138
|
-
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
|
|
4
|
+
import Ajv, { type ErrorObject } from 'ajv';
|
|
5
|
+
|
|
6
|
+
import { getProjectRoot } from './common.js';
|
|
7
|
+
|
|
8
|
+
interface ValidationError {
|
|
9
|
+
file: string;
|
|
10
|
+
errors: string[];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function findPrefabFiles(dir: string, prefabFiles: string[] = []): string[] {
|
|
14
|
+
const files = fs.readdirSync(dir);
|
|
15
|
+
|
|
16
|
+
for (const file of files) {
|
|
17
|
+
const filePath = path.join(dir, file);
|
|
18
|
+
const stat = fs.statSync(filePath);
|
|
19
|
+
|
|
20
|
+
if (stat.isDirectory()) {
|
|
21
|
+
// Skip node_modules and other common directories that shouldn't contain prefabs
|
|
22
|
+
if (file === 'node_modules' || file === 'dist' || file === '.git') {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
findPrefabFiles(filePath, prefabFiles);
|
|
26
|
+
} else if (file.endsWith('.prefab.json')) {
|
|
27
|
+
prefabFiles.push(filePath);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return prefabFiles;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function validatePrefabs() {
|
|
35
|
+
const projectRoot = getProjectRoot();
|
|
36
|
+
const schemaPath = path.join(__dirname, 'prefab.schema.json');
|
|
37
|
+
|
|
38
|
+
// Load the schema
|
|
39
|
+
let schema: any;
|
|
40
|
+
try {
|
|
41
|
+
const schemaContent = fs.readFileSync(schemaPath, 'utf-8');
|
|
42
|
+
schema = JSON.parse(schemaContent);
|
|
43
|
+
} catch (error) {
|
|
44
|
+
console.error(`❌ Failed to load schema from ${schemaPath}`);
|
|
45
|
+
console.error(error);
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Initialize Ajv
|
|
50
|
+
const ajv = new (Ajv as any)({
|
|
51
|
+
allErrors: true,
|
|
52
|
+
validateSchema: false // Don't validate the schema itself
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// Process $ref in the schema to use proper format
|
|
56
|
+
const processedSchema = JSON.parse(JSON.stringify(schema), (key, value) => {
|
|
57
|
+
if (key === '$ref' && typeof value === 'string' && !value.startsWith('#')) {
|
|
58
|
+
return `#/definitions/${value}`;
|
|
59
|
+
}
|
|
60
|
+
return value;
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
const validate = ajv.compile(processedSchema);
|
|
64
|
+
|
|
65
|
+
// Find all prefab files
|
|
66
|
+
const prefabFiles = findPrefabFiles(projectRoot);
|
|
67
|
+
|
|
68
|
+
if (prefabFiles.length === 0) {
|
|
69
|
+
console.log('⚠️ No prefab files found in the project.');
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
console.log(`Found ${prefabFiles.length} prefab file(s) to validate:\n`);
|
|
74
|
+
|
|
75
|
+
const validationErrors: ValidationError[] = [];
|
|
76
|
+
let validCount = 0;
|
|
77
|
+
|
|
78
|
+
// Validate each prefab file
|
|
79
|
+
for (const prefabPath of prefabFiles) {
|
|
80
|
+
const relativePath = path.relative(projectRoot, prefabPath);
|
|
81
|
+
|
|
82
|
+
try {
|
|
83
|
+
const prefabContent = fs.readFileSync(prefabPath, 'utf-8');
|
|
84
|
+
const prefabData = JSON.parse(prefabContent);
|
|
85
|
+
|
|
86
|
+
const valid = validate(prefabData);
|
|
87
|
+
|
|
88
|
+
if (valid) {
|
|
89
|
+
console.log(`✅ ${relativePath}`);
|
|
90
|
+
validCount++;
|
|
91
|
+
} else {
|
|
92
|
+
console.log(`❌ ${relativePath}`);
|
|
93
|
+
const errors = validate.errors?.map((err: ErrorObject) => {
|
|
94
|
+
const path = (err as any).instancePath ?? '/';
|
|
95
|
+
const message = err.message ?? 'unknown error';
|
|
96
|
+
return ` - ${path}: ${message}`;
|
|
97
|
+
}) ?? [];
|
|
98
|
+
validationErrors.push({
|
|
99
|
+
file: relativePath,
|
|
100
|
+
errors
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
} catch (error) {
|
|
104
|
+
console.log(`❌ ${relativePath} (parse error)`);
|
|
105
|
+
validationErrors.push({
|
|
106
|
+
file: relativePath,
|
|
107
|
+
errors: [`Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`]
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Print summary
|
|
113
|
+
console.log(`\n${'='.repeat(60)}`);
|
|
114
|
+
console.log('Validation Summary:');
|
|
115
|
+
console.log(` Total files: ${prefabFiles.length}`);
|
|
116
|
+
console.log(` Valid: ${validCount}`);
|
|
117
|
+
console.log(` Invalid: ${validationErrors.length}`);
|
|
118
|
+
console.log(`${'='.repeat(60)}\n`);
|
|
119
|
+
|
|
120
|
+
// Print detailed errors if any
|
|
121
|
+
if (validationErrors.length > 0) {
|
|
122
|
+
console.log('Validation Errors:\n');
|
|
123
|
+
for (const { file, errors } of validationErrors) {
|
|
124
|
+
console.log(`${file}:`);
|
|
125
|
+
for (const error of errors) {
|
|
126
|
+
console.log(error);
|
|
127
|
+
}
|
|
128
|
+
console.log('');
|
|
129
|
+
}
|
|
130
|
+
process.exit(1);
|
|
131
|
+
} else {
|
|
132
|
+
console.log('🎉 All prefab files are valid!');
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Run validation
|
|
137
|
+
validatePrefabs();
|
|
138
|
+
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
// which items will be copied to the new project, includes files and folders
|
|
2
|
-
export const sharedTemplateItems: string[] = [
|
|
3
|
-
'.cursor',
|
|
4
|
-
'.vscode',
|
|
5
|
-
'scripts/genesys',
|
|
6
|
-
'gitignore', // npm excludes .gitignore files from packages, so we rename it when copying
|
|
7
|
-
'.gitattributes',
|
|
8
|
-
'.cursorignore',
|
|
9
|
-
'eslint.config.js',
|
|
10
|
-
'tsconfig.json',
|
|
11
|
-
'AGENTS.md',
|
|
12
|
-
'CLAUDE.md',
|
|
13
|
-
'index.html',
|
|
14
|
-
'vite.config.ts',
|
|
15
|
-
];
|
|
16
|
-
|
|
17
|
-
// which items will be deleted from the project, if exists
|
|
18
|
-
export const deletedTemplateItems: string[] = [
|
|
19
|
-
'.cursorrules'
|
|
20
|
-
];
|
|
21
|
-
|
|
22
|
-
export * as ENGINE from 'genesys.js';
|
|
1
|
+
// which items will be copied to the new project, includes files and folders
|
|
2
|
+
export const sharedTemplateItems: string[] = [
|
|
3
|
+
'.cursor',
|
|
4
|
+
'.vscode',
|
|
5
|
+
'scripts/genesys',
|
|
6
|
+
'gitignore', // npm excludes .gitignore files from packages, so we rename it when copying
|
|
7
|
+
'.gitattributes',
|
|
8
|
+
'.cursorignore',
|
|
9
|
+
'eslint.config.js',
|
|
10
|
+
'tsconfig.json',
|
|
11
|
+
'AGENTS.md',
|
|
12
|
+
'CLAUDE.md',
|
|
13
|
+
'index.html',
|
|
14
|
+
'vite.config.ts',
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
// which items will be deleted from the project, if exists
|
|
18
|
+
export const deletedTemplateItems: string[] = [
|
|
19
|
+
'.cursorrules'
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
export * as ENGINE from 'genesys.js';
|
|
@@ -1,166 +1,166 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$version": 0,
|
|
3
|
-
"class": "ENGINE.World",
|
|
4
|
-
"uuid": "c0ae85792bc3b946",
|
|
5
|
-
"ctor": {
|
|
6
|
-
"backgroundColor": 3026478,
|
|
7
|
-
"navigationOptions": {
|
|
8
|
-
"engine": "recast-navigation",
|
|
9
|
-
"debug": false,
|
|
10
|
-
"generateOnStartUp": false
|
|
11
|
-
},
|
|
12
|
-
"physicsOptions": {
|
|
13
|
-
"gravity": [
|
|
14
|
-
0,
|
|
15
|
-
-9.81,
|
|
16
|
-
0,
|
|
17
|
-
"v"
|
|
18
|
-
],
|
|
19
|
-
"engine": "rapier"
|
|
20
|
-
},
|
|
21
|
-
"useManifold": true
|
|
22
|
-
},
|
|
23
|
-
"actors": [
|
|
24
|
-
{
|
|
25
|
-
"uuid": "9a86d389088b361c",
|
|
26
|
-
"class": "ENGINE.Actor",
|
|
27
|
-
"properties": {
|
|
28
|
-
"editorData": {
|
|
29
|
-
"displayName": "Directional Light",
|
|
30
|
-
"hidden": false
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
"ctor": {
|
|
34
|
-
"rootComponent": {
|
|
35
|
-
"class": "ENGINE.DirectionalLightComponent",
|
|
36
|
-
"uuid": "cfe05433-9edc-4dfe-a535-c71f33e92d78",
|
|
37
|
-
"ctor": {
|
|
38
|
-
"color": 16777215,
|
|
39
|
-
"intensity": 1,
|
|
40
|
-
"castShadow": true,
|
|
41
|
-
"shadowMapSize": 2048,
|
|
42
|
-
"shadowBias": 0,
|
|
43
|
-
"shadowNormalBias": 0,
|
|
44
|
-
"shadowNear": 0.1,
|
|
45
|
-
"shadowFar": 100
|
|
46
|
-
},
|
|
47
|
-
"properties": {
|
|
48
|
-
"position": [
|
|
49
|
-
10,
|
|
50
|
-
50,
|
|
51
|
-
-10,
|
|
52
|
-
"v"
|
|
53
|
-
],
|
|
54
|
-
"castShadow": true
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
"uuid": "9d428f2a16e5374a",
|
|
61
|
-
"class": "ENGINE.Actor",
|
|
62
|
-
"properties": {
|
|
63
|
-
"editorData": {
|
|
64
|
-
"displayName": "Ground",
|
|
65
|
-
"hidden": false
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
"ctor": {
|
|
69
|
-
"rootComponent": {
|
|
70
|
-
"class": "ENGINE.MeshComponent",
|
|
71
|
-
"uuid": "71caea24-62d7-4e45-a76e-4c7519de2c3c",
|
|
72
|
-
"ctor": {
|
|
73
|
-
"geometry": {
|
|
74
|
-
"class": "THREE.BoxGeometry",
|
|
75
|
-
"ctor": [
|
|
76
|
-
500,
|
|
77
|
-
0.1,
|
|
78
|
-
500
|
|
79
|
-
]
|
|
80
|
-
},
|
|
81
|
-
"material": {
|
|
82
|
-
"@external": "DefaultMaterial"
|
|
83
|
-
},
|
|
84
|
-
"uvScaleTilesPerUnit": 0.2,
|
|
85
|
-
"physicsOptions": {
|
|
86
|
-
"enabled": true,
|
|
87
|
-
"motionType": "static",
|
|
88
|
-
"collisionProfile": "BlockAll"
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
"properties": {
|
|
92
|
-
"position": [
|
|
93
|
-
0,
|
|
94
|
-
-0.9,
|
|
95
|
-
0,
|
|
96
|
-
"v"
|
|
97
|
-
],
|
|
98
|
-
"receiveShadow": true
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
"uuid": "b87cbc5e60a2e54c",
|
|
105
|
-
"class": "ENGINE.PlayerStart",
|
|
106
|
-
"properties": {
|
|
107
|
-
"editorData": {
|
|
108
|
-
"displayName": "Player Start",
|
|
109
|
-
"hidden": false
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
|
-
"ctor": {
|
|
113
|
-
"rootComponent": {
|
|
114
|
-
"class": "ENGINE.SceneComponent",
|
|
115
|
-
"uuid": "b4d5f8f7-2512-45e1-9157-c7ff6772402d",
|
|
116
|
-
"ctor": {},
|
|
117
|
-
"properties": {
|
|
118
|
-
"position": [
|
|
119
|
-
0,
|
|
120
|
-
0.9,
|
|
121
|
-
0,
|
|
122
|
-
"v"
|
|
123
|
-
]
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
"uuid": "0ba1f4677e8370d1",
|
|
130
|
-
"class": "ENGINE.Actor",
|
|
131
|
-
"properties": {
|
|
132
|
-
"editorData": {
|
|
133
|
-
"displayName": "Skybox",
|
|
134
|
-
"hidden": false
|
|
135
|
-
}
|
|
136
|
-
},
|
|
137
|
-
"ctor": {
|
|
138
|
-
"rootComponent": {
|
|
139
|
-
"class": "ENGINE.SceneComponent",
|
|
140
|
-
"uuid": "195e88df-73ff-4f4b-82ae-7fb58671463d",
|
|
141
|
-
"ctor": {},
|
|
142
|
-
"properties": {},
|
|
143
|
-
"children": [
|
|
144
|
-
{
|
|
145
|
-
"class": "ENGINE.SkyboxComponent",
|
|
146
|
-
"uuid": "f7e33ae7d5ac74f9",
|
|
147
|
-
"ctor": {
|
|
148
|
-
"textureUrl": "@engine/assets/textures/skybox/citrus_orchard_road_puresky_2k.hdr",
|
|
149
|
-
"width": 2048,
|
|
150
|
-
"height": 1024,
|
|
151
|
-
"bottomColor": "#E6F3FF",
|
|
152
|
-
"middleColor": "#4A90E2",
|
|
153
|
-
"topColor": "#0F1B3C",
|
|
154
|
-
"envMapIntensity": 1
|
|
155
|
-
},
|
|
156
|
-
"properties": {}
|
|
157
|
-
}
|
|
158
|
-
]
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
],
|
|
163
|
-
"properties": {
|
|
164
|
-
"editorData": {}
|
|
165
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"$version": 0,
|
|
3
|
+
"class": "ENGINE.World",
|
|
4
|
+
"uuid": "c0ae85792bc3b946",
|
|
5
|
+
"ctor": {
|
|
6
|
+
"backgroundColor": 3026478,
|
|
7
|
+
"navigationOptions": {
|
|
8
|
+
"engine": "recast-navigation",
|
|
9
|
+
"debug": false,
|
|
10
|
+
"generateOnStartUp": false
|
|
11
|
+
},
|
|
12
|
+
"physicsOptions": {
|
|
13
|
+
"gravity": [
|
|
14
|
+
0,
|
|
15
|
+
-9.81,
|
|
16
|
+
0,
|
|
17
|
+
"v"
|
|
18
|
+
],
|
|
19
|
+
"engine": "rapier"
|
|
20
|
+
},
|
|
21
|
+
"useManifold": true
|
|
22
|
+
},
|
|
23
|
+
"actors": [
|
|
24
|
+
{
|
|
25
|
+
"uuid": "9a86d389088b361c",
|
|
26
|
+
"class": "ENGINE.Actor",
|
|
27
|
+
"properties": {
|
|
28
|
+
"editorData": {
|
|
29
|
+
"displayName": "Directional Light",
|
|
30
|
+
"hidden": false
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"ctor": {
|
|
34
|
+
"rootComponent": {
|
|
35
|
+
"class": "ENGINE.DirectionalLightComponent",
|
|
36
|
+
"uuid": "cfe05433-9edc-4dfe-a535-c71f33e92d78",
|
|
37
|
+
"ctor": {
|
|
38
|
+
"color": 16777215,
|
|
39
|
+
"intensity": 1,
|
|
40
|
+
"castShadow": true,
|
|
41
|
+
"shadowMapSize": 2048,
|
|
42
|
+
"shadowBias": 0,
|
|
43
|
+
"shadowNormalBias": 0,
|
|
44
|
+
"shadowNear": 0.1,
|
|
45
|
+
"shadowFar": 100
|
|
46
|
+
},
|
|
47
|
+
"properties": {
|
|
48
|
+
"position": [
|
|
49
|
+
10,
|
|
50
|
+
50,
|
|
51
|
+
-10,
|
|
52
|
+
"v"
|
|
53
|
+
],
|
|
54
|
+
"castShadow": true
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"uuid": "9d428f2a16e5374a",
|
|
61
|
+
"class": "ENGINE.Actor",
|
|
62
|
+
"properties": {
|
|
63
|
+
"editorData": {
|
|
64
|
+
"displayName": "Ground",
|
|
65
|
+
"hidden": false
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"ctor": {
|
|
69
|
+
"rootComponent": {
|
|
70
|
+
"class": "ENGINE.MeshComponent",
|
|
71
|
+
"uuid": "71caea24-62d7-4e45-a76e-4c7519de2c3c",
|
|
72
|
+
"ctor": {
|
|
73
|
+
"geometry": {
|
|
74
|
+
"class": "THREE.BoxGeometry",
|
|
75
|
+
"ctor": [
|
|
76
|
+
500,
|
|
77
|
+
0.1,
|
|
78
|
+
500
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
"material": {
|
|
82
|
+
"@external": "DefaultMaterial"
|
|
83
|
+
},
|
|
84
|
+
"uvScaleTilesPerUnit": 0.2,
|
|
85
|
+
"physicsOptions": {
|
|
86
|
+
"enabled": true,
|
|
87
|
+
"motionType": "static",
|
|
88
|
+
"collisionProfile": "BlockAll"
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"properties": {
|
|
92
|
+
"position": [
|
|
93
|
+
0,
|
|
94
|
+
-0.9,
|
|
95
|
+
0,
|
|
96
|
+
"v"
|
|
97
|
+
],
|
|
98
|
+
"receiveShadow": true
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"uuid": "b87cbc5e60a2e54c",
|
|
105
|
+
"class": "ENGINE.PlayerStart",
|
|
106
|
+
"properties": {
|
|
107
|
+
"editorData": {
|
|
108
|
+
"displayName": "Player Start",
|
|
109
|
+
"hidden": false
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
"ctor": {
|
|
113
|
+
"rootComponent": {
|
|
114
|
+
"class": "ENGINE.SceneComponent",
|
|
115
|
+
"uuid": "b4d5f8f7-2512-45e1-9157-c7ff6772402d",
|
|
116
|
+
"ctor": {},
|
|
117
|
+
"properties": {
|
|
118
|
+
"position": [
|
|
119
|
+
0,
|
|
120
|
+
0.9,
|
|
121
|
+
0,
|
|
122
|
+
"v"
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"uuid": "0ba1f4677e8370d1",
|
|
130
|
+
"class": "ENGINE.Actor",
|
|
131
|
+
"properties": {
|
|
132
|
+
"editorData": {
|
|
133
|
+
"displayName": "Skybox",
|
|
134
|
+
"hidden": false
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"ctor": {
|
|
138
|
+
"rootComponent": {
|
|
139
|
+
"class": "ENGINE.SceneComponent",
|
|
140
|
+
"uuid": "195e88df-73ff-4f4b-82ae-7fb58671463d",
|
|
141
|
+
"ctor": {},
|
|
142
|
+
"properties": {},
|
|
143
|
+
"children": [
|
|
144
|
+
{
|
|
145
|
+
"class": "ENGINE.SkyboxComponent",
|
|
146
|
+
"uuid": "f7e33ae7d5ac74f9",
|
|
147
|
+
"ctor": {
|
|
148
|
+
"textureUrl": "@engine/assets/textures/skybox/citrus_orchard_road_puresky_2k.hdr",
|
|
149
|
+
"width": 2048,
|
|
150
|
+
"height": 1024,
|
|
151
|
+
"bottomColor": "#E6F3FF",
|
|
152
|
+
"middleColor": "#4A90E2",
|
|
153
|
+
"topColor": "#0F1B3C",
|
|
154
|
+
"envMapIntensity": 1
|
|
155
|
+
},
|
|
156
|
+
"properties": {}
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
],
|
|
163
|
+
"properties": {
|
|
164
|
+
"editorData": {}
|
|
165
|
+
}
|
|
166
166
|
}
|