import ResourceComponent, { AssetUrlInfo } from "../data/ResourceComponent"; import Parser from "../parse/Parser"; import {fgui} from "../data/FguiComponentType"; import XmlNode, { ComponentNode } from '../data/XmlNode'; import Path from '../Path'; export default class ComponentReader { public static Load(path: string,resourceComponent: ResourceComponent) { let xml = Path.ReadXml(path); let xmlDocument = Parser.ParseXml(xml); let component = xmlDocument.component; // 继承 let extention = fgui.ExtendType.Component; if( component.extention) extention = component.extention; resourceComponent.extention = extention; let keys = Object.keys(component); for(let key of keys) { let nodeList: XmlNode[] = component[key] instanceof Array ? component[key] : [component[key]]; for (let node of nodeList) { switch(key) { // 控制器 case fgui.NodeName.controller: resourceComponent.controllerList.push(new XmlNode({ name:node.name, type:fgui.CommonName.Controller })); break; // 动效 case fgui.NodeName.transition: resourceComponent.transitionList.push(new XmlNode({ name: node.name, type:fgui.CommonName.Transition })); break; case fgui.NodeName.displayList: this.LoadDisplayList(node,resourceComponent); break; case "Button": this.LoadDisplayList(node,resourceComponent); //-- 依赖资源 if((node).sound) { resourceComponent.AddDependAssetUrlInfo(AssetUrlInfo.CreateByUrl((node).sound)); } break; } } } } private static LoadDisplayList(displayList,resourceComponent: ResourceComponent) { let displayListKeys = Object.keys(displayList); for(let key of displayListKeys) { let nodeList = displayList[key] instanceof Array ? displayList[key] : [displayList[key]]; for(let node of nodeList) { let pkg = null; let src = null; let type = ""; let nodeName = node.name; let isIgnore: boolean = false; switch(key) { // 图片 case fgui.NodeName.image: node.pkg && (pkg = node.pkg); node.src && (src = node.src); type = fgui.CommonName.GImage; break; // 文本 case fgui.NodeName.text: let input = false; node.input && (input = node.input == "true"); if(input) type = fgui.CommonName.GTextInput; else type = fgui.CommonName.GTextField; //-- 依赖资源 if(node.font) { resourceComponent.AddDependAssetUrlInfo(AssetUrlInfo.CreateByUrl(node.font)); } break; // 富文本 case fgui.NodeName.richtext: type = fgui.CommonName.GRichTextField; //-- 依赖资源 if(node.font) { resourceComponent.AddDependAssetUrlInfo(AssetUrlInfo.CreateByUrl(node.font)); } break; // 图形 case fgui.NodeName.graph: type = fgui.CommonName.GGraph; break; // 组 case fgui.NodeName.group: let advanced = false; node.advanced && (advanced = node.advanced == "true"); if(advanced) type = fgui.CommonName.GGroup; else isIgnore = true; break; // 装载器 case fgui.NodeName.loader: type = fgui.CommonName.GLoader; //-- 依赖资源 if(node.url && !node.clearOnPublish) { resourceComponent.AddDependAssetUrlInfo(AssetUrlInfo.CreateByUrl(node.url)); } break; // 装载器3D case fgui.NodeName.loader3D: type = fgui.CommonName.GLoader3D; break; // 列表 case fgui.NodeName.list: type = fgui.CommonName.GList; //-- 依赖资源 if(node.defaultItem) { resourceComponent.AddDependAssetUrlInfo(AssetUrlInfo.CreateByUrl(node.defaultItem)); // if(resourceComponent.name == "HelpWindowUI.xml") // { // console.log(node.mame, node.defaultItem); // } } if(!node.autoClearItems && node.item && node.item instanceof Array) { for(var item of node.item) { if(item.url) { resourceComponent.AddDependAssetUrlInfo(AssetUrlInfo.CreateByUrl(item.url)); // if(resourceComponent.name == "HelpWindowUI.xml") // { // console.log(item.mame, item.url); // } } } } break; // 序列帧动画 case fgui.NodeName.movieclip: type = fgui.CommonName.GMovieClip; //-- 依赖资源 if(node.pkg && node.src) { resourceComponent.AddDependAssetUrlInfo(AssetUrlInfo.Create(node.pkg, node.src)); } break; // 自定义组件 case fgui.NodeName.component: isIgnore = true; node.pkg && (pkg = node.pkg); node.src && (src = node.src); type = fgui.CommonName.GComponent; // console.log('AddNode: ', nodeName) resourceComponent.AddNode(new ComponentNode({ name: nodeName, type: type, pkg: pkg, src: src })); //-- 依赖资源 if(node.Label && node.Label.icon) { resourceComponent.AddDependAssetUrlInfo(AssetUrlInfo.CreateByUrl(node.Label.icon)); } if(node.Button && node.Button) { node.Button.icon && resourceComponent.AddDependAssetUrlInfo(AssetUrlInfo.CreateByUrl(node.Button.icon)); node.Button.selectedIcon && resourceComponent.AddDependAssetUrlInfo(AssetUrlInfo.CreateByUrl(node.Button.selectedIcon)); node.Button.sound && resourceComponent.AddDependAssetUrlInfo(AssetUrlInfo.CreateByUrl(node.Button.sound)); } break; } if(node.gearIcon ) { if(node.gearIcon.values) { resourceComponent.AddDependAssetUrlInfo(AssetUrlInfo.CreateByGearUrl(node.gearIcon.values)); } if(node.gearIcon.default) { resourceComponent.AddDependAssetUrlInfo(AssetUrlInfo.CreateByUrl(node.gearIcon.default)); } } if(!isIgnore) { resourceComponent.displayList.push(new XmlNode({ name: nodeName, type: type,pkg,src })); } } } } }