public static GameObject CreateArtifact(string id, string name, string desc, string initial_anim, string ui_anim, ArtifactTier artifact_tier, PostInitFn postInitFn = null, SimHashes element = SimHashes.Creature) { GameObject gameObject = EntityTemplates.CreateLooseEntity("artifact_" + id.ToLower(), name, desc, 25f, true, Assets.GetAnim("artifacts_kanim"), initial_anim, Grid.SceneLayer.Ore, EntityTemplates.CollisionShape.RECTANGLE, 1f, 1f, true, SORTORDER.BUILDINGELEMENTS, element, new List <Tag> { GameTags.MiscPickupable }); OccupyArea occupyArea = gameObject.AddOrGet <OccupyArea>(); occupyArea.OccupiedCellsOffsets = EntityTemplates.GenerateOffsets(1, 1); DecorProvider decorProvider = gameObject.AddOrGet <DecorProvider>(); decorProvider.SetValues(artifact_tier.decorValues); decorProvider.overrideName = gameObject.name; SpaceArtifact spaceArtifact = gameObject.AddOrGet <SpaceArtifact>(); spaceArtifact.SetUIAnim(ui_anim); spaceArtifact.SetArtifactTier(artifact_tier); gameObject.AddOrGet <KSelectable>(); gameObject.GetComponent <KBatchedAnimController>().initialMode = KAnim.PlayMode.Loop; postInitFn?.Invoke(gameObject); KPrefabID component = gameObject.GetComponent <KPrefabID>(); component.AddTag(GameTags.PedestalDisplayable, false); component.AddTag(GameTags.Artifact, false); 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); }