/// <summary> /// 获取灯具 DMX 模式 /// </summary> private static void GetDmxModes(GDTF_Data data) { if (dmxModes == null) { Debug.Log("Not Found DmxModes Node!"); return; } if (dmxModes.HasChildNodes) { // 获取所有 DMX 模式 foreach (XmlNode dmxModeNode in dmxModes) { // 如果当前模式下包含子节点 if (dmxModeNode.HasChildNodes) { XmlNode dmxChannelsNode = FindChildNode(dmxModeNode, "DMXChannels"); // 查找 DMXChannels 节点 if (dmxChannelsNode != null) { // 创建 DMXModesData 对象 GDTF_DmxModesData modeData = new GDTF_DmxModesData() { dmxModeName = GetNodeAttribute(dmxModeNode, "Name"), dmxModeGeometry = GetNodeAttribute(dmxModeNode, "Geometry") }; // 为该模式添加通道信息 GetDmxModeChannels(dmxChannelsNode, modeData, data); data.dmxModes.Add(modeData); } } } } }
/// <summary> /// 获取当前模式下 DMX 通道信息 /// </summary> /// <param name="dmxChannelsNode">DMX Channels 节点</param> /// <param name="modeData">DMX Mode 对象</param> /// <param name="data">GDTF Data 对象</param> private static void GetDmxModeChannels(XmlNode dmxChannelsNode, GDTF_DmxModesData modeData, GDTF_Data data) { // 如果 DMXChannels 节点下存在 DMXChannel if (dmxChannelsNode.HasChildNodes) { foreach (XmlNode dmxChannel in dmxChannelsNode) { // 如果 DMXChannel 下存在子节点 if (dmxChannel.HasChildNodes) { // 如果当前 DMXChannel 下存在 LogicalChannel 节点 XmlNode logicalChannelNode = FindChildNode(dmxChannel, "LogicalChannel"); if (logicalChannelNode != null) { // 创建 DMXChannelData 对象 GDTF_DmxChannel channel = new GDTF_DmxChannel() { dmxBreak = Convert.ToInt32(GetNodeAttribute(dmxChannel, "DMXBreak")), dmxBit = GetDmxValueResolution(GetNodeAttribute(dmxChannel, "Default")), deafault = GetDmxValue(GetNodeAttribute(dmxChannel, "Default")), geometry = GetNodeAttribute(dmxChannel, "Geometry"), offset = XmlSplitToIntArray(GetNodeAttribute(dmxChannel, "Offset")) }; // 为该 DMX Mode 添加 DMXChannel modeData.channelsData.Add(channel); GetDmxLogicalChannel(dmxChannel, channel, data); } } } } }
/// <summary> /// 根据灯具名称开始加载配置信息 /// </summary> public void LoadConfig() { // 如果 fixtureName 为空 或者 Dictionary 中没有该灯具信息 则跳出函数 if (gdtfFileName == null || gdtfFileName == string.Empty) { return; } if (!GDTF_ResourcesLoader.GetFixtures().ContainsKey(gdtfFileName)) { return; } // 获取该灯具的所有资源文件信息 fileInfo = GDTF_ResourcesLoader.GetFileInfo(gdtfFileName); // 添加灯具缩略图 fixtureThumbanil = Resources.Load <Texture2D>(fileInfo.thumbnail.filePath); // 添加灯具灯库信息 descriptionData = GDTF_DescriptionReader.GetGdtfData(fileInfo.description.filePath); // 添加灯具基本信息 model = descriptionData.fixtureType.ShortName; gdtfDataVer = descriptionData.fixtureType.GDTFDataVersion; fixtureType = descriptionData.fixtureType.FixtureType; fixtureTypeID = descriptionData.fixtureType.FixtureTypeID; manufacturer = descriptionData.fixtureType.Manufacturer; descriptionData.dmxModes.ForEach(mode => { if (mode.dmxModeName == dmxModeName) { dmxMode = mode; } }); if (goboTextures.Count > 0) { goboTextures.Clear(); } for (int i = 0; i < fileInfo.wheels.Length; i++) { goboTextures.Add(fileInfo.wheels[i].fileName, Resources.Load <Texture2D>(fileInfo.wheels[i].filePath)); } }