diff --git a/Common/Assemblies/Rjw-Genes.dll b/Common/Assemblies/Rjw-Genes.dll index 9eef3ca..f0d8df3 100644 Binary files a/Common/Assemblies/Rjw-Genes.dll and b/Common/Assemblies/Rjw-Genes.dll differ diff --git a/Source/Animal_Inheritance/InheritanceUtility.cs b/Source/Animal_Inheritance/InheritanceUtility.cs index 2b260dd..1996589 100644 --- a/Source/Animal_Inheritance/InheritanceUtility.cs +++ b/Source/Animal_Inheritance/InheritanceUtility.cs @@ -42,7 +42,7 @@ namespace RJW_BGS public static List SelectGenes(Pawn pawn) { List genelist = new List(); - RaceGeneDef raceGeneDef = RJWcopy.GetRaceGeneDefInternal(pawn); + RaceGeneDef raceGeneDef = RaceGeneDef_Helper.GetRaceGeneDefInternal(pawn); if (raceGeneDef != null) { foreach (BestialityGeneInheritanceDef gene in raceGeneDef.genes) diff --git a/Source/Animal_Inheritance/RaceGeneDef.cs b/Source/Animal_Inheritance/RaceGeneDef.cs index c4cbcea..02ac62d 100644 --- a/Source/Animal_Inheritance/RaceGeneDef.cs +++ b/Source/Animal_Inheritance/RaceGeneDef.cs @@ -10,7 +10,7 @@ namespace RJW_BGS { public class RaceGeneDef : Def { - + public int priority; public String raceGroup; public List raceNames; public List pawnKindNames; diff --git a/Source/Animal_Inheritance/RaceGeneDef_Helper.cs b/Source/Animal_Inheritance/RaceGeneDef_Helper.cs index ed6541a..680b155 100644 --- a/Source/Animal_Inheritance/RaceGeneDef_Helper.cs +++ b/Source/Animal_Inheritance/RaceGeneDef_Helper.cs @@ -9,31 +9,48 @@ using RimWorld; namespace RJW_BGS { - internal class RJWcopy + public class RaceGeneDef_Helper { //code based on racegroupdefinternal which has a similar function public static RaceGeneDef GetRaceGeneDefInternal(Pawn pawn) { + List Valids = ValidRaceGeneDefs(pawn); + if (Valids.Count > 0) + { + RaceGeneDef result = Valids.MaxBy(r => r.priority); + return result; + } + return null; + //First check if there is a matching pawnkinddef then race, then racegroup + + } + public static List ValidRaceGeneDefs(Pawn pawn) + { PawnKindDef kindDef = pawn.kindDef; if (kindDef == null) - { + { return null; - } + } string raceName = kindDef.race.defName; string pawnKindName = kindDef.defName; - IEnumerable allDefs = DefDatabase.AllDefs; PawnData pawnData = SaveStorage.DataStore.GetPawnData(pawn); RaceGroupDef raceGroupDef = pawnData.RaceSupportDef; + + IEnumerable allDefs = DefDatabase.AllDefs; List pawnKindDefs = allDefs.Where(delegate (RaceGeneDef group) { List pawnKindNames = group.pawnKindNames; return pawnKindNames != null && pawnKindNames.Contains(pawnKindName); }).ToList(); + if (pawnKindDefs.Count() > 0) + return pawnKindDefs; List raceKindDefs = allDefs.Where(delegate (RaceGeneDef group) { List raceNames = group.raceNames; return raceNames != null && raceNames.Contains(raceName); }).ToList(); + if (raceKindDefs.Count() > 0) + return raceKindDefs; List raceGroupDefs = new List(); if (raceGroupDef != null) { @@ -43,27 +60,9 @@ namespace RJW_BGS return raceGroupDefName != null && raceGroupDefName == raceGroupDef.defName; }).ToList(); } - RaceGeneDef result = null; - //First check if there is a matching pawnkinddef then race, then racegroup - if (pawnKindDefs.Any()) - { - result = pawnKindDefs.RandomElement(); - } - else if (raceKindDefs.Any() && result == null) - { - result = raceKindDefs.RandomElement(); - } - else if (raceGroupDefs.Any() && result == null) - { - result = raceGroupDefs.RandomElement(); - } - else - { - result = null; - } - return result; - - + if (raceGroupDefs.Count() > 0) + return raceGroupDefs; + return new List(); } } }