示例#1
0
    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);
 }