import type { ActionCode, SceneActions } from '@gedit/runtime-types'; import { GameObjectData } from '@gedit/render-engine'; import { Plugin } from '../plugin'; import { MAIN_SCRIPT_ID } from '../script'; export interface InputPluginOptions { mainScene: string; loadingScene?: string scenes: GameObjectData[]; components: GameObjectData[]; actions: SceneActions; actionCodes: ActionCode[]; } export function inputPlugin(options: InputPluginOptions): Plugin { const { scenes, components, mainScene, loadingScene = '', actions, actionCodes } = options; return { async onCompile(): Promise { const mainScript = this.getScript(MAIN_SCRIPT_ID); // const ctx = this.ctx; // 场景事件 actionCodes.forEach(({ id, code }) => { const current = this.addScript(id); const script = this.getScript(current); script.code = code; mainScript.imports.push({ scriptId: script.id, }); }); // 场景页面构建 for (let i = 0; i < scenes.length; i++) { const scene = scenes[i]; const current = this.addScript(Symbol(scene.id)); const script = this.getScript(current); script.name = scene.name; script.content.components.push(scene); script.exports.push({ identifier: 'scene', isDefault: true, }); mainScript.imports.push({ scriptId: script.id, defaultName: `scene_${i}`, }); } // 组件页面构建 for (let i = 0; i < components.length; i ++) { const comp = components[i]; const current = this.addScript(Symbol(comp.id)); const script = this.getScript(current); script.name = comp.name; script.content.components.push(comp); script.exports.push({ identifier: 'component', isDefault: true, }); mainScript.imports.push({ scriptId: script.id, defaultName: `component_${i}`, }); } // 配置启动场景 mainScript.content.start.sceneId = mainScene; mainScript.content.loading.sceneId = loadingScene; mainScript.content.actions = actions; } }; }