public void LayEgg()
        {
            fertility.value = 0f;
            Vector3 position = base.smi.transform.GetPosition();

            position.z = Grid.GetLayerZ(Grid.SceneLayer.Ore);
            float num     = UnityEngine.Random.value;
            Tag   invalid = Tag.Invalid;

            foreach (BreedingChance breedingChance in breedingChances)
            {
                num -= breedingChance.weight;
                if (num <= 0f)
                {
                    invalid = breedingChance.egg;
                    break;
                }
            }
            if (GenericGameSettings.instance.acceleratedLifecycle)
            {
                float num2 = 0f;
                foreach (BreedingChance breedingChance2 in breedingChances)
                {
                    if (breedingChance2.weight > num2)
                    {
                        num2    = breedingChance2.weight;
                        invalid = breedingChance2.egg;
                    }
                }
            }
            Debug.Assert(invalid != Tag.Invalid, "Didn't pick an egg to lay. Weights weren't normalized?");
            GameObject prefab     = Assets.GetPrefab(invalid);
            GameObject gameObject = egg = Util.KInstantiate(prefab, position);
            SymbolOverrideController component = GetComponent <SymbolOverrideController>();
            string str = "egg01";

            IncubationMonitor.Def def        = prefab.GetDef <IncubationMonitor.Def>();
            CreatureBrain         component2 = Assets.GetPrefab(def.spawnedCreature).GetComponent <CreatureBrain>();

            if (!string.IsNullOrEmpty(component2.symbolPrefix))
            {
                str = component2.symbolPrefix + "egg01";
            }
            KAnim.Build.Symbol symbol = egg.GetComponent <KBatchedAnimController>().AnimFiles[0].GetData().build.GetSymbol(str);
            if (symbol != null)
            {
                component.AddSymbolOverride(targetEggSymbol, symbol, 0);
            }
            Trigger(1193600993, egg);
        }
    public static GameObject CreateEgg(string id, string name, string desc, Tag creature_id, string anim, float mass, int egg_sort_order, float base_incubation_rate)
    {
        GameObject gameObject = EntityTemplates.CreateLooseEntity(id, name, desc, mass, true, Assets.GetAnim(anim), "idle", Grid.SceneLayer.Ore, EntityTemplates.CollisionShape.RECTANGLE, 0.8f, 0.8f, true, 0, SimHashes.Creature, null);

        gameObject.AddOrGet <KBoxCollider2D>().offset = new Vector2f(0f, 0.36f);
        Pickupable pickupable = gameObject.AddOrGet <Pickupable>();

        pickupable.sortOrder = SORTORDER.EGGS + egg_sort_order;
        gameObject.AddOrGet <Effects>();
        KPrefabID kPrefabID = gameObject.AddOrGet <KPrefabID>();

        kPrefabID.AddTag(GameTags.Egg, false);
        kPrefabID.AddTag(GameTags.IncubatableEgg, false);
        kPrefabID.AddTag(GameTags.PedestalDisplayable, false);
        IncubationMonitor.Def def = gameObject.AddOrGetDef <IncubationMonitor.Def>();
        def.spawnedCreature    = creature_id;
        def.baseIncubationRate = base_incubation_rate;
        OvercrowdingMonitor.Def def2 = gameObject.AddOrGetDef <OvercrowdingMonitor.Def>();
        def2.spaceRequiredPerCreature = 0;
        Object.Destroy(gameObject.GetComponent <EntitySplitter>());
        Assets.AddPrefab(gameObject.GetComponent <KPrefabID>());
        string arg = string.Format(STRINGS.BUILDINGS.PREFABS.EGGCRACKER.RESULT_DESCRIPTION, name);

        ComplexRecipe.RecipeElement[] array = new ComplexRecipe.RecipeElement[1]
        {
            new ComplexRecipe.RecipeElement(id, 1f)
        };
        ComplexRecipe.RecipeElement[] array2 = new ComplexRecipe.RecipeElement[2]
        {
            new ComplexRecipe.RecipeElement("RawEgg", 0.5f * mass),
            new ComplexRecipe.RecipeElement("EggShell", 0.5f * mass)
        };
        string        obsolete_id   = ComplexRecipeManager.MakeObsoleteRecipeID(id, "RawEgg");
        string        text          = ComplexRecipeManager.MakeRecipeID(id, array, array2);
        ComplexRecipe complexRecipe = new ComplexRecipe(text, array, array2);

        complexRecipe.description = string.Format(STRINGS.BUILDINGS.PREFABS.EGGCRACKER.RECIPE_DESCRIPTION, name, arg);
        complexRecipe.fabricators = new List <Tag>
        {
            "EggCracker"
        };
        complexRecipe.time = 5f;
        ComplexRecipeManager.Get().AddObsoleteIDMapping(obsolete_id, text);
        return(gameObject);
    }
 public static Tuple <Sprite, Color> GetUISprite(object item, string animName = "ui", bool centered = false)
 {
     if (item is Substance)
     {
         return(GetUISprite(ElementLoader.FindElementByHash((item as Substance).elementID), animName, centered));
     }
     if (item is Element)
     {
         if ((item as Element).IsSolid)
         {
             return(new Tuple <Sprite, Color>(GetUISpriteFromMultiObjectAnim((item as Element).substance.anim, animName, centered, string.Empty), Color.white));
         }
         if ((item as Element).IsLiquid)
         {
             return(new Tuple <Sprite, Color>(Assets.GetSprite("element_liquid"), (item as Element).substance.uiColour));
         }
         if ((item as Element).IsGas)
         {
             return(new Tuple <Sprite, Color>(Assets.GetSprite("element_gas"), (item as Element).substance.uiColour));
         }
         return(new Tuple <Sprite, Color>(null, Color.clear));
     }
     if (item is GameObject)
     {
         GameObject gameObject = item as GameObject;
         if (ElementLoader.GetElement(gameObject.PrefabID()) != null)
         {
             return(GetUISprite(ElementLoader.GetElement(gameObject.PrefabID()), animName, centered));
         }
         CreatureBrain component = gameObject.GetComponent <CreatureBrain>();
         if ((UnityEngine.Object)component != (UnityEngine.Object)null)
         {
             animName = component.symbolPrefix + "ui";
         }
         SpaceArtifact component2 = gameObject.GetComponent <SpaceArtifact>();
         if ((UnityEngine.Object)component2 != (UnityEngine.Object)null)
         {
             animName = component2.GetUIAnim();
         }
         if (gameObject.HasTag(GameTags.Egg))
         {
             IncubationMonitor.Def def = gameObject.GetDef <IncubationMonitor.Def>();
             if (def != null)
             {
                 GameObject prefab = Assets.GetPrefab(def.spawnedCreature);
                 if ((bool)prefab)
                 {
                     component = prefab.GetComponent <CreatureBrain>();
                     if ((bool)component && !string.IsNullOrEmpty(component.symbolPrefix))
                     {
                         animName = component.symbolPrefix + animName;
                     }
                 }
             }
         }
         KBatchedAnimController component3 = gameObject.GetComponent <KBatchedAnimController>();
         if ((bool)component3)
         {
             Sprite uISpriteFromMultiObjectAnim = GetUISpriteFromMultiObjectAnim(component3.AnimFiles[0], animName, centered, string.Empty);
             return(new Tuple <Sprite, Color>(uISpriteFromMultiObjectAnim, (!((UnityEngine.Object)uISpriteFromMultiObjectAnim != (UnityEngine.Object)null)) ? Color.clear : Color.white));
         }
         if ((UnityEngine.Object)gameObject.GetComponent <Building>() != (UnityEngine.Object)null)
         {
             Sprite uISprite = gameObject.GetComponent <Building>().Def.GetUISprite(animName, centered);
             return(new Tuple <Sprite, Color>(uISprite, (!((UnityEngine.Object)uISprite != (UnityEngine.Object)null)) ? Color.clear : Color.white));
         }
         Debug.LogWarningFormat("Can't get sprite for type {0} (no KBatchedAnimController)", item.ToString());
         return(null);
     }
     if (item is string)
     {
         if (Db.Get().Amounts.Exists(item as string))
         {
             Amount amount = Db.Get().Amounts.Get(item as string);
             return(new Tuple <Sprite, Color>(Assets.GetSprite(amount.uiSprite), Color.white));
         }
         if (Db.Get().Attributes.Exists(item as string))
         {
             Klei.AI.Attribute attribute = Db.Get().Attributes.Get(item as string);
             return(new Tuple <Sprite, Color>(Assets.GetSprite(attribute.uiSprite), Color.white));
         }
         return(GetUISprite((item as string).ToTag(), animName, centered));
     }
     if (item is Tag)
     {
         if (ElementLoader.GetElement((Tag)item) != null)
         {
             return(GetUISprite(ElementLoader.GetElement((Tag)item), animName, centered));
         }
         if ((UnityEngine.Object)Assets.GetPrefab((Tag)item) != (UnityEngine.Object)null)
         {
             return(GetUISprite(Assets.GetPrefab((Tag)item), animName, centered));
         }
         if ((UnityEngine.Object)Assets.GetSprite(((Tag)item).Name) != (UnityEngine.Object)null)
         {
             return(new Tuple <Sprite, Color>(Assets.GetSprite(((Tag)item).Name), Color.white));
         }
     }
     DebugUtil.DevAssertArgs(false, "Can't get sprite for type ", item.ToString());
     return(null);
 }