mirror of
				https://github.com/vegapnk/RJW-Genes.git
				synced 2024-08-15 00:23:31 +00:00 
			
		
		
		
	Some Renaming in Animal Inheritance
This commit is contained in:
		
							parent
							
								
									a6b82080ec
								
							
						
					
					
						commit
						18f13876b6
					
				
					 6 changed files with 70 additions and 59 deletions
				
			
		| 
						 | 
				
			
			@ -6,7 +6,7 @@ using System.Threading.Tasks;
 | 
			
		|||
 | 
			
		||||
namespace RJW_BGS
 | 
			
		||||
{
 | 
			
		||||
    public class GeneChance
 | 
			
		||||
    public class BestialityGeneInheritanceDef
 | 
			
		||||
    {
 | 
			
		||||
        public string defName;
 | 
			
		||||
        public float chance = 1f;
 | 
			
		||||
| 
						 | 
				
			
			@ -15,17 +15,24 @@ namespace RJW_BGS
 | 
			
		|||
        static First()
 | 
			
		||||
        {
 | 
			
		||||
            RJWcopy.Racegroupdictbuilder();
 | 
			
		||||
            //foreach (RaceGroupDef raceGroupDef2  in DefDatabase<RaceGroupDef>.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<RaceGroupDef>.AllDefs)
 | 
			
		||||
            {
 | 
			
		||||
                Log.Message("defName = " + def.defName);
 | 
			
		||||
                if (def.raceNames != null)
 | 
			
		||||
                {
 | 
			
		||||
                    foreach (string race in def.raceNames)
 | 
			
		||||
                    {
 | 
			
		||||
                        Log.Message(race);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,40 +12,33 @@ namespace RJW_BGS
 | 
			
		|||
    {
 | 
			
		||||
        public static List<GeneDef> AnimalInheritedGenes(Pawn father, Pawn mother)
 | 
			
		||||
        {
 | 
			
		||||
            //One parent must be an animal and the other must be human, so only one needs to return
 | 
			
		||||
            List<GeneDef> genelist = new List<GeneDef>();
 | 
			
		||||
            //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<GeneDef>.GetNamed(raceGeneDef.genes.RandomElement());
 | 
			
		||||
                //        }
 | 
			
		||||
                //    }
 | 
			
		||||
                //    if (gene != null)
 | 
			
		||||
                //    {
 | 
			
		||||
                //        genelist.Add(gene);
 | 
			
		||||
//
 | 
			
		||||
  //                  }
 | 
			
		||||
    //                
 | 
			
		||||
      //          }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return genelist;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Looks up potential genes for an animal, 
 | 
			
		||||
        /// checks their chance and returns all 'triggered' genes.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="pawn">The animal for which to look up genes (Animals are Pawns in RW)</param>
 | 
			
		||||
        /// <returns>The genes that will be inherited from this animal.</returns>
 | 
			
		||||
        public static List<GeneDef> SelectGenes(Pawn pawn)
 | 
			
		||||
        {
 | 
			
		||||
            List<GeneDef> genelist = new List<GeneDef>();
 | 
			
		||||
| 
						 | 
				
			
			@ -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))
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -41,33 +41,37 @@ namespace RJW_BGS
 | 
			
		|||
			string raceName = kindDef.race.defName;
 | 
			
		||||
			string pawnKindName = kindDef.defName;
 | 
			
		||||
			IEnumerable<RaceGroupDef> allDefs = DefDatabase<RaceGroupDef>.AllDefs;
 | 
			
		||||
			List<RaceGroupDef> list = allDefs.Where(delegate (RaceGroupDef group)
 | 
			
		||||
			List<RaceGroupDef> pawnKindDefs = allDefs.Where(delegate (RaceGroupDef group)
 | 
			
		||||
			{
 | 
			
		||||
				List<string> pawnKindNames = group.pawnKindNames;
 | 
			
		||||
				return pawnKindNames != null && pawnKindNames.Contains(pawnKindName);
 | 
			
		||||
			}).ToList<RaceGroupDef>();
 | 
			
		||||
			List<RaceGroupDef> list2 = allDefs.Where(delegate (RaceGroupDef group)
 | 
			
		||||
			List<RaceGroupDef> raceNameDefs = allDefs.Where(delegate (RaceGroupDef group)
 | 
			
		||||
			{
 | 
			
		||||
				List<string> raceNames = group.raceNames;
 | 
			
		||||
				return raceNames != null && raceNames.Contains(raceName);
 | 
			
		||||
			}).ToList<RaceGroupDef>();
 | 
			
		||||
			int num = list.Count<RaceGroupDef>() + list2.Count<RaceGroupDef>();
 | 
			
		||||
			if (num == 0)
 | 
			
		||||
 | 
			
		||||
			int availableDefs = pawnKindDefs.Count<RaceGroupDef>() + raceNameDefs.Count<RaceGroupDef>();
 | 
			
		||||
			if (availableDefs == 0)
 | 
			
		||||
			{
 | 
			
		||||
				//Exit Early
 | 
			
		||||
				return null;
 | 
			
		||||
			}
 | 
			
		||||
			if (num == 1)
 | 
			
		||||
			if (availableDefs == 1)
 | 
			
		||||
			{
 | 
			
		||||
				return list.Concat(list2).Single<RaceGroupDef>();
 | 
			
		||||
				return pawnKindDefs.Concat(raceNameDefs).Single<RaceGroupDef>();
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			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<RaceGroupDef>() ?? list2.FirstOrDefault<RaceGroupDef>());
 | 
			
		||||
					result = (pawnKindDefs.FirstOrDefault<RaceGroupDef>() ?? raceNameDefs.FirstOrDefault<RaceGroupDef>());
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			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<RaceGeneDef> allDefs = DefDatabase<RaceGeneDef>.AllDefs;
 | 
			
		||||
			Log.Message(allDefs.Count<RaceGeneDef>().ToString());
 | 
			
		||||
			List<RaceGeneDef> list = allDefs.Where(delegate (RaceGeneDef group)
 | 
			
		||||
			List<RaceGeneDef> pawnKindDefs = allDefs.Where(delegate (RaceGeneDef group)
 | 
			
		||||
			{
 | 
			
		||||
				List<string> pawnKindNames = group.pawnKindNames;
 | 
			
		||||
				return pawnKindNames != null && pawnKindNames.Contains(pawnKindName);
 | 
			
		||||
			}).ToList<RaceGeneDef>();
 | 
			
		||||
			List<RaceGeneDef> list2 = allDefs.Where(delegate (RaceGeneDef group)
 | 
			
		||||
			List<RaceGeneDef> raceKindDefs = allDefs.Where(delegate (RaceGeneDef group)
 | 
			
		||||
			{
 | 
			
		||||
				List<string> raceNames = group.raceNames;
 | 
			
		||||
				return raceNames != null && raceNames.Contains(raceName);
 | 
			
		||||
			}).ToList<RaceGeneDef>();
 | 
			
		||||
			List<RaceGeneDef> list3 = new List<RaceGeneDef>();
 | 
			
		||||
			List<RaceGeneDef> raceGroupDefs = new List<RaceGeneDef>();
 | 
			
		||||
			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
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,7 +14,7 @@ namespace RJW_BGS
 | 
			
		|||
        public String raceGroup;
 | 
			
		||||
        public List<string> raceNames;
 | 
			
		||||
        public List<string> pawnKindNames;
 | 
			
		||||
        public List<GeneChance> genes;
 | 
			
		||||
        public List<BestialityGeneInheritanceDef> genes;
 | 
			
		||||
        //public List<float> genechances;
 | 
			
		||||
        public String hybridName;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,7 +27,7 @@
 | 
			
		|||
      <Private>False</Private>
 | 
			
		||||
    </Reference>
 | 
			
		||||
    <Reference Include="Assembly-CSharp">
 | 
			
		||||
      <HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\RimWorldWin64_Data\Managed\Assembly-CSharp.dll</HintPath>
 | 
			
		||||
      <HintPath>..\..\..\RimWorldWin64_Data\Managed\Assembly-CSharp.dll</HintPath>
 | 
			
		||||
      <Private>False</Private>
 | 
			
		||||
    </Reference>
 | 
			
		||||
    <Reference Include="LicentiaLabs">
 | 
			
		||||
| 
						 | 
				
			
			@ -35,7 +35,7 @@
 | 
			
		|||
      <Private>False</Private>
 | 
			
		||||
    </Reference>
 | 
			
		||||
    <Reference Include="RJW">
 | 
			
		||||
      <HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\Mods\RJW\1.4\Assemblies\RJW.dll</HintPath>
 | 
			
		||||
      <HintPath>..\..\rjw\1.4\Assemblies\RJW.dll</HintPath>
 | 
			
		||||
      <Private>False</Private>
 | 
			
		||||
    </Reference>
 | 
			
		||||
    <Reference Include="System" />
 | 
			
		||||
| 
						 | 
				
			
			@ -51,7 +51,12 @@
 | 
			
		|||
    <None Include="..\Common\Languages\**" />
 | 
			
		||||
    <None Include="..\Common\Patches\**" />
 | 
			
		||||
    <Reference Include="UnityEngine.CoreModule">
 | 
			
		||||
      <HintPath>..\..\..\..\..\..\..\Program Files (x86)\Steam\steamapps\common\RimWorld\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
 | 
			
		||||
      <HintPath>..\..\..\RimWorldWin64_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
 | 
			
		||||
      <Private>False</Private>
 | 
			
		||||
    </Reference>
 | 
			
		||||
    <Reference Include="UnityEngine.IMGUIModule">
 | 
			
		||||
      <HintPath>..\..\..\RimWorldWin64_Data\Managed\UnityEngine.IMGUIModule.dll</HintPath>
 | 
			
		||||
      <Private>False</Private>
 | 
			
		||||
    </Reference>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue