Files
abysmal-isle/Scripts/Services/BasketWeaving/PlantPigmentHue.cs
Unstable Kitsune b918192e4e Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
2023-11-28 23:20:26 -05:00

259 lines
10 KiB
C#

using System;
using System.Collections.Generic;
namespace Server.Engines.Plants
{
public interface IPlantHue
{
PlantHue PlantHue { get; set; }
void InvalidatePlantHue();
}
public interface IPigmentHue
{
PlantPigmentHue PigmentHue { get; set; }
}
[Flags]
public enum PlantPigmentHue
{
None = 0,
Plain = 0x1,
Red = 0x2,
Blue = 0x4,
Yellow = 0x8,
Purple = Red | Blue,
Green = Blue | Yellow,
Orange = Red | Yellow,
Black = 0x10,
White = 0x20,
Pink = 0x40,
Magenta = 0x80,
Aqua = 0x100,
FireRed = 0x200,
BrightRed = Red | Bright,
BrightBlue = Blue | Bright,
BrightYellow = Yellow | Bright,
BrightPurple = Purple | Bright,
BrightGreen = Green | Bright,
BrightOrange = Orange | Bright,
DarkRed = Red | Dark,
DarkBlue = Blue | Dark,
DarkYellow = Yellow | Dark,
DarkPurple = Purple | Dark,
DarkGreen = Green | Dark,
DarkOrange = Orange | Dark,
IceRed = Red | Ice,
IceBlue = Blue | Ice,
IceYellow = Yellow | Ice,
IcePurple = Purple | Ice,
IceGreen = Green | Ice,
IceOrange = Orange | Ice,
IceBlack = Black | Ice,
OffWhite = White | Bright,
Metal = Black | Bright,
Ice = 0x2000000,
Dark = 0x4000000,
Bright = 0x8000000,
}
public class PlantPigmentHueInfo
{
private static Dictionary<PlantPigmentHue, PlantPigmentHueInfo> m_Table;
private readonly PlantHue m_PlantHue;
private readonly int m_Hue;
private readonly int m_Name;
private readonly PlantPigmentHue m_PlantPigmentHue;
static PlantPigmentHueInfo()
{
m_Table = new Dictionary<PlantPigmentHue, PlantPigmentHueInfo>();
m_Table[PlantPigmentHue.Plain] = new PlantPigmentHueInfo(PlantHue.Plain, 2101, 1060813, PlantPigmentHue.Plain);
m_Table[PlantPigmentHue.Red] = new PlantPigmentHueInfo(PlantHue.Red, 1652, 1060814, PlantPigmentHue.Red);
m_Table[PlantPigmentHue.Blue] = new PlantPigmentHueInfo(PlantHue.Blue, 2122, 1060815, PlantPigmentHue.Blue);
m_Table[PlantPigmentHue.Yellow] = new PlantPigmentHueInfo(PlantHue.Yellow, 2125, 1060818, PlantPigmentHue.Yellow);
m_Table[PlantPigmentHue.BrightRed] = new PlantPigmentHueInfo(PlantHue.BrightRed, 1646, 1060814, PlantPigmentHue.BrightRed);
m_Table[PlantPigmentHue.BrightBlue] = new PlantPigmentHueInfo(PlantHue.BrightBlue, 1310, 1060815, PlantPigmentHue.BrightBlue);
m_Table[PlantPigmentHue.BrightYellow] = new PlantPigmentHueInfo(PlantHue.BrightYellow, 253, 1060818, PlantPigmentHue.BrightYellow);
m_Table[PlantPigmentHue.DarkRed] = new PlantPigmentHueInfo(PlantHue.Plain, 1141, 1112162, PlantPigmentHue.DarkRed);
m_Table[PlantPigmentHue.DarkBlue] = new PlantPigmentHueInfo(PlantHue.Plain, 1317, 1112164, PlantPigmentHue.DarkBlue);
m_Table[PlantPigmentHue.DarkYellow] = new PlantPigmentHueInfo(PlantHue.Plain, 2217, 1112165, PlantPigmentHue.DarkYellow);
m_Table[PlantPigmentHue.IceRed] = new PlantPigmentHueInfo(PlantHue.Plain, 335, 1112169, PlantPigmentHue.IceRed);
m_Table[PlantPigmentHue.IceBlue] = new PlantPigmentHueInfo(PlantHue.Plain, 1154, 1112168, PlantPigmentHue.IceBlue);
m_Table[PlantPigmentHue.IceYellow] = new PlantPigmentHueInfo(PlantHue.Plain, 56, 1112171, PlantPigmentHue.IceYellow);
m_Table[PlantPigmentHue.Purple] = new PlantPigmentHueInfo(PlantHue.Purple, 15, 1060816, PlantPigmentHue.Purple);
m_Table[PlantPigmentHue.Green] = new PlantPigmentHueInfo(PlantHue.Green, 2128, 1060819, PlantPigmentHue.Green);
m_Table[PlantPigmentHue.Orange] = new PlantPigmentHueInfo(PlantHue.Orange, 1128, 1060817, PlantPigmentHue.Orange);
m_Table[PlantPigmentHue.BrightPurple] = new PlantPigmentHueInfo(PlantHue.BrightPurple, 316, 1060816, PlantPigmentHue.BrightPurple);
m_Table[PlantPigmentHue.BrightGreen] = new PlantPigmentHueInfo(PlantHue.BrightGreen, 671, 1060819, PlantPigmentHue.BrightGreen);
m_Table[PlantPigmentHue.BrightOrange] = new PlantPigmentHueInfo(PlantHue.BrightOrange, 1501, 1060817, PlantPigmentHue.BrightOrange);
m_Table[PlantPigmentHue.DarkPurple] = new PlantPigmentHueInfo(PlantHue.Plain, 1254, 1113166, PlantPigmentHue.DarkPurple);
m_Table[PlantPigmentHue.DarkGreen] = new PlantPigmentHueInfo(PlantHue.Plain, 1425, 1112163, PlantPigmentHue.DarkGreen);
m_Table[PlantPigmentHue.DarkOrange] = new PlantPigmentHueInfo(PlantHue.Plain, 1509, 1112161, PlantPigmentHue.DarkOrange);
m_Table[PlantPigmentHue.IcePurple] = new PlantPigmentHueInfo(PlantHue.Plain, 511, 1112172, PlantPigmentHue.IcePurple);
m_Table[PlantPigmentHue.IceGreen] = new PlantPigmentHueInfo(PlantHue.Plain, 261, 1112167, PlantPigmentHue.IceGreen);
m_Table[PlantPigmentHue.IceOrange] = new PlantPigmentHueInfo(PlantHue.Plain, 346, 1112170, PlantPigmentHue.IceOrange);
m_Table[PlantPigmentHue.Black] = new PlantPigmentHueInfo(PlantHue.Black, 1175, 1060820, PlantPigmentHue.Black);
m_Table[PlantPigmentHue.White] = new PlantPigmentHueInfo(PlantHue.White, 1150, 1060821, PlantPigmentHue.White);
m_Table[PlantPigmentHue.IceBlack] = new PlantPigmentHueInfo(PlantHue.Plain, 2422, 1112988, PlantPigmentHue.IceBlack);
m_Table[PlantPigmentHue.OffWhite] = new PlantPigmentHueInfo(PlantHue.Plain, 746, 1112224, PlantPigmentHue.OffWhite);
m_Table[PlantPigmentHue.Metal] = new PlantPigmentHueInfo(PlantHue.Plain, 1105, 1015046, PlantPigmentHue.Metal);
m_Table[PlantPigmentHue.Pink] = new PlantPigmentHueInfo(PlantHue.Pink, 341, 1061854, PlantPigmentHue.Pink);
m_Table[PlantPigmentHue.Magenta] = new PlantPigmentHueInfo(PlantHue.Magenta, 1163, 1061852, PlantPigmentHue.Magenta);
m_Table[PlantPigmentHue.Aqua] = new PlantPigmentHueInfo(PlantHue.Aqua, 391, 1061853, PlantPigmentHue.Aqua);
m_Table[PlantPigmentHue.FireRed] = new PlantPigmentHueInfo(PlantHue.FireRed, 1358, 1061855, PlantPigmentHue.FireRed);
}
private PlantPigmentHueInfo(PlantHue planthue, int hue, int name, PlantPigmentHue pigmentHue)
{
this.m_PlantHue = planthue;
this.m_Hue = hue;
this.m_Name = name;
this.m_PlantPigmentHue = pigmentHue;
}
public PlantHue PlantHue
{
get
{
return this.m_PlantHue;
}
}
public int Hue
{
get
{
return this.m_Hue;
}
}
public int Name
{
get
{
return this.m_Name;
}
}
public PlantPigmentHue PlantPigmentHue
{
get
{
return this.m_PlantPigmentHue;
}
}
public static PlantPigmentHue HueFromPlantHue(PlantHue hue)
{
if (hue == PlantHue.None || hue == PlantHue.Plain)
return PlantPigmentHue.Plain;
foreach (KeyValuePair<PlantPigmentHue, PlantPigmentHueInfo> kvp in m_Table)
{
if (kvp.Value.PlantHue == hue)
return kvp.Key;
}
return PlantPigmentHue.Plain;
}
public static PlantPigmentHueInfo GetInfo(PlantPigmentHue hue)
{
if (!m_Table.ContainsKey(hue))
return m_Table[PlantPigmentHue.Plain];
return m_Table[hue];
}
public static bool IsMixable(PlantPigmentHue hue)
{
return (hue <= PlantPigmentHue.White && hue != PlantPigmentHue.None);
}
public static bool IsBright(PlantPigmentHue hue)
{
return (hue & PlantPigmentHue.Bright) != PlantPigmentHue.None;
}
public static bool IsPrimary(PlantPigmentHue hue)
{
return hue == PlantPigmentHue.Red || hue == PlantPigmentHue.Blue || hue == PlantPigmentHue.Yellow;
}
public static PlantPigmentHue Mix(PlantPigmentHue first, PlantPigmentHue second)
{
if (!IsMixable(first) || !IsMixable(second))
return PlantPigmentHue.None;
if (first == second && (PlantPigmentHue.Plain == first || PlantPigmentHue.Black == first || PlantPigmentHue.White == first))
return PlantPigmentHue.None;
if (first == second)
return second | PlantPigmentHue.Bright;
if (first == PlantPigmentHue.Plain)
return second | PlantPigmentHue.Bright;
else if (second == PlantPigmentHue.Plain)
return first | PlantPigmentHue.Bright;
if (first == PlantPigmentHue.White)
return second | PlantPigmentHue.Ice;
else if (second == PlantPigmentHue.White)
return first | PlantPigmentHue.Ice;
if (first == PlantPigmentHue.Black)
return second | PlantPigmentHue.Dark;
else if (second == PlantPigmentHue.Black)
return first | PlantPigmentHue.Dark;
bool firstPrimary = IsPrimary(first);
bool secondPrimary = IsPrimary(second);
if (firstPrimary && secondPrimary)
return first | second;
//
// not sure after this point
//
// the remaining combinations to precess are (orange,purple,green with
// any of red, blue, yellow, orange, purple, green)
// the code below is temporary until proper mixed hues can be confirmed
//
// mixing table on stratics seems incorrect because the table is not symmetrical
//
if (firstPrimary && !secondPrimary)
return first;
if (!firstPrimary && secondPrimary)
return second;
return first & second;
}
public bool IsMixable()
{
return IsMixable(this.m_PlantPigmentHue);
}
public bool IsBright()
{
return IsBright(this.m_PlantPigmentHue);
}
public bool IsPrimary()
{
return IsPrimary(this.m_PlantPigmentHue);
}
}
}