From 9422ac06c29c077e8d61b43f3b35e8b4af446a85 Mon Sep 17 00:00:00 2001 From: liQdQ <74311003+liQdQ@users.noreply.github.com> Date: Wed, 11 Nov 2020 16:02:26 +0100 Subject: [PATCH 1/9] Update .gitattributes --- .gitattributes | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitattributes b/.gitattributes index b4225bda..bdb0cabc 100644 --- a/.gitattributes +++ b/.gitattributes @@ -15,5 +15,3 @@ *.PDF diff=astextplain *.rtf diff=astextplain *.RTF diff=astextplain - -Source/ export-ignore \ No newline at end of file From 0cc8a16ada26f6a3069c426c992719d3622d9c50 Mon Sep 17 00:00:00 2001 From: liQdQ <74311003+liQdQ@users.noreply.github.com> Date: Wed, 11 Nov 2020 19:40:21 +0100 Subject: [PATCH 2/9] Add files via upload --- .../AlienRace/AlienPartGenerator.BodyAddon.cs | 10 +- .../AlienRace/AlienRace/AlienPartGenerator.cs | 59 +- Source/AlienRace/AlienRace/HarmonyPatches.cs | 50 +- Source/AlienRace/AlienRace/TriColorShader.cs | 832 ++++++++++++++++++ Source/AlienRace/AlienRace/Utilities.cs | 2 +- 5 files changed, 902 insertions(+), 51 deletions(-) create mode 100644 Source/AlienRace/AlienRace/TriColorShader.cs diff --git a/Source/AlienRace/AlienRace/AlienPartGenerator.BodyAddon.cs b/Source/AlienRace/AlienRace/AlienPartGenerator.BodyAddon.cs index d176fcb4..07c24329 100644 --- a/Source/AlienRace/AlienRace/AlienPartGenerator.BodyAddon.cs +++ b/Source/AlienRace/AlienRace/AlienPartGenerator.BodyAddon.cs @@ -5,6 +5,7 @@ using Verse; using System.Xml; + namespace AlienRace { using System; @@ -69,6 +70,7 @@ public virtual bool CanDrawAddon(Pawn pawn) => (this.hediffGraphics?.Any(predicate: bahg => bahg.hediff == HediffDefOf.MissingBodyPart) ?? false)) && (pawn.gender == Gender.Female ? this.drawForFemale : this.drawForMale) && (this.bodyTypeRequirement.NullOrEmpty() || pawn.story.bodyType.ToString() == this.bodyTypeRequirement); + public virtual Graphic GetPath(Pawn pawn, ref int sharedIndex, int? savedIndex = new int?()) { string returnPath = string.Empty; @@ -130,19 +132,19 @@ public virtual bool CanDrawAddon(Pawn pawn) => if (variantCounting <= 0) variantCounting = 1; - ExposableValueTuple channel = pawn.GetComp().GetChannel(this.ColorChannel); + ExposableValueTuple channel = pawn.GetComp().GetChannel(this.ColorChannel); int tv; //Log.Message($"{pawn.Name.ToStringFull}\n{channel.first.ToString()} | {pawn.story.hairColor}"); return !returnPath.NullOrEmpty() ? - GraphicDatabase.Get(returnPath += (tv = (savedIndex.HasValue ? (sharedIndex = savedIndex.Value % variantCounting) : + TriColorGraphicDatabase.Get(returnPath += (tv = (savedIndex.HasValue ? (sharedIndex = savedIndex.Value % variantCounting) : (this.linkVariantIndexWithPrevious ? sharedIndex % variantCounting : (sharedIndex = Rand.Range(min: 0, variantCounting))))) == 0 ? "" : tv.ToString(), - ContentFinder.Get(returnPath + "_northm", reportFailure: false) == null ? this.ShaderType.Shader : ShaderDatabase.CutoutComplex, //ShaderDatabase.Transparent, + ContentFinder.Get(returnPath + "_northm", reportFailure: false) == null ? this.ShaderType.Shader : TriColorShaderDatabase.Tricolor, //ShaderDatabase.Transparent, this.drawSize * 1.5f, - channel.first, channel.second, new GraphicData + channel.first, channel.second, channel.third, new GraphicData { drawRotated = !this.drawRotated }) : diff --git a/Source/AlienRace/AlienRace/AlienPartGenerator.cs b/Source/AlienRace/AlienRace/AlienPartGenerator.cs index 41c03063..7cbcea85 100644 --- a/Source/AlienRace/AlienRace/AlienPartGenerator.cs +++ b/Source/AlienRace/AlienRace/AlienPartGenerator.cs @@ -6,7 +6,8 @@ using Verse; namespace AlienRace -{ +{ + using System.Runtime.ExceptionServices; using System.Text; public partial class AlienPartGenerator @@ -40,19 +41,27 @@ public partial class AlienPartGenerator public static string GetAlienHead(string userpath, string gender, string crowntype) => userpath.NullOrEmpty() ? "" : userpath + (userpath == GraphicPaths.VANILLA_HEAD_PATH ? gender + "/" : "") + (!gender.NullOrEmpty() ? gender + "_" : "") + crowntype; - public Graphic GetNakedGraphic(BodyTypeDef bodyType, Shader shader, Color skinColor, Color skinColorSecond, string userpath, string gender) => - GraphicDatabase.Get(typeof(Graphic_Multi), GetNakedPath(bodyType, userpath, this.useGenderedBodies ? gender : ""), shader, Vector2.one, - skinColor, skinColorSecond, data: null, shaderParameters: null); + public Graphic GetNakedGraphic(BodyTypeDef bodyType, Shader shader, Color skinColor, Color skinColorSecond, Color skinColorThird, string userpath, string gender) => + TriColorGraphicDatabase.Get(typeof(Graphic_Multi), GetNakedPath(bodyType, userpath, this.useGenderedBodies ? gender : ""), shader, Vector2.one, + skinColor, skinColorSecond, skinColorThird, data: null, shaderParameters: null); //GraphicDatabase.Get(path: GetNakedPath(bodyType: bodyType, userpath: userpath, gender: this.useGenderedBodies ? gender : ""), shader: shader, drawSize: Vector2.one, color: skinColor, colorTwo: skinColorSecond); public static string GetNakedPath(BodyTypeDef bodyType, string userpath, string gender) => userpath + (!gender.NullOrEmpty() ? gender + "_" : "") + "Naked_" + bodyType; - public Color SkinColor(Pawn alien, bool first = true) + public Color SkinColor(Pawn alien, int channel = 1) { AlienComp alienComp = alien.TryGetComp(); - ExposableValueTuple skinColors = alienComp.GetChannel(channel: "skin"); - return first ? skinColors.first : skinColors.second; + ExposableValueTuple skinColors = alienComp.GetChannel(channel: "skin"); + switch (channel) + { + default: + return skinColors.first; + case 2: + return skinColors.second; + case 3: + return skinColors.third; + } } public void GenerateMeshsAndMeshPools() @@ -146,6 +155,7 @@ public class ColorChannelGenerator public string name = ""; public ColorGenerator first; public ColorGenerator second; + public ColorGenerator third; } @@ -164,41 +174,42 @@ public class AlienComp : ThingComp public List addonGraphics; public List addonVariants; - private Dictionary> colorChannels; + private Dictionary> colorChannels; - public Dictionary> ColorChannels + public Dictionary> ColorChannels { get { if (this.colorChannels == null || !this.colorChannels.Any()) { - this.colorChannels = new Dictionary>(); + this.colorChannels = new Dictionary>(); Pawn pawn = (Pawn) this.parent; ThingDef_AlienRace alienProps = ((ThingDef_AlienRace) this.parent.def); AlienPartGenerator apg = alienProps.alienRace.generalSettings.alienPartGenerator; - this.colorChannels.Add(key: "base", new ExposableValueTuple(Color.white, Color.white)); - this.colorChannels.Add(key: "hair", new ExposableValueTuple(Color.clear, Color.clear)); + this.colorChannels.Add(key: "base", new ExposableValueTuple(Color.white, Color.white, Color.white)); + this.colorChannels.Add(key: "hair", new ExposableValueTuple(Color.clear, Color.clear, Color.clear)); Color skinColor = PawnSkinColors.GetSkinColor(pawn.story.melanin); - this.colorChannels.Add(key: "skin", new ExposableValueTuple(skinColor, skinColor)); + this.colorChannels.Add(key: "skin", new ExposableValueTuple(skinColor, skinColor, skinColor)); foreach (ColorChannelGenerator channel in apg.colorChannels) { if (!this.colorChannels.ContainsKey(channel.name)) - this.colorChannels.Add(channel.name, new ExposableValueTuple(Color.white, Color.white)); - ExposableValueTuple colors = this.colorChannels[channel.name]; + this.colorChannels.Add(channel.name, new ExposableValueTuple(Color.white, Color.white, Color.white)); + ExposableValueTuple colors = this.colorChannels[channel.name]; if (channel.first != null) colors.first = this.GenerateColor(channel.first); if (channel.second != null) colors.second = this.GenerateColor(channel.second); } - ExposableValueTuple hairColors = this.colorChannels[key: "hair"]; + ExposableValueTuple hairColors = this.colorChannels[key: "hair"]; if (hairColors.first == Color.clear) { Color color = PawnHairColors.RandomHairColor(pawn.story.SkinColor, pawn.ageTracker.AgeBiologicalYears); hairColors.first = color; hairColors.second = color; + hairColors.third = color; } pawn.story.hairColor = hairColors.first; @@ -253,7 +264,7 @@ public override void PostExposeData() Scribe_Collections.Look(ref this.colorChannels, label: "colorChannels"); } - public ExposableValueTuple GetChannel(string channel) + public ExposableValueTuple GetChannel(string channel) { if (this.ColorChannels.ContainsKey(channel)) return this.ColorChannels[channel]; @@ -264,16 +275,17 @@ public ExposableValueTuple GetChannel(string channel) foreach (ColorChannelGenerator apgChannel in apg.colorChannels) if (apgChannel.name == channel) { - this.ColorChannels.Add(channel, new ExposableValueTuple()); + this.ColorChannels.Add(channel, new ExposableValueTuple()); if (apgChannel.first != null) this.ColorChannels[channel].first = this.GenerateColor(apgChannel.first); if (apgChannel.second != null) this.ColorChannels[channel].second = this.GenerateColor(apgChannel.second); - + if (apgChannel.third != null) + this.ColorChannels[channel].third = this.GenerateColor(apgChannel.third); return this.ColorChannels[channel]; } - return new ExposableValueTuple(Color.white, Color.white); + return new ExposableValueTuple(Color.white, Color.white, Color.white); } internal void AssignProperMeshs() @@ -296,25 +308,28 @@ private static void RegenerateColorchannels() } } - public class ExposableValueTuple : IExposable + public class ExposableValueTuple : IExposable { public K first; public V second; + public P third; public ExposableValueTuple() { } - public ExposableValueTuple(K first, V second) + public ExposableValueTuple(K first, V second, P third) { this.first = first; this.second = second; + this.third = third; } public void ExposeData() { Scribe_Values.Look(ref this.first, label: "first"); Scribe_Values.Look(ref this.second, label: "second"); + Scribe_Values.Look(ref this.third, label: "third"); } } diff --git a/Source/AlienRace/AlienRace/HarmonyPatches.cs b/Source/AlienRace/AlienRace/HarmonyPatches.cs index a1eaae99..30a3ff5a 100644 --- a/Source/AlienRace/AlienRace/HarmonyPatches.cs +++ b/Source/AlienRace/AlienRace/HarmonyPatches.cs @@ -2068,29 +2068,30 @@ public static bool ResolveAllGraphicsPrefix(PawnGraphicSet __instance) "", alienComp.crownType)); __instance.nakedGraphic = !graphicPaths.body.NullOrEmpty() ? - apg.GetNakedGraphic(alien.story.bodyType, - ContentFinder.Get( - AlienPartGenerator.GetNakedPath(alien.story.bodyType, graphicPaths.body, - apg.useGenderedBodies ? alien.gender.ToString() : "") + - "_northm", reportFailure: false) == null ? - graphicPaths.skinShader?.Shader ?? ShaderDatabase.Cutout : - ShaderDatabase.CutoutComplex, __instance.pawn.story.SkinColor, - apg.SkinColor(alien, first: false), graphicPaths.body, - alien.gender.ToString()) : - null; + apg.GetNakedGraphic(alien.story.bodyType, + ContentFinder.Get( + AlienPartGenerator.GetNakedPath(alien.story.bodyType, graphicPaths.body, + apg.useGenderedBodies ? alien.gender.ToString() : "") + + "_northm", reportFailure: false) == null ? + graphicPaths.skinShader?.Shader ?? TriColorShaderDatabase.Tricolor : + TriColorShaderDatabase.Tricolor, __instance.pawn.story.SkinColor, + apg.SkinColor(alien, 2), apg.SkinColor(alien, 3),graphicPaths.body, + alien.gender.ToString()) : null; + __instance.rottingGraphic = !graphicPaths.body.NullOrEmpty() ? - apg.GetNakedGraphic(alien.story.bodyType, graphicPaths.skinShader?.Shader ?? ShaderDatabase.Cutout, - PawnGraphicSet.RottingColor, PawnGraphicSet.RottingColor, graphicPaths.body, - alien.gender.ToString()) : - null; + apg.GetNakedGraphic(alien.story.bodyType, graphicPaths.skinShader?.Shader ?? TriColorShaderDatabase.Tricolor, + PawnGraphicSet.RottingColor, PawnGraphicSet.RottingColor, PawnGraphicSet.RottingColor, graphicPaths.body, + alien.gender.ToString()) : null; + __instance.dessicatedGraphic = !graphicPaths.skeleton.NullOrEmpty() ? GraphicDatabase.Get((graphicPaths.skeleton == GraphicPaths.VANILLA_SKELETON_PATH ? alien.story.bodyType.bodyDessicatedGraphicPath : graphicPaths.skeleton), ShaderDatabase.Cutout) : null; + __instance.headGraphic = alien.health.hediffSet.HasHead && !alien.story.HeadGraphicPath.NullOrEmpty() ? - GraphicDatabase.Get(alien.story.HeadGraphicPath, - ContentFinder.Get(alien.story.HeadGraphicPath + "_northm", reportFailure: false) == null ? - graphicPaths.skinShader?.Shader ?? ShaderDatabase.Cutout : - ShaderDatabase.CutoutComplex, Vector2.one, alien.story.SkinColor, - apg.SkinColor(alien, first: false)) : - null; + GraphicDatabase.Get(alien.story.HeadGraphicPath, + ContentFinder.Get(alien.story.HeadGraphicPath + "_northm", reportFailure: false) == null ? + graphicPaths.skinShader?.Shader ?? ShaderDatabase.Cutout : + ShaderDatabase.CutoutComplex, Vector2.one, alien.story.SkinColor, + apg.SkinColor(alien, 2)) : null; + __instance.desiccatedHeadGraphic = alien.health.hediffSet.HasHead && !alien.story.HeadGraphicPath.NullOrEmpty() ? GraphicDatabase.Get(alien.story.HeadGraphicPath, ShaderDatabase.Cutout, Vector2.one, PawnGraphicSet.RottingColor) : @@ -2102,11 +2103,12 @@ public static bool ResolveAllGraphicsPrefix(PawnGraphicSet __instance) ContentFinder.Get(__instance.pawn.story.hairDef.texPath + "_northm", reportFailure: false) == null ? (alienProps.alienRace.hairSettings.shader?.Shader ?? ShaderDatabase.Cutout) : ShaderDatabase.CutoutComplex, Vector2.one, alien.story.hairColor, alienComp.GetChannel(channel: "hair").second); + __instance.headStumpGraphic = !graphicPaths.stump.NullOrEmpty() ? - GraphicDatabase.Get(graphicPaths.stump, - alien.story.SkinColor == apg.SkinColor(alien, first: false) ? ShaderDatabase.Cutout : ShaderDatabase.CutoutComplex, Vector2.one, - alien.story.SkinColor, apg.SkinColor(alien, first: false)) : - null; + GraphicDatabase.Get(graphicPaths.stump, + alien.story.SkinColor == apg.SkinColor(alien, 2) ? ShaderDatabase.Cutout : ShaderDatabase.CutoutComplex, Vector2.one, + alien.story.SkinColor, apg.SkinColor(alien, 2)) : null; + __instance.desiccatedHeadStumpGraphic = !graphicPaths.stump.NullOrEmpty() ? GraphicDatabase.Get(graphicPaths.stump, ShaderDatabase.Cutout, Vector2.one, diff --git a/Source/AlienRace/AlienRace/TriColorShader.cs b/Source/AlienRace/AlienRace/TriColorShader.cs new file mode 100644 index 00000000..24856da6 --- /dev/null +++ b/Source/AlienRace/AlienRace/TriColorShader.cs @@ -0,0 +1,832 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using RimWorld; +using UnityEngine; + +namespace AlienRace +{ + public class TriColorGraphic : Graphic + { + + public Color colorThree = Color.white; + + public Color ColorThree + { + get + { + return this.colorThree; + } + } + + public override Material MatSingle + { + get + { + return BaseContent.BadMat; + } + } + + public override Material MatWest + { + get + { + return this.MatSingle; + } + } + + public override Material MatSouth + { + get + { + return this.MatSingle; + } + } + + public override Material MatEast + { + get + { + return this.MatSingle; + } + } + + public override Material MatNorth + { + get + { + return this.MatSingle; + } + } + + public override bool WestFlipped + { + get + { + return this.DataAllowsFlip && !this.ShouldDrawRotated; + } + } + public override bool ShouldDrawRotated + { + get + { + return false; + } + } + + public override float DrawRotatedExtraAngleOffset + { + get + { + return 0.0f; + } + } + + public override bool UseSameGraphicForGhost + { + get + { + return false; + } + } + + + public virtual void Init(TriColorGraphicRequest req) + { + Log.ErrorOnce("Cannot init Graphic of class " + this.GetType().ToString(), 658928, false); + } + + protected override void DrawMeshInt(Mesh mesh, Vector3 loc, Quaternion quat, Material mat) + { + Graphics.DrawMesh(mesh, loc, quat, mat, 0); + } + + public override void Print(SectionLayer layer, Thing thing) + { + Vector2 size; + bool flipUv; + if (this.ShouldDrawRotated) + { + size = this.drawSize; + flipUv = false; + } + else + { + size = thing.Rotation.IsHorizontal ? this.drawSize.Rotated() : this.drawSize; + flipUv = thing.Rotation == Rot4.West && this.WestFlipped || thing.Rotation == Rot4.East && this.EastFlipped; + } + float rot = this.AngleFromRot(thing.Rotation); + if (flipUv && this.data != null) + rot += this.data.flipExtraRotation; + Vector3 center = thing.TrueCenter() + this.DrawOffset(thing.Rotation); + Printer_Plane.PrintPlane(layer, center, size, this.MatAt(thing.Rotation, thing), rot, flipUv, (Vector2[])null, (Color32[])null, 0.01f, 0.0f); + if (this.ShadowGraphic == null || thing == null) + return; + this.ShadowGraphic.Print(layer, thing); + } + + public virtual TriColorGraphic GetColoredVersion( + Shader newShader, + Color newColor, + Color newColorTwo, + Color newColorThree) + { + Log.ErrorOnce("CloneColored not implemented on this subclass of Graphic: " + this.GetType().ToString(), 66300, false); + return (TriColorGraphic)BaseContent.BadGraphic; + } + + public virtual TriColorGraphic GetCopy(Vector2 newDrawSize) + { + return TriColorGraphicDatabase.Get(this.GetType(), + this.path, + this.Shader, + newDrawSize, + this.color, + this.colorTwo, + this.colorThree); + } + } + public class TriColorGraphic_Multi : TriColorGraphic + { + private Material[] mats = new Material[4]; + private bool westFlipped; + private bool eastFlipped; + private float drawRotatedExtraAngleOffset; + + public string GraphicPath + { + get + { + return this.path; + } + } + + public override Material MatSingle + { + get + { + + return this.MatSouth; + } + } + + public override Material MatWest + { + get + { + return this.mats[3]; + } + } + + public override Material MatSouth + { + get + { + return this.mats[2]; + } + } + + public override Material MatEast + { + get + { + return this.mats[1]; + } + } + + public override Material MatNorth + { + get + { + return this.mats[0]; + } + } + + public override bool WestFlipped + { + get + { + return this.westFlipped; + } + } + + public override bool EastFlipped + { + get + { + return this.eastFlipped; + } + } + + public override bool ShouldDrawRotated + { + get + { + if (this.data != null && !this.data.drawRotated) + return false; + return this.MatEast == this.MatNorth || this.MatWest == this.MatNorth; + } + } + + public override float DrawRotatedExtraAngleOffset + { + get + { + return this.drawRotatedExtraAngleOffset; + } + } + + public override void Init(TriColorGraphicRequest req) + { + this.data = req.graphicData; + this.path = req.path; + this.color = req.color; + this.colorTwo = req.colorTwo; + this.colorThree = req.colorThree; + this.drawSize = req.drawSize; + Texture2D[] texture2DArray1 = new Texture2D[this.mats.Length]; + texture2DArray1[0] = ContentFinder.Get(req.path + "_north", false); + texture2DArray1[1] = ContentFinder.Get(req.path + "_east", false); + texture2DArray1[2] = ContentFinder.Get(req.path + "_south", false); + texture2DArray1[3] = ContentFinder.Get(req.path + "_west", false); + if (texture2DArray1[0] == null) + { + if (texture2DArray1[2] != null) + { + texture2DArray1[0] = texture2DArray1[2]; + this.drawRotatedExtraAngleOffset = 180f; + } + else if (texture2DArray1[1] != null) + { + texture2DArray1[0] = texture2DArray1[1]; + this.drawRotatedExtraAngleOffset = -90f; + } + else if (texture2DArray1[3] != null) + { + texture2DArray1[0] = texture2DArray1[3]; + this.drawRotatedExtraAngleOffset = 90f; + } + else + texture2DArray1[0] = ContentFinder.Get(req.path, false); + } + if (texture2DArray1[0] == null) + { + Log.Error("Failed to find any textures at " + req.path + " while constructing " + this.ToStringSafe(), false); + } + + else + { + if (texture2DArray1[2] == null) + texture2DArray1[2] = texture2DArray1[0]; + if (texture2DArray1[1] == null) + { + if (texture2DArray1[3] != null) + { + texture2DArray1[1] = texture2DArray1[3]; + this.eastFlipped = this.DataAllowsFlip; + } + else + texture2DArray1[1] = texture2DArray1[0]; + } + if (texture2DArray1[3] == null) + { + if (texture2DArray1[1] != null) + { + texture2DArray1[3] = texture2DArray1[1]; + this.westFlipped = this.DataAllowsFlip; + } + else + texture2DArray1[3] = texture2DArray1[0]; + } + Texture2D[] texture2DArray2 = new Texture2D[this.mats.Length]; + if (req.shader == TriColorShaderDatabase.Tricolor) + { + texture2DArray2[0] = ContentFinder.Get(req.path + "_northm", false); + texture2DArray2[1] = ContentFinder.Get(req.path + "_eastm", false); + texture2DArray2[2] = ContentFinder.Get(req.path + "_southm", false); + texture2DArray2[3] = ContentFinder.Get(req.path + "_westm", false); + if (texture2DArray2[0] == null) + { + if (texture2DArray2[2] != null) + texture2DArray2[0] = texture2DArray2[2]; + else if (texture2DArray2[1] != null) + texture2DArray2[0] = texture2DArray2[1]; + else if (texture2DArray2[3] != null) + texture2DArray2[0] = texture2DArray2[3]; + } + if (texture2DArray2[2] == null) + texture2DArray2[2] = texture2DArray2[0]; + if (texture2DArray2[1] == null) + texture2DArray2[1] = !(texture2DArray2[3] != null) ? texture2DArray2[0] : texture2DArray2[3]; + if (texture2DArray2[3] == null) + texture2DArray2[3] = !(texture2DArray2[1] != null) ? texture2DArray2[0] : texture2DArray2[1]; + } + for (int index = 0; index < this.mats.Length; ++index) + { + this.mats[index] = TriColorMaterialPool.MatFrom(new TriColorMaterialRequest() + { + mainTex = texture2DArray1[index], + shader = req.shader, + color = this.color, + colorTwo = this.colorTwo, + colorThree = this.colorThree, + maskTex = texture2DArray2[index], + shaderParameters = req.shaderParameters + }); + + }; + } + } + + public override TriColorGraphic GetColoredVersion( + Shader newShader, + Color newColor, + Color newColorTwo, + Color newColorThree) + { + return TriColorGraphicDatabase.Get(this.path, newShader, this.drawSize, newColor, newColorTwo, newColorThree, this.data); + } + + public override string ToString() + { + return "Multi(initPath=" + this.path + ", color=" + (object)this.color + ", colorTwo=" + (object)this.colorTwo + ")"; + } + + public override int GetHashCode() + { + return Gen.HashCombineStruct(Gen.HashCombineStruct(Gen.HashCombineStruct(Gen.HashCombine(0, this.path), this.color), this.colorTwo), this.ColorThree); + } + } + public static class TriColorGraphicDatabase + { + private static Dictionary allGraphics = new Dictionary(); + /* + public static AvaliGraphic Get(string path) where T : AvaliGraphic, new() + { + return (AvaliGraphic)AvaliGraphicDatabase.GetInner(new AvaliGraphicRequest(typeof(T), path, ShaderDatabase.Cutout, Vector2.one, Color.white, Color.white, Color.white, (GraphicData)null, 0, (List)null)); + } + + public static AvaliGraphic Get(string path, Shader shader) where T : AvaliGraphic, new() + { + return (AvaliGraphic)AvaliGraphicDatabase.GetInner(new AvaliGraphicRequest(typeof(T), path, shader, Vector2.one, Color.white, Color.white, Color.white, (GraphicData)null, 0, (List)null)); + } + + public static AvaliGraphic Get(string path, Shader shader, Vector2 drawSize, Color color) where T : AvaliGraphic, new() + { + return (AvaliGraphic)AvaliGraphicDatabase.GetInner(new AvaliGraphicRequest(typeof(T), path, shader, drawSize, color, Color.white, Color.white, (GraphicData)null, 0, (List)null)); + } + + public static AvaliGraphic Get( + string path, + Shader shader, + Vector2 drawSize, + Color color, + int renderQueue) + where T : AvaliGraphic, new() + { + return (AvaliGraphic)AvaliGraphicDatabase.GetInner(new AvaliGraphicRequest(typeof(T), path, shader, drawSize, color, Color.white, Color.white, (GraphicData)null, renderQueue, (List)null)); + } + + public static AvaliGraphic Get( + string path, + Shader shader, + Vector2 drawSize, + Color color, + Color colorTwo, + Color colorThree) + where T : AvaliGraphic, new() + { + return (AvaliGraphic)AvaliGraphicDatabase.GetInner(new AvaliGraphicRequest(typeof(T), path, shader, drawSize, color, colorTwo, colorThree, (GraphicData)null, 0, (List)null)); + } + public static AvaliGraphic Get( + string path, + Shader shader, + Vector2 drawSize, + Color color, + Color colorTwo) + where T : AvaliGraphic, new() + { + return (AvaliGraphic)AvaliGraphicDatabase.GetInner(new AvaliGraphicRequest(typeof(T), path, shader, drawSize, color, colorTwo, Color.white, (GraphicData)null, 0, (List)null)); + } + */ + public static TriColorGraphic Get( + string path, + Shader shader, + Vector2 drawSize, + Color color, + Color colorTwo, + Color colorThree, + GraphicData data) + where T : TriColorGraphic, new() + { + return (TriColorGraphic)TriColorGraphicDatabase.GetInner(new TriColorGraphicRequest(typeof(T), path, shader, drawSize, color, colorTwo, colorThree, data, 0, (List)null)); + } + + public static TriColorGraphic Get( + System.Type graphicClass, + string path, + Shader shader, + Vector2 drawSize, + Color color, + Color colorTwo, + Color colorThree) + { + return TriColorGraphicDatabase.Get(graphicClass, path, shader, drawSize, color, colorTwo, colorThree, (GraphicData)null, (List)null); + } + + public static TriColorGraphic Get( + System.Type graphicClass, + string path, + Shader shader, + Vector2 drawSize, + Color color, + Color colorTwo, + Color colorThree, + GraphicData data, + List shaderParameters) + { + TriColorGraphicRequest req = new TriColorGraphicRequest(graphicClass, path, shader, drawSize, color, colorTwo, colorThree, data, 0, shaderParameters); + if (req.graphicClass == typeof(Graphic_Multi)) + { + return (TriColorGraphic)TriColorGraphicDatabase.GetInner(req); + } + try + { + return (TriColorGraphic)GenGeneric.InvokeStaticGenericMethod(typeof(TriColorGraphicDatabase), req.graphicClass, "GetInner", (object)req); + } + catch (Exception ex) + { + Log.Error("Exception getting " + (object)graphicClass + " at " + path + ": " + ex.ToString(), false); + } + return (TriColorGraphic)BaseContent.BadGraphic; + } + + private static T GetInner(TriColorGraphicRequest req) where T : TriColorGraphic, new() + { + + req.color = (Color)(Color32)req.color; + req.colorTwo = (Color)(Color32)req.colorTwo; + req.colorThree = (Color)(Color32)req.colorThree; + TriColorGraphic graphic; + if (!TriColorGraphicDatabase.allGraphics.TryGetValue(req, out graphic)) + { + graphic = (TriColorGraphic)new T(); + graphic.Init(req); + TriColorGraphicDatabase.allGraphics.Add(req, graphic); + } + return (T)graphic; + } + /* + public static void Clear() + { + AvaliGraphicDatabase.allGraphics.Clear(); + } + + [DebugOutput("System", false)] + public static void AllGraphicsLoaded() + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.AppendLine("There are " + (object)AvaliGraphicDatabase.allGraphics.Count + " graphics loaded."); + int num = 0; + foreach (AvaliGraphic graphic in AvaliGraphicDatabase.allGraphics.Values) + { + stringBuilder.AppendLine(num.ToString() + " - " + graphic.ToString()); + if (num % 50 == 49) + { + Log.Message(stringBuilder.ToString(), false); + stringBuilder = new StringBuilder(); + } + ++num; + } + Log.Message(stringBuilder.ToString(), false); + } + */ + } + public struct TriColorGraphicRequest : IEquatable + { + public System.Type graphicClass; + public string path; + public Shader shader; + public Vector2 drawSize; + public Color color; + public Color colorTwo; + public Color colorThree; + public GraphicData graphicData; + public int renderQueue; + public List shaderParameters; + + public TriColorGraphicRequest( + System.Type graphicClass, + string path, + Shader shader, + Vector2 drawSize, + Color color, + Color colorTwo, + Color colorThree, + GraphicData graphicData, + int renderQueue, + List shaderParameters) + { + this.graphicClass = graphicClass; + this.path = path; + this.shader = shader; + this.drawSize = drawSize; + this.color = color; + this.colorTwo = colorTwo; + this.colorThree = colorThree; + this.graphicData = graphicData; + this.renderQueue = renderQueue; + this.shaderParameters = shaderParameters.NullOrEmpty() ? (List)null : shaderParameters; + } + + public override int GetHashCode() + { + if (this.path == null) + this.path = BaseContent.BadTexPath; + return Gen.HashCombine>(Gen.HashCombine(Gen.HashCombine(Gen.HashCombineStruct(Gen.HashCombineStruct(Gen.HashCombineStruct(Gen.HashCombine(Gen.HashCombine(Gen.HashCombine(0, this.graphicClass), this.path), this.shader), this.drawSize), this.color), this.colorTwo), this.graphicData), this.renderQueue), this.shaderParameters); + } + + public override bool Equals(object obj) + { + return obj is TriColorGraphicRequest other && this.Equals(other); + } + + public bool Equals(TriColorGraphicRequest other) + { + return this.graphicClass == other.graphicClass && this.path == other.path && ((UnityEngine.Object)this.shader == (UnityEngine.Object)other.shader && this.drawSize == other.drawSize) && (this.color == other.color && this.colorTwo == other.colorTwo && (this.graphicData == other.graphicData && this.renderQueue == other.renderQueue)) && this.shaderParameters == other.shaderParameters; + } + + public static bool operator ==(TriColorGraphicRequest lhs, TriColorGraphicRequest rhs) + { + return lhs.Equals(rhs); + } + + public static bool operator !=(TriColorGraphicRequest lhs, TriColorGraphicRequest rhs) + { + return !(lhs == rhs); + } + } + public static class TriColorMaterialPool + { + public static Material MatFrom(TriColorMaterialRequest req) + { + if (!UnityData.IsInMainThread) + { + Log.Error("Tried to get a material from a different thread.", false); + return null; + } + if (req.mainTex == null) + { + Log.Error("MatFrom with null sourceTex.", false); + return BaseContent.BadMat; + } + if (req.shader == null) + { + Log.Warning("Matfrom with null shader.", false); + return BaseContent.BadMat; + } + Material material; + if (!TriColorMaterialPool.matDictionary.TryGetValue(req, out material)) + { + material = new Material(req.shader); + material.name = req.shader.name + "_" + req.mainTex.name; + material.mainTexture = req.mainTex; + material.color = req.color; + material.SetTexture(ShaderPropertyIDs.MaskTex, req.maskTex); + material.SetColor(ShaderPropertyIDs.ColorTwo, req.colorTwo); + material.SetColor(TriColorShaderDatabase.ColorThree, req.colorThree); + material.SetTexture(ShaderPropertyIDs.MaskTex, req.maskTex); + if (req.renderQueue != 0) + { + material.renderQueue = req.renderQueue; + } + if (!req.shaderParameters.NullOrEmpty()) + { + for (int i = 0; i < req.shaderParameters.Count; i++) + { + req.shaderParameters[i].Apply(material); + } + } + TriColorMaterialPool.matDictionary.Add(req, material); + if (req.shader == ShaderDatabase.CutoutPlant || req.shader == ShaderDatabase.TransparentPlant) + { + WindManager.Notify_PlantMaterialCreated(material); + } + } + return material; + } + + private static Dictionary matDictionary = new Dictionary(); + } + public struct TriColorMaterialRequest : IEquatable + { + /* + public string BaseTexPath + { + set + { + this.mainTex = ContentFinder.Get(value, true); + } + } + + public AvaliMaterialRequest(Texture2D tex) + { + this.shader = ShaderDatabase.Cutout; + this.mainTex = tex; + this.color = Color.red; + this.colorTwo = Color.green; + this.colorThree = Color.blue; + this.maskTex = null; + this.renderQueue = 0; + this.shaderParameters = null; + } + + public AvaliMaterialRequest(Texture2D tex, Shader shader) + { + this.shader = shader; + this.mainTex = tex; + this.color = Color.green; + this.colorTwo = Color.blue; + this.colorThree = Color.red; + this.maskTex = null; + this.renderQueue = 0; + this.shaderParameters = null; + } + + public AvaliMaterialRequest(Texture2D tex, Shader shader, Color color) + { + this.shader = shader; + this.mainTex = tex; + this.color = color; + this.colorTwo = Color.red; + this.colorThree = Color.blue; + this.maskTex = null; + this.renderQueue = 0; + this.shaderParameters = null; + } + */ + public override int GetHashCode() + { + return Gen.HashCombine>(Gen.HashCombineInt(Gen.HashCombine(Gen.HashCombine(Gen.HashCombineStruct(Gen.HashCombineStruct(Gen.HashCombine(0, this.shader), this.color), this.colorTwo), this.mainTex), this.maskTex), this.renderQueue), this.shaderParameters); + } + + public override bool Equals(object obj) + { + return obj is TriColorMaterialRequest && this.Equals((TriColorMaterialRequest)obj); + } + + public bool Equals(TriColorMaterialRequest other) + { + return other.shader == this.shader && other.mainTex == this.mainTex && other.color == this.color && other.colorTwo == this.colorTwo && other.maskTex == this.maskTex && other.renderQueue == this.renderQueue && other.shaderParameters == this.shaderParameters; + } + + public static bool operator ==(TriColorMaterialRequest lhs, TriColorMaterialRequest rhs) + { + return lhs.Equals(rhs); + } + + public static bool operator !=(TriColorMaterialRequest lhs, TriColorMaterialRequest rhs) + { + return !(lhs == rhs); + } + + public override string ToString() + { + return string.Concat(new string[] + { + "AvaliMaterialRequest(", + this.shader.name, + ", ", + this.mainTex.name, + ", ", + this.color.ToString(), + ", ", + this.colorTwo.ToString(), + ", ", + this.colorThree.ToString(), + ",", + this.maskTex.ToString(), + ", ", + this.renderQueue.ToString(), + ")" + }); + } + + public Shader shader; + public Texture2D mainTex; + public Color color; + public Color colorTwo; + public Texture2D maskTex; + public int renderQueue; + public List shaderParameters; + public Color colorThree; + } + /* + [StaticConstructorOnStartup] + public static class AvaliShaderPropertyIDs + { + + static AvaliShaderPropertyIDs() + { + AvaliShaderPropertyIDs.MaskTexName = "_MaskTex"; + AvaliShaderPropertyIDs.SwayHeadName = "_SwayHead"; + AvaliShaderPropertyIDs.ShockwaveSpanName = "_ShockwaveSpan"; + AvaliShaderPropertyIDs.AgeSecsName = "_AgeSecs"; + AvaliShaderPropertyIDs.PlanetSunLightDirection = Shader.PropertyToID(AvaliShaderPropertyIDs.PlanetSunLightDirectionName); + AvaliShaderPropertyIDs.PlanetSunLightEnabled = Shader.PropertyToID(AvaliShaderPropertyIDs.PlanetSunLightEnabledName); + AvaliShaderPropertyIDs.PlanetRadius = Shader.PropertyToID(AvaliShaderPropertyIDs.PlanetRadiusName); + AvaliShaderPropertyIDs.MapSunLightDirection = Shader.PropertyToID(AvaliShaderPropertyIDs.MapSunLightDirectionName); + AvaliShaderPropertyIDs.GlowRadius = Shader.PropertyToID(AvaliShaderPropertyIDs.GlowRadiusName); + AvaliShaderPropertyIDs.GameSeconds = Shader.PropertyToID(AvaliShaderPropertyIDs.GameSecondsName); + AvaliShaderPropertyIDs.AgeSecs = Shader.PropertyToID(AvaliShaderPropertyIDs.AgeSecsName); + AvaliShaderPropertyIDs.Color = Shader.PropertyToID(AvaliShaderPropertyIDs.ColorName); + AvaliShaderPropertyIDs.ColorTwo = Shader.PropertyToID(AvaliShaderPropertyIDs.ColorTwoName); + //AvaliShaderPropertyIDs.ColorThree = Shader.PropertyToID(AvaliShaderPropertyIDs.ColorThreeName); + AvaliShaderPropertyIDs.MaskTex = Shader.PropertyToID(AvaliShaderPropertyIDs.MaskTexName); + AvaliShaderPropertyIDs.SwayHead = Shader.PropertyToID(AvaliShaderPropertyIDs.SwayHeadName); + AvaliShaderPropertyIDs.ShockwaveColor = Shader.PropertyToID("_ShockwaveColor"); + AvaliShaderPropertyIDs.ShockwaveSpan = Shader.PropertyToID(AvaliShaderPropertyIDs.ShockwaveSpanName); + AvaliShaderPropertyIDs.WaterCastVectSun = Shader.PropertyToID("_WaterCastVectSun"); + AvaliShaderPropertyIDs.WaterCastVectMoon = Shader.PropertyToID("_WaterCastVectMoon"); + AvaliShaderPropertyIDs.WaterOutputTex = Shader.PropertyToID("_WaterOutputTex"); + AvaliShaderPropertyIDs.WaterOffsetTex = Shader.PropertyToID("_WaterOffsetTex"); + AvaliShaderPropertyIDs.ShadowCompositeTex = Shader.PropertyToID("_ShadowCompositeTex"); + AvaliShaderPropertyIDs.FallIntensity = Shader.PropertyToID("_FallIntensity"); + } + + private static readonly string PlanetSunLightDirectionName = "_PlanetSunLightDirection"; + private static readonly string PlanetSunLightEnabledName = "_PlanetSunLightEnabled"; + private static readonly string PlanetRadiusName = "_PlanetRadius"; + private static readonly string MapSunLightDirectionName = "_CastVect"; + private static readonly string GlowRadiusName = "_GlowRadius"; + private static readonly string GameSecondsName = "_GameSeconds"; + private static readonly string ColorName = "_Color"; + private static readonly string ColorTwoName = "_ColorTwo"; + private static readonly string MaskTexName; + private static readonly string SwayHeadName; + private static readonly string ShockwaveSpanName; + private static readonly string AgeSecsName; + public static int PlanetSunLightDirection; + public static int PlanetSunLightEnabled; + public static int PlanetRadius; + public static int MapSunLightDirection; + public static int GlowRadius; + public static int GameSeconds; + public static int AgeSecs; + public static int Color; + public static int ColorTwo; + public static int MaskTex; + public static int SwayHead; + public static int ShockwaveColor; + public static int ShockwaveSpan; + public static int WaterCastVectSun; + public static int WaterCastVectMoon; + public static int WaterOutputTex; + public static int WaterOffsetTex; + public static int ShadowCompositeTex; + public static int FallIntensity; + //private static readonly string ColorThreeName = "_ColorThree"; + //public static int ColorThree; + + } + */ + [StaticConstructorOnStartup] + public class TriColorShaderDatabase + { + + static TriColorShaderDatabase() + { + string dir = RimValiUtility.dir; + + string path = dir + "/Shader/TriColorShader"; + AssetBundle bundle = RimValiUtility.shaderLoader(path); + Tricolor = (Shader)bundle.LoadAsset("assets/resources/materials/avalishader.shader"); + } + + public static Shader Tricolor; + public static int ColorThree = Shader.PropertyToID("_ColorThree"); + public static Dictionary lookup; + + public static Shader DefaultShader + { + get + { + return TriColorShaderDatabase.Tricolor; + } + } + } + public static class RimValiUtility + { + public static string dir = AlienRaceMod.settings.Mod.Content.RootDir.ToString(); //this.mod.RootDir.ToString(); + public static AssetBundle shaderLoader(string info) + { + AssetBundle assetBundle = AssetBundle.LoadFromFile(info); + return assetBundle; + } + } + +} + diff --git a/Source/AlienRace/AlienRace/Utilities.cs b/Source/AlienRace/AlienRace/Utilities.cs index eda0991e..7cbac247 100644 --- a/Source/AlienRace/AlienRace/Utilities.cs +++ b/Source/AlienRace/AlienRace/Utilities.cs @@ -98,7 +98,7 @@ public Def GetDef(Type defType) => GenDefDatabase.GetDef(defType, this.defName); } - public class Graphic_Multi_RotationFromData : Graphic_Multi + public class Graphic_Multi_RotationFromData : TriColorGraphic_Multi { public override bool ShouldDrawRotated => this.data?.drawRotated ?? false; From 29ee342752c695de07867d451e8cbdf74dbc0a42 Mon Sep 17 00:00:00 2001 From: liQdQ <74311003+liQdQ@users.noreply.github.com> Date: Wed, 11 Nov 2020 19:45:55 +0100 Subject: [PATCH 3/9] Update .gitattributes --- .gitattributes | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitattributes b/.gitattributes index bdb0cabc..7119a795 100644 --- a/.gitattributes +++ b/.gitattributes @@ -15,3 +15,5 @@ *.PDF diff=astextplain *.rtf diff=astextplain *.RTF diff=astextplain + +Source/ export-ignore From fb0c3b8bf2c37aa62c7b2eed2148bb7e1b3c91ad Mon Sep 17 00:00:00 2001 From: liQdQ <74311003+liQdQ@users.noreply.github.com> Date: Thu, 12 Nov 2020 17:07:13 +0100 Subject: [PATCH 4/9] Add files via upload --- .../AlienRace/AlienPartGenerator.BodyAddon.cs | 2 - .../AlienRace/AlienRace/AlienPartGenerator.cs | 20 +- Source/AlienRace/AlienRace/HarmonyPatches.cs | 59 +- Source/AlienRace/AlienRace/TriColorShader.cs | 534 ++++-------------- Source/AlienRace/AlienRace/Utilities.cs | 7 +- 5 files changed, 182 insertions(+), 440 deletions(-) diff --git a/Source/AlienRace/AlienRace/AlienPartGenerator.BodyAddon.cs b/Source/AlienRace/AlienRace/AlienPartGenerator.BodyAddon.cs index 07c24329..c476c572 100644 --- a/Source/AlienRace/AlienRace/AlienPartGenerator.BodyAddon.cs +++ b/Source/AlienRace/AlienRace/AlienPartGenerator.BodyAddon.cs @@ -5,7 +5,6 @@ using Verse; using System.Xml; - namespace AlienRace { using System; @@ -70,7 +69,6 @@ public virtual bool CanDrawAddon(Pawn pawn) => (this.hediffGraphics?.Any(predicate: bahg => bahg.hediff == HediffDefOf.MissingBodyPart) ?? false)) && (pawn.gender == Gender.Female ? this.drawForFemale : this.drawForMale) && (this.bodyTypeRequirement.NullOrEmpty() || pawn.story.bodyType.ToString() == this.bodyTypeRequirement); - public virtual Graphic GetPath(Pawn pawn, ref int sharedIndex, int? savedIndex = new int?()) { string returnPath = string.Empty; diff --git a/Source/AlienRace/AlienRace/AlienPartGenerator.cs b/Source/AlienRace/AlienRace/AlienPartGenerator.cs index 7cbcea85..5d7be1c0 100644 --- a/Source/AlienRace/AlienRace/AlienPartGenerator.cs +++ b/Source/AlienRace/AlienRace/AlienPartGenerator.cs @@ -40,14 +40,21 @@ public partial class AlienPartGenerator public string RandomAlienHead(string userpath, Pawn pawn) => GetAlienHead(userpath, (this.useGenderedHeads ? pawn.gender.ToString() : ""), pawn.GetComp().crownType = this.aliencrowntypes[Rand.Range(min: 0, this.aliencrowntypes.Count)]); public static string GetAlienHead(string userpath, string gender, string crowntype) => userpath.NullOrEmpty() ? "" : userpath + (userpath == GraphicPaths.VANILLA_HEAD_PATH ? gender + "/" : "") + (!gender.NullOrEmpty() ? gender + "_" : "") + crowntype; - + + public Graphic GetNakedGraphic(BodyTypeDef bodyType, Shader shader, Color skinColor, Color skinColorSecond, string userpath, string gender) => + GraphicDatabase.Get(typeof(Graphic_Multi), GetNakedPath(bodyType, userpath, this.useGenderedBodies ? gender : ""), shader, Vector2.one, + skinColor, skinColorSecond, data: null, shaderParameters: null); + + // New GetNakedGraphic, gets our new Graphic type public Graphic GetNakedGraphic(BodyTypeDef bodyType, Shader shader, Color skinColor, Color skinColorSecond, Color skinColorThird, string userpath, string gender) => TriColorGraphicDatabase.Get(typeof(Graphic_Multi), GetNakedPath(bodyType, userpath, this.useGenderedBodies ? gender : ""), shader, Vector2.one, skinColor, skinColorSecond, skinColorThird, data: null, shaderParameters: null); //GraphicDatabase.Get(path: GetNakedPath(bodyType: bodyType, userpath: userpath, gender: this.useGenderedBodies ? gender : ""), shader: shader, drawSize: Vector2.one, color: skinColor, colorTwo: skinColorSecond); - + public static string GetNakedPath(BodyTypeDef bodyType, string userpath, string gender) => userpath + (!gender.NullOrEmpty() ? gender + "_" : "") + "Naked_" + bodyType; + + // New SkinColor, not really that different. public Color SkinColor(Pawn alien, int channel = 1) { @@ -150,6 +157,8 @@ void AddToStringBuilder(string s) Log.Message($"Loaded body addon variants for {this.alienProps.defName}\n{logBuilder}"); } + + // Added third generator public class ColorChannelGenerator { public string name = ""; @@ -201,6 +210,8 @@ public Dictionary> ColorChannel colors.first = this.GenerateColor(channel.first); if (channel.second != null) colors.second = this.GenerateColor(channel.second); + if (channel.third != null) + colors.third = this.GenerateColor(channel.third); } ExposableValueTuple hairColors = this.colorChannels[key: "hair"]; @@ -239,7 +250,10 @@ public Color GenerateColor(ColorGenerator gen) { case ColorGenerator_CustomAlienChannel ac: string[] split = ac.colorChannel.Split('_'); - return split[1] == "1" ? this.ColorChannels[split[0]].first : this.ColorChannels[split[0]].second; + if (split[1] == "1") { return this.ColorChannels[split[0]].first; } + if (split[1] == "3") { return this.colorChannels[split[0]].third; } + return this.ColorChannels[split[0]].second; + //return split[1] == "1" ? this.ColorChannels[split[0]].first : this.ColorChannels[split[0]].second; default: return gen.NewRandomizedColor(); } diff --git a/Source/AlienRace/AlienRace/HarmonyPatches.cs b/Source/AlienRace/AlienRace/HarmonyPatches.cs index 30a3ff5a..ff89edf5 100644 --- a/Source/AlienRace/AlienRace/HarmonyPatches.cs +++ b/Source/AlienRace/AlienRace/HarmonyPatches.cs @@ -2026,6 +2026,18 @@ public static void TryGetRandomUnusedSolidBioForPostfix(List backstoryCa } } + /* + public static Material[] ApplyShader(Material[] oldMats, Color colorThree) + { + foreach (Material material in oldMats) + { + material.shader = TriColorShaderDatabase.Tricolor; + material.SetColor(TriColorShaderDatabase.ColorThree, colorThree); + } + return oldMats; + } + */ + public static bool ResolveAllGraphicsPrefix(PawnGraphicSet __instance) { Pawn alien = __instance.pawn; @@ -2059,38 +2071,44 @@ public static bool ResolveAllGraphicsPrefix(PawnGraphicSet __instance) alienComp.AssignProperMeshs(); + // There were crimes against formatting here. + Traverse.Create(alien.story).Field(name: "headGraphicPath").SetValue(alienComp.crownType.NullOrEmpty() ? - apg.RandomAlienHead( - graphicPaths.head, alien) : - AlienPartGenerator.GetAlienHead(graphicPaths.head, - apg.useGenderedHeads ? - alien.gender.ToString() : - "", alienComp.crownType)); + apg.RandomAlienHead( + graphicPaths.head, alien) : + AlienPartGenerator.GetAlienHead(graphicPaths.head, + apg.useGenderedHeads ? + alien.gender.ToString() : + "", alienComp.crownType)); + + // Has 3rd color now & using new shader __instance.nakedGraphic = !graphicPaths.body.NullOrEmpty() ? apg.GetNakedGraphic(alien.story.bodyType, ContentFinder.Get( AlienPartGenerator.GetNakedPath(alien.story.bodyType, graphicPaths.body, apg.useGenderedBodies ? alien.gender.ToString() : "") + "_northm", reportFailure: false) == null ? - graphicPaths.skinShader?.Shader ?? TriColorShaderDatabase.Tricolor : + graphicPaths.skinShader?.Shader ?? ShaderDatabase.Cutout : TriColorShaderDatabase.Tricolor, __instance.pawn.story.SkinColor, - apg.SkinColor(alien, 2), apg.SkinColor(alien, 3),graphicPaths.body, + apg.SkinColor(alien, 2), apg.SkinColor(alien, 3), graphicPaths.body, alien.gender.ToString()) : null; + // Has 3rd color now & using new shader __instance.rottingGraphic = !graphicPaths.body.NullOrEmpty() ? apg.GetNakedGraphic(alien.story.bodyType, graphicPaths.skinShader?.Shader ?? TriColorShaderDatabase.Tricolor, PawnGraphicSet.RottingColor, PawnGraphicSet.RottingColor, PawnGraphicSet.RottingColor, graphicPaths.body, alien.gender.ToString()) : null; - __instance.dessicatedGraphic = !graphicPaths.skeleton.NullOrEmpty() ? GraphicDatabase.Get((graphicPaths.skeleton == GraphicPaths.VANILLA_SKELETON_PATH ? alien.story.bodyType.bodyDessicatedGraphicPath : graphicPaths.skeleton), ShaderDatabase.Cutout) : null; - + __instance.dessicatedGraphic = !graphicPaths.skeleton.NullOrEmpty() ? GraphicDatabase.Get((graphicPaths.skeleton == GraphicPaths.VANILLA_SKELETON_PATH ? alien.story.bodyType.bodyDessicatedGraphicPath : graphicPaths.skeleton), ShaderDatabase.Cutout) : null; + + // Has 3rd color now & using new shader __instance.headGraphic = alien.health.hediffSet.HasHead && !alien.story.HeadGraphicPath.NullOrEmpty() ? - GraphicDatabase.Get(alien.story.HeadGraphicPath, + TriColorGraphicDatabase.Get(alien.story.HeadGraphicPath, ContentFinder.Get(alien.story.HeadGraphicPath + "_northm", reportFailure: false) == null ? graphicPaths.skinShader?.Shader ?? ShaderDatabase.Cutout : - ShaderDatabase.CutoutComplex, Vector2.one, alien.story.SkinColor, - apg.SkinColor(alien, 2)) : null; + TriColorShaderDatabase.Tricolor, Vector2.one, alien.story.SkinColor, + apg.SkinColor(alien, 2), apg.SkinColor(alien, 3)) : null; __instance.desiccatedHeadGraphic = alien.health.hediffSet.HasHead && !alien.story.HeadGraphicPath.NullOrEmpty() ? GraphicDatabase.Get(alien.story.HeadGraphicPath, ShaderDatabase.Cutout, Vector2.one, @@ -2099,15 +2117,18 @@ public static bool ResolveAllGraphicsPrefix(PawnGraphicSet __instance) __instance.skullGraphic = alien.health.hediffSet.HasHead && !graphicPaths.skull.NullOrEmpty() ? GraphicDatabase.Get(graphicPaths.skull, ShaderDatabase.Cutout, Vector2.one, Color.white) : null; - __instance.hairGraphic = GraphicDatabase.Get(__instance.pawn.story.hairDef.texPath, + + // Has 3rd color now & using new shader + __instance.hairGraphic = TriColorGraphicDatabase.Get(__instance.pawn.story.hairDef.texPath, ContentFinder.Get(__instance.pawn.story.hairDef.texPath + "_northm", reportFailure: false) == null ? (alienProps.alienRace.hairSettings.shader?.Shader ?? ShaderDatabase.Cutout) : - ShaderDatabase.CutoutComplex, Vector2.one, alien.story.hairColor, alienComp.GetChannel(channel: "hair").second); - + TriColorShaderDatabase.Tricolor, Vector2.one, alien.story.hairColor, alienComp.GetChannel(channel: "hair").second, alienComp.GetChannel(channel: "hair").third); + + // Has 3rd color now & using new shader __instance.headStumpGraphic = !graphicPaths.stump.NullOrEmpty() ? - GraphicDatabase.Get(graphicPaths.stump, - alien.story.SkinColor == apg.SkinColor(alien, 2) ? ShaderDatabase.Cutout : ShaderDatabase.CutoutComplex, Vector2.one, - alien.story.SkinColor, apg.SkinColor(alien, 2)) : null; + TriColorGraphicDatabase.Get(graphicPaths.stump, + alien.story.SkinColor == apg.SkinColor(alien, 2) ? ShaderDatabase.Cutout : TriColorShaderDatabase.Tricolor, Vector2.one, + alien.story.SkinColor, apg.SkinColor(alien, 2), apg.SkinColor(alien, 3)) : null; __instance.desiccatedHeadStumpGraphic = !graphicPaths.stump.NullOrEmpty() ? GraphicDatabase.Get(graphicPaths.stump, diff --git a/Source/AlienRace/AlienRace/TriColorShader.cs b/Source/AlienRace/AlienRace/TriColorShader.cs index 24856da6..a18d7edb 100644 --- a/Source/AlienRace/AlienRace/TriColorShader.cs +++ b/Source/AlienRace/AlienRace/TriColorShader.cs @@ -6,151 +6,19 @@ using Verse; using RimWorld; using UnityEngine; +using HarmonyLib; namespace AlienRace { - public class TriColorGraphic : Graphic - { - - public Color colorThree = Color.white; - - public Color ColorThree - { - get - { - return this.colorThree; - } - } - - public override Material MatSingle - { - get - { - return BaseContent.BadMat; - } - } - - public override Material MatWest - { - get - { - return this.MatSingle; - } - } - - public override Material MatSouth - { - get - { - return this.MatSingle; - } - } - - public override Material MatEast - { - get - { - return this.MatSingle; - } - } - - public override Material MatNorth - { - get - { - return this.MatSingle; - } - } - - public override bool WestFlipped - { - get - { - return this.DataAllowsFlip && !this.ShouldDrawRotated; - } - } - public override bool ShouldDrawRotated - { - get - { - return false; - } - } - - public override float DrawRotatedExtraAngleOffset - { - get - { - return 0.0f; - } - } - - public override bool UseSameGraphicForGhost - { - get - { - return false; - } - } - - - public virtual void Init(TriColorGraphicRequest req) - { - Log.ErrorOnce("Cannot init Graphic of class " + this.GetType().ToString(), 658928, false); - } - - protected override void DrawMeshInt(Mesh mesh, Vector3 loc, Quaternion quat, Material mat) - { - Graphics.DrawMesh(mesh, loc, quat, mat, 0); - } - - public override void Print(SectionLayer layer, Thing thing) - { - Vector2 size; - bool flipUv; - if (this.ShouldDrawRotated) - { - size = this.drawSize; - flipUv = false; - } - else - { - size = thing.Rotation.IsHorizontal ? this.drawSize.Rotated() : this.drawSize; - flipUv = thing.Rotation == Rot4.West && this.WestFlipped || thing.Rotation == Rot4.East && this.EastFlipped; - } - float rot = this.AngleFromRot(thing.Rotation); - if (flipUv && this.data != null) - rot += this.data.flipExtraRotation; - Vector3 center = thing.TrueCenter() + this.DrawOffset(thing.Rotation); - Printer_Plane.PrintPlane(layer, center, size, this.MatAt(thing.Rotation, thing), rot, flipUv, (Vector2[])null, (Color32[])null, 0.01f, 0.0f); - if (this.ShadowGraphic == null || thing == null) - return; - this.ShadowGraphic.Print(layer, thing); - } - - public virtual TriColorGraphic GetColoredVersion( - Shader newShader, - Color newColor, - Color newColorTwo, - Color newColorThree) - { - Log.ErrorOnce("CloneColored not implemented on this subclass of Graphic: " + this.GetType().ToString(), 66300, false); - return (TriColorGraphic)BaseContent.BadGraphic; - } - - public virtual TriColorGraphic GetCopy(Vector2 newDrawSize) - { - return TriColorGraphicDatabase.Get(this.GetType(), - this.path, - this.Shader, - newDrawSize, - this.color, - this.colorTwo, - this.colorThree); - } - } - public class TriColorGraphic_Multi : TriColorGraphic + // 4 classes and 2 structs is probably the leanest I can make it, without turning everything unreadable. + public class TriColorGraphic_Multi : Graphic { + /* + // Replaces the vanilla Rimworld Pawn graphic class for alien races, is basically identical with the addition of a third color + // and allowing our shader to be used with masks. The shader itself does not require a third color to be specified, + // so it works just as well with vanilla pawns and HAR pawns without a third channel, and hasn't caused trouble with any race mod I've tried. + */ + public Color colorThree = Color.white; private Material[] mats = new Material[4]; private bool westFlipped; private bool eastFlipped; @@ -238,8 +106,8 @@ public override float DrawRotatedExtraAngleOffset return this.drawRotatedExtraAngleOffset; } } + public void Init(TriColorGraphicRequest req) - public override void Init(TriColorGraphicRequest req) { this.data = req.graphicData; this.path = req.path; @@ -340,8 +208,8 @@ public override void Init(TriColorGraphicRequest req) }; } } + public TriColorGraphic_Multi GetColoredVersion( - public override TriColorGraphic GetColoredVersion( Shader newShader, Color newColor, Color newColorTwo, @@ -362,70 +230,36 @@ public override int GetHashCode() } public static class TriColorGraphicDatabase { - private static Dictionary allGraphics = new Dictionary(); /* - public static AvaliGraphic Get(string path) where T : AvaliGraphic, new() - { - return (AvaliGraphic)AvaliGraphicDatabase.GetInner(new AvaliGraphicRequest(typeof(T), path, ShaderDatabase.Cutout, Vector2.one, Color.white, Color.white, Color.white, (GraphicData)null, 0, (List)null)); - } - - public static AvaliGraphic Get(string path, Shader shader) where T : AvaliGraphic, new() - { - return (AvaliGraphic)AvaliGraphicDatabase.GetInner(new AvaliGraphicRequest(typeof(T), path, shader, Vector2.one, Color.white, Color.white, Color.white, (GraphicData)null, 0, (List)null)); - } - - public static AvaliGraphic Get(string path, Shader shader, Vector2 drawSize, Color color) where T : AvaliGraphic, new() - { - return (AvaliGraphic)AvaliGraphicDatabase.GetInner(new AvaliGraphicRequest(typeof(T), path, shader, drawSize, color, Color.white, Color.white, (GraphicData)null, 0, (List)null)); - } - - public static AvaliGraphic Get( - string path, - Shader shader, - Vector2 drawSize, - Color color, - int renderQueue) - where T : AvaliGraphic, new() - { - return (AvaliGraphic)AvaliGraphicDatabase.GetInner(new AvaliGraphicRequest(typeof(T), path, shader, drawSize, color, Color.white, Color.white, (GraphicData)null, renderQueue, (List)null)); - } - - public static AvaliGraphic Get( + // RimWorld sure does have a lot of ways to ask for basically the same thing! + // Not a lot has changed compared to vanilla, we're just using our graphic class for the relevant methods. + // This is here so RimWorld doesn't have to re-generate the same request for every pawn. + */ + private static Dictionary allGraphics = new Dictionary(); + public static TriColorGraphic_Multi Get( string path, Shader shader, Vector2 drawSize, Color color, Color colorTwo, - Color colorThree) - where T : AvaliGraphic, new() - { - return (AvaliGraphic)AvaliGraphicDatabase.GetInner(new AvaliGraphicRequest(typeof(T), path, shader, drawSize, color, colorTwo, colorThree, (GraphicData)null, 0, (List)null)); - } - public static AvaliGraphic Get( - string path, - Shader shader, - Vector2 drawSize, - Color color, - Color colorTwo) - where T : AvaliGraphic, new() + Color colorThree, + GraphicData data) + where T : TriColorGraphic_Multi, new() { - return (AvaliGraphic)AvaliGraphicDatabase.GetInner(new AvaliGraphicRequest(typeof(T), path, shader, drawSize, color, colorTwo, Color.white, (GraphicData)null, 0, (List)null)); + return (TriColorGraphic_Multi)TriColorGraphicDatabase.GetInner(new TriColorGraphicRequest(typeof(T), path, shader, drawSize, color, colorTwo, colorThree, data, 0, (List)null)); } - */ - public static TriColorGraphic Get( + public static TriColorGraphic_Multi Get( string path, Shader shader, Vector2 drawSize, Color color, Color colorTwo, - Color colorThree, - GraphicData data) - where T : TriColorGraphic, new() + Color colorThree) + where T : TriColorGraphic_Multi, new() { - return (TriColorGraphic)TriColorGraphicDatabase.GetInner(new TriColorGraphicRequest(typeof(T), path, shader, drawSize, color, colorTwo, colorThree, data, 0, (List)null)); + return (TriColorGraphic_Multi)TriColorGraphicDatabase.GetInner(new TriColorGraphicRequest(typeof(T), path, shader, drawSize, color, colorTwo, colorThree, (GraphicData)null, 0, (List)null)); } - - public static TriColorGraphic Get( + public static TriColorGraphic_Multi Get( System.Type graphicClass, string path, Shader shader, @@ -437,7 +271,7 @@ public static TriColorGraphic Get( return TriColorGraphicDatabase.Get(graphicClass, path, shader, drawSize, color, colorTwo, colorThree, (GraphicData)null, (List)null); } - public static TriColorGraphic Get( + public static TriColorGraphic_Multi Get( System.Type graphicClass, string path, Shader shader, @@ -451,126 +285,42 @@ public static TriColorGraphic Get( TriColorGraphicRequest req = new TriColorGraphicRequest(graphicClass, path, shader, drawSize, color, colorTwo, colorThree, data, 0, shaderParameters); if (req.graphicClass == typeof(Graphic_Multi)) { - return (TriColorGraphic)TriColorGraphicDatabase.GetInner(req); + return (TriColorGraphic_Multi)TriColorGraphicDatabase.GetInner(req); } try { - return (TriColorGraphic)GenGeneric.InvokeStaticGenericMethod(typeof(TriColorGraphicDatabase), req.graphicClass, "GetInner", (object)req); + return (TriColorGraphic_Multi)GenGeneric.InvokeStaticGenericMethod(typeof(TriColorGraphicDatabase), req.graphicClass, "GetInner", (object)req); } catch (Exception ex) { Log.Error("Exception getting " + (object)graphicClass + " at " + path + ": " + ex.ToString(), false); } - return (TriColorGraphic)BaseContent.BadGraphic; + return (TriColorGraphic_Multi)BaseContent.BadGraphic; } - private static T GetInner(TriColorGraphicRequest req) where T : TriColorGraphic, new() + private static T GetInner(TriColorGraphicRequest req) where T : TriColorGraphic_Multi, new() { req.color = (Color)(Color32)req.color; req.colorTwo = (Color)(Color32)req.colorTwo; req.colorThree = (Color)(Color32)req.colorThree; - TriColorGraphic graphic; + TriColorGraphic_Multi graphic; if (!TriColorGraphicDatabase.allGraphics.TryGetValue(req, out graphic)) { - graphic = (TriColorGraphic)new T(); + graphic = (TriColorGraphic_Multi)new T(); graphic.Init(req); TriColorGraphicDatabase.allGraphics.Add(req, graphic); } return (T)graphic; } - /* - public static void Clear() - { - AvaliGraphicDatabase.allGraphics.Clear(); - } - - [DebugOutput("System", false)] - public static void AllGraphicsLoaded() - { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.AppendLine("There are " + (object)AvaliGraphicDatabase.allGraphics.Count + " graphics loaded."); - int num = 0; - foreach (AvaliGraphic graphic in AvaliGraphicDatabase.allGraphics.Values) - { - stringBuilder.AppendLine(num.ToString() + " - " + graphic.ToString()); - if (num % 50 == 49) - { - Log.Message(stringBuilder.ToString(), false); - stringBuilder = new StringBuilder(); - } - ++num; - } - Log.Message(stringBuilder.ToString(), false); - } - */ - } - public struct TriColorGraphicRequest : IEquatable - { - public System.Type graphicClass; - public string path; - public Shader shader; - public Vector2 drawSize; - public Color color; - public Color colorTwo; - public Color colorThree; - public GraphicData graphicData; - public int renderQueue; - public List shaderParameters; - - public TriColorGraphicRequest( - System.Type graphicClass, - string path, - Shader shader, - Vector2 drawSize, - Color color, - Color colorTwo, - Color colorThree, - GraphicData graphicData, - int renderQueue, - List shaderParameters) - { - this.graphicClass = graphicClass; - this.path = path; - this.shader = shader; - this.drawSize = drawSize; - this.color = color; - this.colorTwo = colorTwo; - this.colorThree = colorThree; - this.graphicData = graphicData; - this.renderQueue = renderQueue; - this.shaderParameters = shaderParameters.NullOrEmpty() ? (List)null : shaderParameters; - } - - public override int GetHashCode() - { - if (this.path == null) - this.path = BaseContent.BadTexPath; - return Gen.HashCombine>(Gen.HashCombine(Gen.HashCombine(Gen.HashCombineStruct(Gen.HashCombineStruct(Gen.HashCombineStruct(Gen.HashCombine(Gen.HashCombine(Gen.HashCombine(0, this.graphicClass), this.path), this.shader), this.drawSize), this.color), this.colorTwo), this.graphicData), this.renderQueue), this.shaderParameters); - } - - public override bool Equals(object obj) - { - return obj is TriColorGraphicRequest other && this.Equals(other); - } - - public bool Equals(TriColorGraphicRequest other) - { - return this.graphicClass == other.graphicClass && this.path == other.path && ((UnityEngine.Object)this.shader == (UnityEngine.Object)other.shader && this.drawSize == other.drawSize) && (this.color == other.color && this.colorTwo == other.colorTwo && (this.graphicData == other.graphicData && this.renderQueue == other.renderQueue)) && this.shaderParameters == other.shaderParameters; - } - - public static bool operator ==(TriColorGraphicRequest lhs, TriColorGraphicRequest rhs) - { - return lhs.Equals(rhs); - } - - public static bool operator !=(TriColorGraphicRequest lhs, TriColorGraphicRequest rhs) - { - return !(lhs == rhs); - } } public static class TriColorMaterialPool { + /* + // Another class that exists so that RimWorld doesn't have to re-generate requests. + // And again, almost identical to the original code, just have to allow our shader to be used and supply the third color property to the shader. + // If there's a fast way to tie the request to a specific pawn, none of this would really be needed, but I can't find a good angle to attack that from. + */ public static Material MatFrom(TriColorMaterialRequest req) { if (!UnityData.IsInMainThread) @@ -624,50 +374,9 @@ public static Material MatFrom(TriColorMaterialRequest req) public struct TriColorMaterialRequest : IEquatable { /* - public string BaseTexPath - { - set - { - this.mainTex = ContentFinder.Get(value, true); - } - } - - public AvaliMaterialRequest(Texture2D tex) - { - this.shader = ShaderDatabase.Cutout; - this.mainTex = tex; - this.color = Color.red; - this.colorTwo = Color.green; - this.colorThree = Color.blue; - this.maskTex = null; - this.renderQueue = 0; - this.shaderParameters = null; - } - - public AvaliMaterialRequest(Texture2D tex, Shader shader) - { - this.shader = shader; - this.mainTex = tex; - this.color = Color.green; - this.colorTwo = Color.blue; - this.colorThree = Color.red; - this.maskTex = null; - this.renderQueue = 0; - this.shaderParameters = null; - } - - public AvaliMaterialRequest(Texture2D tex, Shader shader, Color color) - { - this.shader = shader; - this.mainTex = tex; - this.color = color; - this.colorTwo = Color.red; - this.colorThree = Color.blue; - this.maskTex = null; - this.renderQueue = 0; - this.shaderParameters = null; - } + // Struct for the material with a third color. */ + public override int GetHashCode() { return Gen.HashCombine>(Gen.HashCombineInt(Gen.HashCombine(Gen.HashCombine(Gen.HashCombineStruct(Gen.HashCombineStruct(Gen.HashCombine(0, this.shader), this.color), this.colorTwo), this.mainTex), this.maskTex), this.renderQueue), this.shaderParameters); @@ -724,109 +433,108 @@ public override string ToString() public List shaderParameters; public Color colorThree; } - /* - [StaticConstructorOnStartup] - public static class AvaliShaderPropertyIDs + public struct TriColorGraphicRequest : IEquatable { - - static AvaliShaderPropertyIDs() - { - AvaliShaderPropertyIDs.MaskTexName = "_MaskTex"; - AvaliShaderPropertyIDs.SwayHeadName = "_SwayHead"; - AvaliShaderPropertyIDs.ShockwaveSpanName = "_ShockwaveSpan"; - AvaliShaderPropertyIDs.AgeSecsName = "_AgeSecs"; - AvaliShaderPropertyIDs.PlanetSunLightDirection = Shader.PropertyToID(AvaliShaderPropertyIDs.PlanetSunLightDirectionName); - AvaliShaderPropertyIDs.PlanetSunLightEnabled = Shader.PropertyToID(AvaliShaderPropertyIDs.PlanetSunLightEnabledName); - AvaliShaderPropertyIDs.PlanetRadius = Shader.PropertyToID(AvaliShaderPropertyIDs.PlanetRadiusName); - AvaliShaderPropertyIDs.MapSunLightDirection = Shader.PropertyToID(AvaliShaderPropertyIDs.MapSunLightDirectionName); - AvaliShaderPropertyIDs.GlowRadius = Shader.PropertyToID(AvaliShaderPropertyIDs.GlowRadiusName); - AvaliShaderPropertyIDs.GameSeconds = Shader.PropertyToID(AvaliShaderPropertyIDs.GameSecondsName); - AvaliShaderPropertyIDs.AgeSecs = Shader.PropertyToID(AvaliShaderPropertyIDs.AgeSecsName); - AvaliShaderPropertyIDs.Color = Shader.PropertyToID(AvaliShaderPropertyIDs.ColorName); - AvaliShaderPropertyIDs.ColorTwo = Shader.PropertyToID(AvaliShaderPropertyIDs.ColorTwoName); - //AvaliShaderPropertyIDs.ColorThree = Shader.PropertyToID(AvaliShaderPropertyIDs.ColorThreeName); - AvaliShaderPropertyIDs.MaskTex = Shader.PropertyToID(AvaliShaderPropertyIDs.MaskTexName); - AvaliShaderPropertyIDs.SwayHead = Shader.PropertyToID(AvaliShaderPropertyIDs.SwayHeadName); - AvaliShaderPropertyIDs.ShockwaveColor = Shader.PropertyToID("_ShockwaveColor"); - AvaliShaderPropertyIDs.ShockwaveSpan = Shader.PropertyToID(AvaliShaderPropertyIDs.ShockwaveSpanName); - AvaliShaderPropertyIDs.WaterCastVectSun = Shader.PropertyToID("_WaterCastVectSun"); - AvaliShaderPropertyIDs.WaterCastVectMoon = Shader.PropertyToID("_WaterCastVectMoon"); - AvaliShaderPropertyIDs.WaterOutputTex = Shader.PropertyToID("_WaterOutputTex"); - AvaliShaderPropertyIDs.WaterOffsetTex = Shader.PropertyToID("_WaterOffsetTex"); - AvaliShaderPropertyIDs.ShadowCompositeTex = Shader.PropertyToID("_ShadowCompositeTex"); - AvaliShaderPropertyIDs.FallIntensity = Shader.PropertyToID("_FallIntensity"); - } - - private static readonly string PlanetSunLightDirectionName = "_PlanetSunLightDirection"; - private static readonly string PlanetSunLightEnabledName = "_PlanetSunLightEnabled"; - private static readonly string PlanetRadiusName = "_PlanetRadius"; - private static readonly string MapSunLightDirectionName = "_CastVect"; - private static readonly string GlowRadiusName = "_GlowRadius"; - private static readonly string GameSecondsName = "_GameSeconds"; - private static readonly string ColorName = "_Color"; - private static readonly string ColorTwoName = "_ColorTwo"; - private static readonly string MaskTexName; - private static readonly string SwayHeadName; - private static readonly string ShockwaveSpanName; - private static readonly string AgeSecsName; - public static int PlanetSunLightDirection; - public static int PlanetSunLightEnabled; - public static int PlanetRadius; - public static int MapSunLightDirection; - public static int GlowRadius; - public static int GameSeconds; - public static int AgeSecs; - public static int Color; - public static int ColorTwo; - public static int MaskTex; - public static int SwayHead; - public static int ShockwaveColor; - public static int ShockwaveSpan; - public static int WaterCastVectSun; - public static int WaterCastVectMoon; - public static int WaterOutputTex; - public static int WaterOffsetTex; - public static int ShadowCompositeTex; - public static int FallIntensity; - //private static readonly string ColorThreeName = "_ColorThree"; - //public static int ColorThree; - - } + /* + // Struct for the Graphic with a third color. */ + + public System.Type graphicClass; + public string path; + public Shader shader; + public Vector2 drawSize; + public Color color; + public Color colorTwo; + public Color colorThree; + public GraphicData graphicData; + public int renderQueue; + public List shaderParameters; + + public TriColorGraphicRequest( + System.Type graphicClass, + string path, + Shader shader, + Vector2 drawSize, + Color color, + Color colorTwo, + Color colorThree, + GraphicData graphicData, + int renderQueue, + List shaderParameters) + { + this.graphicClass = graphicClass; + this.path = path; + this.shader = shader; + this.drawSize = drawSize; + this.color = color; + this.colorTwo = colorTwo; + this.colorThree = colorThree; + this.graphicData = graphicData; + this.renderQueue = renderQueue; + this.shaderParameters = shaderParameters.NullOrEmpty() ? (List)null : shaderParameters; + } + + public override int GetHashCode() + { + if (this.path == null) + this.path = BaseContent.BadTexPath; + return Gen.HashCombine>(Gen.HashCombine(Gen.HashCombine(Gen.HashCombineStruct(Gen.HashCombineStruct(Gen.HashCombineStruct(Gen.HashCombine(Gen.HashCombine(Gen.HashCombine(0, this.graphicClass), this.path), this.shader), this.drawSize), this.color), this.colorTwo), this.graphicData), this.renderQueue), this.shaderParameters); + } + + public override bool Equals(object obj) + { + return obj is TriColorGraphicRequest other && this.Equals(other); + } + + public bool Equals(TriColorGraphicRequest other) + { + return this.graphicClass == other.graphicClass && this.path == other.path && ((UnityEngine.Object)this.shader == (UnityEngine.Object)other.shader && this.drawSize == other.drawSize) && (this.color == other.color && this.colorTwo == other.colorTwo && (this.graphicData == other.graphicData && this.renderQueue == other.renderQueue)) && this.shaderParameters == other.shaderParameters; + } + + public static bool operator ==(TriColorGraphicRequest lhs, TriColorGraphicRequest rhs) + { + return lhs.Equals(rhs); + } + + public static bool operator !=(TriColorGraphicRequest lhs, TriColorGraphicRequest rhs) + { + return !(lhs == rhs); + } + } + [StaticConstructorOnStartup] public class TriColorShaderDatabase { + /* + // Loads and makes the shaderID available to the rest of the mod. + */ + public static string dir = AlienRaceMod.settings.Mod.Content.RootDir.ToString(); + public static AssetBundle shaderLoader(string info) + { + AssetBundle assetBundle = AssetBundle.LoadFromFile(info); + return assetBundle; + } static TriColorShaderDatabase() { - string dir = RimValiUtility.dir; - + // This is where you'd change the path it loads the shader from. string path = dir + "/Shader/TriColorShader"; - AssetBundle bundle = RimValiUtility.shaderLoader(path); + AssetBundle bundle = shaderLoader(path); + + // internal assetbundle name, do not change. Tricolor = (Shader)bundle.LoadAsset("assets/resources/materials/avalishader.shader"); } public static Shader Tricolor; public static int ColorThree = Shader.PropertyToID("_ColorThree"); - public static Dictionary lookup; public static Shader DefaultShader { get - { + { return TriColorShaderDatabase.Tricolor; } } } - public static class RimValiUtility - { - public static string dir = AlienRaceMod.settings.Mod.Content.RootDir.ToString(); //this.mod.RootDir.ToString(); - public static AssetBundle shaderLoader(string info) - { - AssetBundle assetBundle = AssetBundle.LoadFromFile(info); - return assetBundle; - } - } - } diff --git a/Source/AlienRace/AlienRace/Utilities.cs b/Source/AlienRace/AlienRace/Utilities.cs index 7cbac247..d2f76b5c 100644 --- a/Source/AlienRace/AlienRace/Utilities.cs +++ b/Source/AlienRace/AlienRace/Utilities.cs @@ -96,9 +96,10 @@ public LoadDefFromField(string defName) public Def GetDef(Type defType) => GenDefDatabase.GetDef(defType, this.defName); - } - - public class Graphic_Multi_RotationFromData : TriColorGraphic_Multi + } + + public class Graphic_Multi_RotationFromData : TriColorGraphic_Multi + //public class Graphic_Multi_RotationFromData : Graphic_Multi { public override bool ShouldDrawRotated => this.data?.drawRotated ?? false; From 7129a7ab9248b7241cb670c2b51b531b8ecdfcce Mon Sep 17 00:00:00 2001 From: liQdQ <74311003+liQdQ@users.noreply.github.com> Date: Thu, 12 Nov 2020 17:22:42 +0100 Subject: [PATCH 5/9] Create shader --- 1.2/Shader/shader | 1 + 1 file changed, 1 insertion(+) create mode 100644 1.2/Shader/shader diff --git a/1.2/Shader/shader b/1.2/Shader/shader new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/1.2/Shader/shader @@ -0,0 +1 @@ + From 0c9f3f2a4d4c9097d3d6edb17524610daa80ae87 Mon Sep 17 00:00:00 2001 From: liQdQ <74311003+liQdQ@users.noreply.github.com> Date: Thu, 12 Nov 2020 17:23:23 +0100 Subject: [PATCH 6/9] Add files via upload --- 1.2/Shader/shader | Bin 1 -> 7207 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/1.2/Shader/shader b/1.2/Shader/shader index 8b137891791fe96927ad78e64b0aad7bded08bdc..d611b674282144d711c9e86cefee84e18b497ee5 100644 GIT binary patch literal 7207 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 literal 1 Icmd-A000XB3jhEB From 4c54b08b6c7bffb5f7e6332a67ca50e3bf1e3891 Mon Sep 17 00:00:00 2001 From: liQdQ <74311003+liQdQ@users.noreply.github.com> Date: Thu, 12 Nov 2020 17:24:20 +0100 Subject: [PATCH 7/9] Add files via upload --- 1.2/Assemblies/AlienRace.dll | Bin 149504 -> 157696 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/1.2/Assemblies/AlienRace.dll b/1.2/Assemblies/AlienRace.dll index 039ed15a94e4217862b163c8f307455ff019a30c..f1d83498f2f81fc191eacac6f134d6607eea31c5 100644 GIT binary patch literal 157696 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 N+{ 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 literal 149504 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%0A^(5arq>k@iMsp*pwQl3lWz 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 Date: Thu, 12 Nov 2020 17:25:04 +0100 Subject: [PATCH 8/9] Add files via upload --- Source/AlienRace/AlienRace/TriColorShader.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/AlienRace/AlienRace/TriColorShader.cs b/Source/AlienRace/AlienRace/TriColorShader.cs index a18d7edb..e416e7b3 100644 --- a/Source/AlienRace/AlienRace/TriColorShader.cs +++ b/Source/AlienRace/AlienRace/TriColorShader.cs @@ -518,7 +518,7 @@ public static AssetBundle shaderLoader(string info) static TriColorShaderDatabase() { // This is where you'd change the path it loads the shader from. - string path = dir + "/Shader/TriColorShader"; + string path = dir + "/1.2/Shader/TriColorShader"; AssetBundle bundle = shaderLoader(path); // internal assetbundle name, do not change. From 39941efa2f5a32fae0825217a4ad61300b9282a0 Mon Sep 17 00:00:00 2001 From: liQdQ <74311003+liQdQ@users.noreply.github.com> Date: Thu, 12 Nov 2020 17:27:45 +0100 Subject: [PATCH 9/9] Add files via upload --- Source/AlienRace/AlienRace/HarmonyPatches.cs | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/Source/AlienRace/AlienRace/HarmonyPatches.cs b/Source/AlienRace/AlienRace/HarmonyPatches.cs index ff89edf5..fc30847c 100644 --- a/Source/AlienRace/AlienRace/HarmonyPatches.cs +++ b/Source/AlienRace/AlienRace/HarmonyPatches.cs @@ -2026,18 +2026,6 @@ public static void TryGetRandomUnusedSolidBioForPostfix(List backstoryCa } } - /* - public static Material[] ApplyShader(Material[] oldMats, Color colorThree) - { - foreach (Material material in oldMats) - { - material.shader = TriColorShaderDatabase.Tricolor; - material.SetColor(TriColorShaderDatabase.ColorThree, colorThree); - } - return oldMats; - } - */ - public static bool ResolveAllGraphicsPrefix(PawnGraphicSet __instance) { Pawn alien = __instance.pawn;