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); }