Repository navigation
Expand file tree
/
Copy pathindex.js
More file actions
142 lines (122 loc) · 4.8 KB
/
Copy pathindex.js
File metadata and controls
142 lines (122 loc) · 4.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/**
* Asset Management System - Main Entry Point
* Exports all asset management functionality
*/
// Core Asset Library
export { AssetLibrary, getAssetLibrary } from './AssetLibrary.js';
// Specialized Managers
export { EnemyManager, getEnemyManager } from './EnemyManager.js';
export { CharacterManager, getCharacterManager } from './CharacterManager.js';
export { AnimationManager, getAnimationManager } from './AnimationManager.js';
// UI Components
export { AssetBrowser, getAssetBrowser } from '../ui/AssetBrowser.js';
export { default as DragDropImport } from '../ui/DragDropImport.js';
/**
* Initialize the complete asset management system
* @param {BABYLON.Scene} scene - The Babylon.js scene
* @param {Object} options - Configuration options
* @returns {Object} All initialized managers and UI components
*/
export function initAssetSystem(scene, options = {}) {
const {
enableDragDrop = true,
enableBrowser = true,
onAssetImport = () => {},
onAssetSelect = () => {}
} = options;
// Initialize core library
const assetLibrary = getAssetLibrary();
// Initialize specialized managers
const enemyManager = getEnemyManager(scene);
const characterManager = getCharacterManager(scene);
const animationManager = getAnimationManager(scene);
// Initialize UI components
let dragDropImport = null;
let assetBrowser = null;
if (enableDragDrop) {
const { default: DragDropImport } = require('../ui/DragDropImport.js');
dragDropImport = new DragDropImport(scene, {
onImport: onAssetImport
});
}
if (enableBrowser) {
const { getAssetBrowser } = require('../ui/AssetBrowser.js');
assetBrowser = getAssetBrowser({
onSelect: onAssetSelect,
onImport: async (file, category) => {
await assetLibrary.importFromFile(scene, file, category);
}
});
}
// Setup keyboard shortcut for asset browser (B key)
window.addEventListener('keydown', (e) => {
if (e.key === 'b' && e.ctrlKey && assetBrowser) {
e.preventDefault();
assetBrowser.toggle();
}
});
console.log('🎮 Asset Management System initialized');
console.log(' - Asset Library: ✅');
console.log(' - Enemy Manager: ✅');
console.log(' - Character Manager: ✅');
console.log(' - Animation Manager: ✅');
console.log(' - Drag & Drop: ' + (dragDropImport ? '✅' : '❌'));
console.log(' - Asset Browser: ' + (assetBrowser ? '✅ (Ctrl+B to open)' : '❌'));
return {
assetLibrary,
enemyManager,
characterManager,
animationManager,
dragDropImport,
assetBrowser,
// Convenience methods
loadModel: (category, id) => assetLibrary.loadModel(scene, category, id),
spawnEnemy: (id, position) => enemyManager.spawn(id, position),
spawnCharacter: (id, position) => characterManager.spawn(id, position),
// Open browser
openBrowser: () => assetBrowser?.open(),
// Export/Import all data
exportAll: () => ({
assets: assetLibrary.exportAll(),
enemies: enemyManager.exportConfigs(),
characters: characterManager.exportConfigs(),
animations: animationManager.exportConfigs()
}),
importAll: (data) => {
if (data.assets) assetLibrary.importAll(data.assets);
if (data.enemies) enemyManager.importConfigs(data.enemies);
if (data.characters) characterManager.importConfigs(data.characters);
if (data.animations) animationManager.importConfigs(data.animations);
}
};
}
/**
* Quick setup for builder mode
*/
export function setupBuilderAssets(scene, tools) {
const system = initAssetSystem(scene, {
enableDragDrop: true,
enableBrowser: true,
onAssetSelect: (asset) => {
// When asset selected in browser, activate model placement tool
if (tools?.tools?.models) {
tools.tools.models.selectModel(asset.category, asset.id);
tools.setSelectedTool('models');
}
}
});
return system;
}
// Re-import for default export
import { getAssetLibrary as _getAssetLibrary } from './AssetLibrary.js';
import { getEnemyManager as _getEnemyManager } from './EnemyManager.js';
import { getCharacterManager as _getCharacterManager } from './CharacterManager.js';
import { getAnimationManager as _getAnimationManager } from './AnimationManager.js';
export default {
initAssetSystem,
setupBuilderAssets,
getAssetLibrary: _getAssetLibrary,
getEnemyManager: _getEnemyManager,
getCharacterManager: _getCharacterManager,
getAnimationManager: _getAnimationManager
};