123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- //
- // Copyright 2020 Electronic Arts Inc.
- //
- // The Command & Conquer Map Editor and corresponding source code is free
- // software: you can redistribute it and/or modify it under the terms of
- // the GNU General Public License as published by the Free Software Foundation,
- // either version 3 of the License, or (at your option) any later version.
- // The Command & Conquer Map Editor and corresponding source code is distributed
- // in the hope that it will be useful, but with permitted additional restrictions
- // under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT
- // distributed with this program. You should have received a copy of the
- // GNU General Public License along with permitted additional restrictions
- // with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection
- using System.Drawing;
- using System.Numerics;
- using System.Xml;
- namespace MobiusEditor.Utility
- {
- public class TeamColor
- {
- private readonly TeamColorManager teamColorManager;
- private readonly MegafileManager megafileManager;
- public string Variant { get; private set; }
- public string Name { get; private set; }
- private Color? lowerBounds;
- public Color LowerBounds => lowerBounds.HasValue ? lowerBounds.Value : ((Variant != null) ? teamColorManager[Variant].LowerBounds : default);
- private Color? upperBounds;
- public Color UpperBounds => upperBounds.HasValue ? upperBounds.Value : ((Variant != null) ? teamColorManager[Variant].UpperBounds : default);
- private float? fudge;
- public float Fudge => fudge.HasValue ? fudge.Value : ((Variant != null) ? teamColorManager[Variant].Fudge : default);
- private Vector3? hsvShift;
- public Vector3 HSVShift => hsvShift.HasValue ? hsvShift.Value : ((Variant != null) ? teamColorManager[Variant].HSVShift : default);
- private Vector3? inputLevels;
- public Vector3 InputLevels => inputLevels.HasValue ? inputLevels.Value : ((Variant != null) ? teamColorManager[Variant].InputLevels : default);
- private Vector2? outputLevels;
- public Vector2 OutputLevels => outputLevels.HasValue ? outputLevels.Value : ((Variant != null) ? teamColorManager[Variant].OutputLevels : default);
- private Vector3? overallInputLevels;
- public Vector3 OverallInputLevels => overallInputLevels.HasValue ? overallInputLevels.Value : ((Variant != null) ? teamColorManager[Variant].OverallInputLevels : default);
- private Vector2? overallOutputLevels;
- public Vector2 OverallOutputLevels => overallOutputLevels.HasValue ? overallOutputLevels.Value : ((Variant != null) ? teamColorManager[Variant].OverallOutputLevels : default);
- private Color? radarMapColor;
- public Color RadarMapColor => radarMapColor.HasValue ? radarMapColor.Value : ((Variant != null) ? teamColorManager[Variant].RadarMapColor : default);
- public TeamColor(TeamColorManager teamColorManager, MegafileManager megafileManager)
- {
- this.teamColorManager = teamColorManager;
- this.megafileManager = megafileManager;
- }
- public void Load(string xml)
- {
- XmlDocument xmlDoc = new XmlDocument();
- xmlDoc.LoadXml(xml);
- var node = xmlDoc.FirstChild;
- Name = node.Attributes["Name"].Value;
- Variant = node.Attributes["Variant"]?.Value;
- var lowerBoundsNode = node.SelectSingleNode("LowerBounds");
- if (lowerBoundsNode != null)
- {
- lowerBounds = Color.FromArgb(
- (int)(float.Parse(lowerBoundsNode.SelectSingleNode("R").InnerText) * 255),
- (int)(float.Parse(lowerBoundsNode.SelectSingleNode("G").InnerText) * 255),
- (int)(float.Parse(lowerBoundsNode.SelectSingleNode("B").InnerText) * 255)
- );
- }
- var upperBoundsNode = node.SelectSingleNode("UpperBounds");
- if (upperBoundsNode != null)
- {
- upperBounds = Color.FromArgb(
- (int)(float.Parse(upperBoundsNode.SelectSingleNode("R").InnerText) * 255),
- (int)(float.Parse(upperBoundsNode.SelectSingleNode("G").InnerText) * 255),
- (int)(float.Parse(upperBoundsNode.SelectSingleNode("B").InnerText) * 255)
- );
- }
- var fudgeNode = node.SelectSingleNode("Fudge");
- if (fudgeNode != null)
- {
- fudge = float.Parse(fudgeNode.InnerText);
- }
- var hsvShiftNode = node.SelectSingleNode("HSVShift");
- if (hsvShiftNode != null)
- {
- hsvShift = new Vector3(
- float.Parse(hsvShiftNode.SelectSingleNode("X").InnerText),
- float.Parse(hsvShiftNode.SelectSingleNode("Y").InnerText),
- float.Parse(hsvShiftNode.SelectSingleNode("Z").InnerText)
- );
- }
- var inputLevelsNode = node.SelectSingleNode("InputLevels");
- if (inputLevelsNode != null)
- {
- inputLevels = new Vector3(
- float.Parse(inputLevelsNode.SelectSingleNode("X").InnerText),
- float.Parse(inputLevelsNode.SelectSingleNode("Y").InnerText),
- float.Parse(inputLevelsNode.SelectSingleNode("Z").InnerText)
- );
- }
- var outputLevelsNode = node.SelectSingleNode("OutputLevels");
- if (outputLevelsNode != null)
- {
- outputLevels = new Vector2(
- float.Parse(outputLevelsNode.SelectSingleNode("X").InnerText),
- float.Parse(outputLevelsNode.SelectSingleNode("Y").InnerText)
- );
- }
- var overallInputLevelsNode = node.SelectSingleNode("OverallInputLevels");
- if (overallInputLevelsNode != null)
- {
- overallInputLevels = new Vector3(
- float.Parse(overallInputLevelsNode.SelectSingleNode("X").InnerText),
- float.Parse(overallInputLevelsNode.SelectSingleNode("Y").InnerText),
- float.Parse(overallInputLevelsNode.SelectSingleNode("Z").InnerText)
- );
- }
- var overallOutputLevelsNode = node.SelectSingleNode("OverallOutputLevels");
- if (outputLevelsNode != null)
- {
- overallOutputLevels = new Vector2(
- float.Parse(overallOutputLevelsNode.SelectSingleNode("X").InnerText),
- float.Parse(overallOutputLevelsNode.SelectSingleNode("Y").InnerText)
- );
- }
- var radarMapColorNode = node.SelectSingleNode("RadarMapColor");
- if (radarMapColorNode != null)
- {
- radarMapColor = Color.FromArgb(
- (int)(float.Parse(radarMapColorNode.SelectSingleNode("R").InnerText) * 255),
- (int)(float.Parse(radarMapColorNode.SelectSingleNode("G").InnerText) * 255),
- (int)(float.Parse(radarMapColorNode.SelectSingleNode("B").InnerText) * 255)
- );
- }
- }
- public void Flatten()
- {
- lowerBounds = LowerBounds;
- upperBounds = UpperBounds;
- fudge = Fudge;
- hsvShift = HSVShift;
- inputLevels = InputLevels;
- outputLevels = OutputLevels;
- overallInputLevels = OverallInputLevels;
- overallOutputLevels = OverallOutputLevels;
- radarMapColor = RadarMapColor;
- }
- }
- }
|