import Res from "../common/util/Res"; import { ResDirUrl, ResUrl } from "../constant/ResUrl"; import Editor from "../editor/Editor"; const { ccclass, property } = cc._decorator; @ccclass export default class Main extends cc.Component { private _editor: Editor = null; protected onLoad() { cc.debug.setDisplayStats(false); this.onInit(); } private async onInit() { await Res.loadDir(ResDirUrl.PREFAB, cc.Prefab); this.resetEditor(); // 注册拖拽文件事件监听 this.dragOn(); } private resetEditor() { if (this._editor) { this._editor.Fsm.MachineLayer.clear(); this._editor.node.removeFromParent(); this._editor.node.destroy(); } let node = cc.instantiate(Res.getLoaded(ResUrl.PREFAB.EDITOR)); this._editor = node.getComponent(Editor); Editor.Inst = this._editor; this.node.addChild(node); } /** * 注册拖拽文件事件监听 */ private dragOn() { if (!cc.sys.isBrowser) { return; } let canvas = document.getElementById('GameCanvas'); canvas.addEventListener("dragenter", (e) => { e.preventDefault(); e.stopPropagation(); }, false); canvas.addEventListener("dragover", (e) => { e.preventDefault(); e.stopPropagation(); }, false); canvas.addEventListener("dragleave", (e) => { e.preventDefault(); e.stopPropagation(); }, false); canvas.addEventListener("drop", (e) => { e.preventDefault(); e.stopPropagation(); // 处理拖拽文件的逻辑 let files = e.dataTransfer.files; this.readFiles(files); }, false); } /** * 文件读取 */ private readFiles(files: FileList) { for (let i = 0; i < files.length; i++) { let file: File = files[i]; if (/\.json$/.test(file.name)) { this.readJson(file); } else if (/\.anim$/.test(file.name)) { this.readAnim(file); } } } /** * 读取.json文件 */ private readJson(file: File) { let fileReader = new FileReader(); fileReader.readAsText(file); fileReader.onload = () => { cc.log(fileReader.result); let data: any = JSON.parse(fileReader.result as string); if (data.animator) { // 读取状态机工程文件 this.resetEditor(); this._editor.Parameters.import(data.parameters); this._editor.Fsm.importProject(data); } else if (data.animations) { // 读取spine文件 this._editor.Fsm.improtSpine(data); } else if (data.armature) { // 读取龙骨文件 this._editor.Fsm.importDragonBones(data); } }; } /** * 读取cocos .anim文件 */ private readAnim(file: File) { let fileReader = new FileReader(); fileReader.readAsText(file); fileReader.onload = () => { cc.log(fileReader.result); let data: any = JSON.parse(fileReader.result as string); this._editor.Fsm.importAnim(data); }; } }