mirror of
https://github.com/electronicarts/CnC_Remastered_Collection
synced 2024-06-28 02:50:25 +12:00
e37e174be1
Initial commit of C&C Remastered Map Editor code
171 lines
7.5 KiB
C#
171 lines
7.5 KiB
C#
//
|
|
// 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;
|
|
}
|
|
}
|
|
}
|