diff --git a/GeneralMods/StardustCore/Math/Hex.cs b/GeneralMods/StardustCore/Math/Hex.cs new file mode 100644 index 00000000..03d4ae35 --- /dev/null +++ b/GeneralMods/StardustCore/Math/Hex.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StardustCore.Math +{ + /// + /// Base class for hex representation. + /// + public class Hex + { + /// + /// The hex value represented as a string. + /// + public string hexValue; + + /// + /// Default constructor. + /// + public Hex() + { + + } + /// + /// Empty Constructor; + /// + /// + public Hex(string HexValue) + { + + } + + /// + /// Verifies that the hex is of the specified length. + /// + /// + public virtual bool verifyHexLength() + { + return true; + } + + /// + /// Trims the hex value by removing the leading 0x; + /// + /// + public virtual string trimHex() + { + return this.hexValue.Split('x')[1]; + } + + /// + /// A virtual function to be overriden. + /// + /// + public virtual List getBytes() + { + return new List(); + } + + /// + /// Converts a Hex byte (represented as a length two string) to an int equal or less than 255. Ex ff=255; + /// + /// The length two value to be converted. + /// + public virtual int convertHexByteTo255Int(string value) + { + int val1 = convertHexValueToInt(value[0]); + int val2 = convertHexValueToInt(value[1]); + val1 *= 16; + val2 *= 16; + return val1 + val2; + } + + /// + /// Converts a hex char to an int. + /// + /// + /// + public virtual int convertHexValueToInt(char c) + { + if (c == 'a') return 10; + else if (c == 'b') return 11; + else if (c == 'c') return 12; + else if (c == 'd') return 13; + else if (c == 'e') return 14; + else if (c == 'f') return 15; + else return Convert.ToInt32(c); + } + + /// + /// Gets the associated byte from the hex positioning. + /// + /// + /// + public virtual string getByte(int index) + { + string hex = this.trimHex(); + int val = index * 2 + 1; + char str1 = hex[index * 2]; + char str2 = hex[val]; + return (str1.ToString() + str2.ToString()); + } + } +} diff --git a/GeneralMods/StardustCore/Math/Hex32.cs b/GeneralMods/StardustCore/Math/Hex32.cs new file mode 100644 index 00000000..25da9ed0 --- /dev/null +++ b/GeneralMods/StardustCore/Math/Hex32.cs @@ -0,0 +1,90 @@ +using Microsoft.Xna.Framework; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StardustCore.Math +{ + /// + /// A Class that helps represents 32 bit hex. + /// + class Hex32 : Hex + { + /// + /// A default constructor. + /// + public Hex32() + { + this.hexValue = "0x00000000"; + } + + /// + /// Constructor. + /// + /// A string in hex representation. Ex) 0x00000000 + public Hex32(string hexValue) + { + this.hexValue = hexValue; + if (verifyHexLength() == false) this.hexValue = "0x00000000"; + } + /// + /// Constructor. + /// + /// An int to be converted into Hex. + public Hex32(int value) + { + this.hexValue= value.ToString("X"); + if (verifyHexLength() == false) this.hexValue = "0x00000000"; + } + + + /// + /// Makes sure the hex value is the appropriate length. + /// + /// + public override bool verifyHexLength() + { + if (this.hexValue.Length != 10) return false; + else return true; + } + + /// + /// Trims the hex to get rid of the leading 0x; + /// + /// + public override string trimHex() + { + return base.trimHex(); + } + + /// + /// Converts a hex value to a string. + /// + /// + public Color toColor() + { + var bytes = getBytes(); + int red = convertHexByteTo255Int(bytes[0]); + int green = convertHexByteTo255Int(bytes[1]); + int blue = convertHexByteTo255Int(bytes[2]); + int alpha = convertHexByteTo255Int(bytes[3]); + return new Color(red, green, blue, alpha); + } + + /// + /// Get the individual byte strings associated with this hex value. + /// + /// + public override List getBytes() + { + List bytes = new List(); + bytes.Add(getByte(0)); + bytes.Add(getByte(1)); + bytes.Add(getByte(2)); + bytes.Add(getByte(3)); + return bytes; + } + } +}