protected AnimalRecord CreateAnimalRecord(ThingDef def, Gender gender)
        {
            double baseCost = costCalculator.GetBaseThingCost(def, null);

            if (baseCost == 0)
            {
                return(null);
            }

            AnimalRecord result = new AnimalRecord();

            result.ThingDef = def;
            result.Gender   = gender;
            result.Cost     = baseCost;
            try {
                Pawn pawn = CreatePawn(def, gender);
                if (pawn == null)
                {
                    return(null);
                }
                else
                {
                    result.Thing = pawn;
                }
            }
            catch (Exception e) {
                Logger.Warning("Failed to create a pawn for animal database record: " + def.defName, e);
                return(null);
            }
            return(result);
        }
 protected void AddAnimalRecord(AnimalRecord animal)
 {
     if (!animalDictionary.ContainsKey(animal.Key))
     {
         animals.Add(animal);
         animalDictionary.Add(animal.Key, animal);
     }
 }
        public void AddAnimal(AnimalRecord record)
        {
            SelectedAnimal existingAnimal = FindSelectedAnimal(record.Key);

            if (existingAnimal != null)
            {
                existingAnimal.Count++;
            }
            else
            {
                SelectedAnimal animal = new SelectedAnimal();
                animal.Record = record;
                animal.Count  = 1;
                animals.Add(animal);
            }
        }
 protected void Initialize()
 {
     foreach (var def in DefDatabase <ThingDef> .AllDefs.Where((ThingDef def) => {
         if (def.race != null && def.race.Animal == true)
         {
             return(true);
         }
         else
         {
             return(false);
         }
     }))
     {
         if (def.race.hasGenders)
         {
             AnimalRecord femaleRecord = CreateAnimalRecord(def, Gender.Female);
             if (femaleRecord != null)
             {
                 AddAnimalRecord(femaleRecord);
             }
             AnimalRecord maleRecord = CreateAnimalRecord(def, Gender.Male);
             if (maleRecord != null)
             {
                 AddAnimalRecord(maleRecord);
             }
         }
         else
         {
             AnimalRecord record = CreateAnimalRecord(def, Gender.None);
             if (record != null)
             {
                 AddAnimalRecord(record);
             }
         }
     }
 }
 public static void Draw(Rect rect, AnimalRecord animal)
 {
     Draw(rect, animal.Thing, Color.white);
 }