diff --git a/Source/Animal_Inheritance/GeneChance.cs b/Source/Animal_Inheritance/BestialityGeneInheritanceDef.cs similarity index 82% rename from Source/Animal_Inheritance/GeneChance.cs rename to Source/Animal_Inheritance/BestialityGeneInheritanceDef.cs index 2c5453f..04a9735 100644 --- a/Source/Animal_Inheritance/GeneChance.cs +++ b/Source/Animal_Inheritance/BestialityGeneInheritanceDef.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace RJW_BGS { - public class GeneChance + public class BestialityGeneInheritanceDef { public string defName; public float chance = 1f; diff --git a/Source/Animal_Inheritance/First.cs b/Source/Animal_Inheritance/First.cs index 74eeb6c..8d353f7 100644 --- a/Source/Animal_Inheritance/First.cs +++ b/Source/Animal_Inheritance/First.cs @@ -15,17 +15,24 @@ namespace RJW_BGS static First() { RJWcopy.Racegroupdictbuilder(); - //foreach (RaceGroupDef raceGroupDef2 in DefDatabase.AllDefs) - //{ - //Log.Message("defName = " + raceGroupDef2.defName); - // if (raceGroupDef2.raceNames != null) - // { - // foreach (string race in raceGroupDef2.raceNames) - // { - //Log.Message(race); - // } - // } - //} + //Prints all found race dicts (debugging only) + //logAllFoundRaceGroupGenes + + } + + private static void logAllFoundRaceGroupGenes() + { + foreach (RaceGroupDef def in DefDatabase.AllDefs) + { + Log.Message("defName = " + def.defName); + if (def.raceNames != null) + { + foreach (string race in def.raceNames) + { + Log.Message(race); + } + } + } } } } diff --git a/Source/Animal_Inheritance/InheritanceUtility.cs b/Source/Animal_Inheritance/InheritanceUtility.cs index 8d5e953..8456f45 100644 --- a/Source/Animal_Inheritance/InheritanceUtility.cs +++ b/Source/Animal_Inheritance/InheritanceUtility.cs @@ -12,40 +12,33 @@ namespace RJW_BGS { public static List AnimalInheritedGenes(Pawn father, Pawn mother) { - //One parent must be an animal and the other must be human, so only one needs to return List genelist = new List(); + //If Both are Humans, or Both are animals, do nothing & return empty GeneList + if (!mother.RaceProps.Humanlike && !father.RaceProps.Humanlike) + return genelist; + if (mother.RaceProps.Humanlike && father.RaceProps.Humanlike) + return genelist; + + + //One parent must be an animal and the other must be human, so only one needs to return if (father != null && !father.RaceProps.Humanlike) { return SelectGenes(father); } - if (mother != null && !mother.RaceProps.Humanlike) { return SelectGenes(mother); - //PawnKindDef pawnKindDef = mother.kindDef; - //RaceGeneDef raceGeneDef = RJWcopy.GetRaceGenDefInternal(pawnKindDef); - //if (raceGeneDef != null) - //{ - // GeneDef gene = null; - //In case you hit a modded gene not currently active try again. - // for (int i = 0; i < 50 || gene == null; i++) - // { - // if (raceGeneDef.genes.Any()) - // { - // gene = DefDatabase.GetNamed(raceGeneDef.genes.RandomElement()); - // } - // } - // if (gene != null) - // { - // genelist.Add(gene); -// - // } - // - // } } + return genelist; } + /// + /// Looks up potential genes for an animal, + /// checks their chance and returns all 'triggered' genes. + /// + /// The animal for which to look up genes (Animals are Pawns in RW) + /// The genes that will be inherited from this animal. public static List SelectGenes(Pawn pawn) { List genelist = new List(); @@ -53,7 +46,7 @@ namespace RJW_BGS RaceGeneDef raceGeneDef = RJWcopy.GetRaceGenDefInternal(pawnKindDef); if (raceGeneDef != null) { - foreach (GeneChance gene in raceGeneDef.genes) + foreach (BestialityGeneInheritanceDef gene in raceGeneDef.genes) { if (gene.chance >= Rand.Range(0.01f,1f)) { diff --git a/Source/Animal_Inheritance/RJWcopies.cs b/Source/Animal_Inheritance/RJWcopies.cs index cabfd63..2c11074 100644 --- a/Source/Animal_Inheritance/RJWcopies.cs +++ b/Source/Animal_Inheritance/RJWcopies.cs @@ -41,33 +41,37 @@ namespace RJW_BGS string raceName = kindDef.race.defName; string pawnKindName = kindDef.defName; IEnumerable allDefs = DefDatabase.AllDefs; - List list = allDefs.Where(delegate (RaceGroupDef group) + List pawnKindDefs = allDefs.Where(delegate (RaceGroupDef group) { List pawnKindNames = group.pawnKindNames; return pawnKindNames != null && pawnKindNames.Contains(pawnKindName); }).ToList(); - List list2 = allDefs.Where(delegate (RaceGroupDef group) + List raceNameDefs = allDefs.Where(delegate (RaceGroupDef group) { List raceNames = group.raceNames; return raceNames != null && raceNames.Contains(raceName); }).ToList(); - int num = list.Count() + list2.Count(); - if (num == 0) + + int availableDefs = pawnKindDefs.Count() + raceNameDefs.Count(); + if (availableDefs == 0) { + //Exit Early return null; } - if (num == 1) + if (availableDefs == 1) { - return list.Concat(list2).Single(); + return pawnKindDefs.Concat(raceNameDefs).Single(); } + RaceGroupDef result; - if ((result = list.FirstOrDefault((RaceGroupDef match) => !IsThisMod(match))) == null) + if ((result = pawnKindDefs.FirstOrDefault((RaceGroupDef match) => !IsThisMod(match))) == null) { - if ((result = list2.FirstOrDefault((RaceGroupDef match) => !IsThisMod(match))) == null) + if ((result = raceNameDefs.FirstOrDefault((RaceGroupDef match) => !IsThisMod(match))) == null) { - result = (list.FirstOrDefault() ?? list2.FirstOrDefault()); + result = (pawnKindDefs.FirstOrDefault() ?? raceNameDefs.FirstOrDefault()); } } + return result; } @@ -81,29 +85,31 @@ namespace RJW_BGS string raceName = kindDef.race.defName; string pawnKindName = kindDef.defName; RaceGroupDef raceGroupDef = GetRaceGroupDef(kindDef); - //string raceGroupName = GetRaceGroupDef(kindDef).defName; IEnumerable allDefs = DefDatabase.AllDefs; Log.Message(allDefs.Count().ToString()); - List list = allDefs.Where(delegate (RaceGeneDef group) + List pawnKindDefs = allDefs.Where(delegate (RaceGeneDef group) { List pawnKindNames = group.pawnKindNames; return pawnKindNames != null && pawnKindNames.Contains(pawnKindName); }).ToList(); - List list2 = allDefs.Where(delegate (RaceGeneDef group) + List raceKindDefs = allDefs.Where(delegate (RaceGeneDef group) { List raceNames = group.raceNames; return raceNames != null && raceNames.Contains(raceName); }).ToList(); - List list3 = new List(); + List raceGroupDefs = new List(); if (raceGroupDef != null) { + /* + // Log Messages for Debugging Only, prints the Genes found for this individual Log.Message("found a raceGroupDef"); Log.Message(raceGroupDef.defName); foreach (RaceGeneDef rgd in allDefs) { Log.Message(rgd.defName); } - list3 = allDefs.Where(delegate (RaceGeneDef group) + */ + raceGroupDefs = allDefs.Where(delegate (RaceGeneDef group) { String raceGroupDefName = group.raceGroup; return raceGroupDefName != null && raceGroupDefName == raceGroupDef.defName; @@ -111,17 +117,17 @@ namespace RJW_BGS } RaceGeneDef result = null; //First check if there is a matching pawnkinddef then race, then racegroup - if (list.Any()) + if (pawnKindDefs.Any()) { - result = list.RandomElement(); + result = pawnKindDefs.RandomElement(); } - else if (list2.Any() && result == null) + else if (raceKindDefs.Any() && result == null) { - result = list2.RandomElement(); + result = raceKindDefs.RandomElement(); } - else if (list3.Any() && result == null) + else if (raceGroupDefs.Any() && result == null) { - result = list3.RandomElement(); + result = raceGroupDefs.RandomElement(); } else { diff --git a/Source/Animal_Inheritance/RaceGeneDef.cs b/Source/Animal_Inheritance/RaceGeneDef.cs index 1d7e42b..c4cbcea 100644 --- a/Source/Animal_Inheritance/RaceGeneDef.cs +++ b/Source/Animal_Inheritance/RaceGeneDef.cs @@ -14,7 +14,7 @@ namespace RJW_BGS public String raceGroup; public List raceNames; public List pawnKindNames; - public List genes; + public List genes; //public List genechances; public String hybridName; } diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj index b8edc5b..4f0beb0 100644 --- a/Source/Rjw-Genes.csproj +++ b/Source/Rjw-Genes.csproj @@ -27,7 +27,7 @@ False - ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\RimWorldWin64_Data\Managed\Assembly-CSharp.dll + ..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll False @@ -35,7 +35,7 @@ False - ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\RJW\1.4\Assemblies\RJW.dll + ..\..\rjw\1.4\Assemblies\RJW.dll False @@ -51,7 +51,12 @@ - ..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll + ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll + False + + + ..\..\..\RimWorldWin64_Data\Managed\UnityEngine.IMGUIModule.dll + False