public GameObject CreatePrefab()
    {
        string         id          = "BasicForagePlantPlanted";
        string         name        = STRINGS.CREATURES.SPECIES.BASICFORAGEPLANTPLANTED.NAME;
        string         desc        = STRINGS.CREATURES.SPECIES.BASICFORAGEPLANTPLANTED.DESC;
        float          mass        = 100f;
        KAnimFile      anim        = Assets.GetAnim("muckroot_kanim");
        string         initialAnim = "idle";
        EffectorValues tIER        = DECOR.BONUS.TIER1;
        GameObject     gameObject  = EntityTemplates.CreatePlacedEntity(id, name, desc, mass, anim, initialAnim, Grid.SceneLayer.BuildingBack, 1, 1, tIER, default(EffectorValues), SimHashes.Creature, null, 293f);

        gameObject.AddOrGet <SimTemperatureTransfer>();
        OccupyArea occupyArea = gameObject.AddOrGet <OccupyArea>();

        occupyArea.objectLayers = new ObjectLayer[1]
        {
            ObjectLayer.Building
        };
        gameObject.AddOrGet <EntombVulnerable>();
        gameObject.AddOrGet <DrowningMonitor>();
        gameObject.AddOrGet <Prioritizable>();
        gameObject.AddOrGet <Uprootable>();
        gameObject.AddOrGet <UprootedMonitor>();
        gameObject.AddOrGet <Harvestable>();
        gameObject.AddOrGet <HarvestDesignatable>();
        SeedProducer seedProducer = gameObject.AddOrGet <SeedProducer>();

        seedProducer.Configure("BasicForagePlant", SeedProducer.ProductionType.DigOnly, 1);
        gameObject.AddOrGet <BasicForagePlantPlanted>();
        gameObject.AddOrGet <KBatchedAnimController>().randomiseLoopedOffset = true;
        return(gameObject);
    }
Exemple #2
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);
    }
 protected override void OnDragTool(int cell, int distFromOrigin)
 {
     if (Grid.IsValidCell(cell))
     {
         foreach (HarvestDesignatable item in Components.HarvestDesignatables.Items)
         {
             OccupyArea area = item.area;
             if (Grid.PosToCell(item) == cell || ((Object)area != (Object)null && area.CheckIsOccupying(cell)))
             {
                 if (options["HARVEST_WHEN_READY"] == ToolParameterMenu.ToggleState.On)
                 {
                     item.SetHarvestWhenReady(true);
                 }
                 else if (options["DO_NOT_HARVEST"] == ToolParameterMenu.ToggleState.On)
                 {
                     item.SetHarvestWhenReady(false);
                 }
                 Prioritizable component = item.GetComponent <Prioritizable>();
                 if ((Object)component != (Object)null)
                 {
                     component.SetMasterPriority(ToolMenu.Instance.PriorityScreen.GetLastSelectedPriority());
                 }
             }
         }
     }
 }
Exemple #4
0
    public GameObject CreatePrefab()
    {
        GameObject     gameObject = EntityTemplates.CreatePlacedEntity("SetLocker", STRINGS.BUILDINGS.PREFABS.SETLOCKER.NAME, STRINGS.BUILDINGS.PREFABS.SETLOCKER.DESC, 100f, Assets.GetAnim("setpiece_locker_kanim"), "on", Grid.SceneLayer.Building, 1, 2, TUNING.BUILDINGS.DECOR.BONUS.TIER0, NOISE_POLLUTION.NOISY.TIER0, SimHashes.Creature, null, 293f);
        PrimaryElement component  = gameObject.GetComponent <PrimaryElement>();

        component.SetElement(SimHashes.Unobtanium);
        component.Temperature = 294.15f;
        Workable workable = gameObject.AddOrGet <Workable>();

        workable.synchronizeAnims    = false;
        workable.resetProgressOnStop = true;
        SetLocker setLocker = gameObject.AddOrGet <SetLocker>();

        setLocker.overrideAnim          = "anim_interacts_clothingfactory_kanim";
        setLocker.dropOffset            = new Vector2I(0, 1);
        setLocker.possible_contents_ids = new string[3]
        {
            "Warm_Vest",
            "Cool_Vest",
            "Funky_Vest"
        };
        gameObject.AddOrGet <LoreBearer>();
        OccupyArea occupyArea = gameObject.AddOrGet <OccupyArea>();

        occupyArea.objectLayers = new ObjectLayer[1]
        {
            ObjectLayer.Building
        };
        return(gameObject);
    }
Exemple #5
0
    public static void CreateBaseOreTemplates()
    {
        baseOreTemplate = new GameObject("OreTemplate");
        Object.DontDestroyOnLoad(baseOreTemplate);
        baseOreTemplate.SetActive(false);
        baseOreTemplate.AddComponent <KPrefabID>();
        baseOreTemplate.AddComponent <PrimaryElement>();
        baseOreTemplate.AddComponent <Pickupable>();
        baseOreTemplate.AddComponent <KSelectable>();
        baseOreTemplate.AddComponent <SaveLoadRoot>();
        baseOreTemplate.AddComponent <StateMachineController>();
        baseOreTemplate.AddComponent <Clearable>();
        baseOreTemplate.AddComponent <Prioritizable>();
        baseOreTemplate.AddComponent <KBatchedAnimController>();
        baseOreTemplate.AddComponent <SimTemperatureTransfer>();
        baseOreTemplate.AddComponent <Modifiers>();
        OccupyArea occupyArea = baseOreTemplate.AddOrGet <OccupyArea>();

        occupyArea.OccupiedCellsOffsets = new CellOffset[1]
        {
            default(CellOffset)
        };
        DecorProvider decorProvider = baseOreTemplate.AddOrGet <DecorProvider>();

        decorProvider.baseDecor  = -10f;
        decorProvider.baseRadius = 1f;
        baseOreTemplate.AddOrGet <ElementChunk>();
    }
Exemple #6
0
    public GameObject CreatePrefab()
    {
        int            num        = 1;
        int            height     = 1;
        string         id         = "PropLadder";
        string         name       = STRINGS.BUILDINGS.PREFABS.PROPLADDER.NAME;
        string         desc       = STRINGS.BUILDINGS.PREFABS.PROPLADDER.DESC;
        float          mass       = 50f;
        int            width      = num;
        GameObject     gameObject = EntityTemplates.CreatePlacedEntity(id, name, desc, mass, Assets.GetAnim("ladder_poi_kanim"), "off", Grid.SceneLayer.Building, width, height, TUNING.BUILDINGS.DECOR.BONUS.TIER0, NOISE_POLLUTION.NOISY.TIER0, SimHashes.Creature, null, 293f);
        PrimaryElement component  = gameObject.GetComponent <PrimaryElement>();

        component.SetElement(SimHashes.Polypropylene);
        component.Temperature = 294.15f;
        Ladder ladder = gameObject.AddOrGet <Ladder>();

        ladder.upwardsMovementSpeedMultiplier   = 1.5f;
        ladder.downwardsMovementSpeedMultiplier = 1.5f;
        gameObject.AddOrGet <AnimTileable>();
        OccupyArea obj = gameObject.AddOrGet <OccupyArea>();

        Object.DestroyImmediate(obj);
        obj = gameObject.AddOrGet <OccupyArea>();
        obj.OccupiedCellsOffsets = EntityTemplates.GenerateOffsets(num, height);
        obj.objectLayers         = new ObjectLayer[1]
        {
            ObjectLayer.Building
        };
        return(gameObject);
    }
Exemple #7
0
    private static GameObject ConfigPlacedEntity(GameObject template, string id, string name, string desc, float mass, KAnimFile anim, string initialAnim, Grid.SceneLayer sceneLayer, int width, int height, EffectorValues decor, EffectorValues noise = default(EffectorValues), SimHashes element = SimHashes.Creature, List <Tag> additionalTags = null, float defaultTemperature = 293f)
    {
        if ((Object)anim == (Object)null)
        {
            Debug.LogErrorFormat("Cant create [{0}] entity without an anim", name);
        }
        ConfigBasicEntity(template, id, name, desc, mass, true, anim, initialAnim, sceneLayer, element, additionalTags, defaultTemperature);
        KBoxCollider2D kBoxCollider2D = template.AddOrGet <KBoxCollider2D>();

        kBoxCollider2D.size = new Vector2f(width, height);
        float num = 0.5f * (float)((width + 1) % 2);

        kBoxCollider2D.offset = new Vector2f(num, (float)height / 2f);
        KBatchedAnimController component = template.GetComponent <KBatchedAnimController>();

        component.Offset = new Vector3(num, 0f, 0f);
        OccupyArea occupyArea = template.AddOrGet <OccupyArea>();

        occupyArea.OccupiedCellsOffsets = GenerateOffsets(width, height);
        DecorProvider decorProvider = template.AddOrGet <DecorProvider>();

        decorProvider.SetValues(decor);
        decorProvider.overrideName = name;
        return(template);
    }
Exemple #8
0
    public void OnPrefabInit(GameObject inst)
    {
        OccupyArea component = inst.GetComponent <OccupyArea>();

        component.objectLayers = new ObjectLayer[1]
        {
            ObjectLayer.Building
        };
    }
    public bool TestSuitableGround(int cell)
    {
        if (!Grid.IsValidCell(cell))
        {
            return(false);
        }
        int num = (Direction != SingleEntityReceptacle.ReceptacleDirection.Bottom) ? Grid.CellBelow(cell) : Grid.CellAbove(cell);

        if (!Grid.IsValidCell(num))
        {
            return(false);
        }
        if (Grid.Foundation[num])
        {
            return(false);
        }
        if (Grid.Element[num].hardness >= 150)
        {
            return(false);
        }
        if (replantGroundTag.IsValid && !Grid.Element[num].HasTag(replantGroundTag))
        {
            return(false);
        }
        GameObject       prefab    = Assets.GetPrefab(PlantID);
        EntombVulnerable component = prefab.GetComponent <EntombVulnerable>();

        if ((Object)component != (Object)null && !component.IsCellSafe(cell))
        {
            return(false);
        }
        DrowningMonitor component2 = prefab.GetComponent <DrowningMonitor>();

        if ((Object)component2 != (Object)null && !component2.IsCellSafe(cell))
        {
            return(false);
        }
        TemperatureVulnerable component3 = prefab.GetComponent <TemperatureVulnerable>();

        if ((Object)component3 != (Object)null && !component3.IsCellSafe(cell))
        {
            return(false);
        }
        UprootedMonitor component4 = prefab.GetComponent <UprootedMonitor>();

        if ((Object)component4 != (Object)null && !component4.IsCellSafe(cell))
        {
            return(false);
        }
        OccupyArea component5 = prefab.GetComponent <OccupyArea>();

        if ((Object)component5 != (Object)null && !component5.CanOccupyArea(cell, ObjectLayer.Building))
        {
            return(false);
        }
        return(true);
    }
 public Instance(IStateMachineTarget master)
     : base(master)
 {
     health     = GetComponent <Health>();
     occupyArea = GetComponent <OccupyArea>();
     internalTemperatureMonitor = base.gameObject.GetSMI <TemperatureMonitor.Instance>();
     internalTemperature        = Db.Get().Amounts.Temperature.Lookup(base.gameObject);
     temperatureTransferer      = base.gameObject.GetComponent <CreatureSimTemperatureTransfer>();
     primaryElement             = base.gameObject.GetComponent <PrimaryElement>();
     attributes = base.gameObject.GetAttributes();
 }
Exemple #11
0
 private void CreateOverlayIcon()
 {
     if (!((UnityEngine.Object)HarvestWhenReadyOverlayIcon != (UnityEngine.Object)null) && (UnityEngine.Object)GetComponent <AttackableBase>() == (UnityEngine.Object)null)
     {
         HarvestWhenReadyOverlayIcon = Util.KInstantiate(Assets.UIPrefabs.HarvestWhenReadyOverlayIcon, GameScreenManager.Instance.worldSpaceCanvas, null).GetComponent <RectTransform>();
         OccupyArea component  = GetComponent <OccupyArea>();
         Extents    extents    = component.GetExtents();
         KPrefabID  component2 = GetComponent <KPrefabID>();
         TransformExtensions.SetPosition(position: component2.HasTag(GameTags.Hanging) ? new Vector3((float)(extents.x + extents.width / 2) + 0.5f, (float)(extents.y + extents.height)) : new Vector3((float)(extents.x + extents.width / 2) + 0.5f, (float)extents.y), transform: HarvestWhenReadyOverlayIcon.transform);
         RefreshOverlayIcon(null);
     }
 }
Exemple #12
0
        public Splat(DecorProvider provider)
        {
            this = default(Splat);
            AttributeInstance decor = provider.decor;

            this.decor = 0f;
            if (decor != null)
            {
                this.decor = decor.GetTotalValue();
            }
            if (provider.HasTag(GameTags.Stored))
            {
                this.decor = 0f;
            }
            int num = Grid.PosToCell(provider.gameObject);

            if (Grid.IsValidCell(num))
            {
                if (!Grid.Transparent[num] && Grid.Solid[num] && (UnityEngine.Object)provider.simCellOccupier == (UnityEngine.Object)null)
                {
                    this.decor = 0f;
                }
                if (this.decor != 0f)
                {
                    provider.cellCount = 0;
                    this.provider      = provider;
                    int num2 = 5;
                    AttributeInstance decorRadius = provider.decorRadius;
                    if (decorRadius != null)
                    {
                        num2 = (int)decorRadius.GetTotalValue();
                    }
                    Orientation orientation = Orientation.Neutral;
                    if ((bool)provider.rotatable)
                    {
                        orientation = provider.rotatable.GetOrientation();
                    }
                    OccupyArea occupyArea = provider.occupyArea;
                    extents                      = occupyArea.GetExtents(orientation);
                    extents.x                    = Mathf.Max(extents.x - num2, 0);
                    extents.y                    = Mathf.Max(extents.y - num2, 0);
                    extents.width                = Mathf.Min(extents.width + num2 * 2, Grid.WidthInCells - 1);
                    extents.height               = Mathf.Min(extents.height + num2 * 2, Grid.HeightInCells - 1);
                    partitionerEntry             = GameScenePartitioner.Instance.Add("DecorProvider.SplatCollectDecorProviders", provider.gameObject, extents, GameScenePartitioner.Instance.decorProviderLayer, provider.onCollectDecorProvidersCallback);
                    solidChangedPartitionerEntry = GameScenePartitioner.Instance.Add("DecorProvider.SplatSolidCheck", provider.gameObject, extents, GameScenePartitioner.Instance.solidChangedLayer, provider.refreshPartionerCallback);
                    AddDecor();
                }
            }
        }
Exemple #13
0
    public GameObject CreatePrefab()
    {
        GameObject     gameObject = EntityTemplates.CreatePlacedEntity("PropLight", STRINGS.BUILDINGS.PREFABS.PROPLIGHT.NAME, STRINGS.BUILDINGS.PREFABS.PROPLIGHT.DESC, 50f, Assets.GetAnim("setpiece_light_kanim"), "off", Grid.SceneLayer.Building, 1, 1, TUNING.BUILDINGS.DECOR.BONUS.TIER0, NOISE_POLLUTION.NOISY.TIER0, SimHashes.Creature, null, 293f);
        PrimaryElement component  = gameObject.GetComponent <PrimaryElement>();

        component.SetElement(SimHashes.Steel);
        component.Temperature = 294.15f;
        OccupyArea occupyArea = gameObject.AddOrGet <OccupyArea>();

        occupyArea.objectLayers = new ObjectLayer[1]
        {
            ObjectLayer.Building
        };
        return(gameObject);
    }
Exemple #14
0
 protected override void OnSpawn()
 {
     base.OnSpawn();
     if (isMarkedForHarvest)
     {
         MarkForHarvest();
     }
     Components.HarvestDesignatables.Add(this);
     Subscribe(493375141, OnRefreshUserMenuDelegate);
     Subscribe(2127324410, OnCancelDelegate);
     Game.Instance.Subscribe(1248612973, onEnableOverlayDelegate);
     Game.Instance.Subscribe(1798162660, onEnableOverlayDelegate);
     Game.Instance.Subscribe(2015652040, OnDisableOverlay);
     area = GetComponent <OccupyArea>();
 }
Exemple #15
0
    public void OnPrefabInit(GameObject inst)
    {
        OccupyArea component = inst.GetComponent <OccupyArea>();

        component.objectLayers = new ObjectLayer[1]
        {
            ObjectLayer.Building
        };
        int cell = Grid.PosToCell(inst);

        CellOffset[] occupiedCellsOffsets = component.OccupiedCellsOffsets;
        foreach (CellOffset offset in occupiedCellsOffsets)
        {
            Grid.GravitasFacility[Grid.OffsetCell(cell, offset)] = true;
        }
    }
    public void OnPrefabInit(GameObject inst)
    {
        GeneShuffler component = inst.GetComponent <GeneShuffler>();

        component.workLayer = Grid.SceneLayer.Building;
        Ownable component2 = inst.GetComponent <Ownable>();

        component2.slotID = Db.Get().AssignableSlots.GeneShuffler.Id;
        OccupyArea component3 = inst.GetComponent <OccupyArea>();

        component3.objectLayers = new ObjectLayer[1]
        {
            ObjectLayer.Building
        };
        inst.GetComponent <Deconstructable>();
    }
Exemple #17
0
        static void Postfix(OccupyArea __instance, ref Extents __result)
        {
            // Hacky manipulation to get the splat to be the right size/shape...
            if (__instance.name == "CarpetTileComplete")
            {
                int radius = Options.Opts.CarpetTile.DecorRadius;

                if (Grid.IsSolidCell(Grid.CellAbove(Grid.PosToCell(__instance.gameObject))))
                {
                    __result.x    += radius;
                    __result.width = -(radius * 2 - 1);
                }

                __result.y     += radius;
                __result.height = -(radius * 2 - 2);
            }
        }
    protected override void OnSpawn()
    {
        OccupyArea component = GetComponent <OccupyArea>();

        if ((Object)component != (Object)null)
        {
            this.extents = component.GetExtents();
        }
        else
        {
            Building component2 = GetComponent <Building>();
            this.extents = component2.GetExtents();
        }
        Extents extents = new Extents(this.extents.x - 1, this.extents.y - 1, this.extents.width + 2, this.extents.height + 2);

        partitionerEntry = GameScenePartitioner.Instance.Add("AnimTileable.OnSpawn", base.gameObject, extents, GameScenePartitioner.Instance.objectLayers[(int)objectLayer], OnNeighbourCellsUpdated);
        UpdateEndCaps();
    }
Exemple #19
0
    public static GameObject MakeHangingOffsets(GameObject template, int width, int height)
    {
        KBoxCollider2D component = template.GetComponent <KBoxCollider2D>();

        if ((bool)component)
        {
            component.size = new Vector2f(width, height);
            float a = 0.5f * (float)((width + 1) % 2);
            component.offset = new Vector2f(a, (float)(-height) / 2f + 1f);
        }
        OccupyArea component2 = template.GetComponent <OccupyArea>();

        if ((bool)component2)
        {
            component2.OccupiedCellsOffsets = GenerateHangingOffsets(width, height);
        }
        return(template);
    }
Exemple #20
0
    public NoiseSplat(NoisePolluter setProvider, float death_time = 0f)
    {
        deathTime = death_time;
        dB        = 0;
        radius    = 5;
        if (setProvider.dB != null)
        {
            dB = (int)setProvider.dB.GetTotalValue();
        }
        int cell = Grid.PosToCell(setProvider.gameObject);

        if (!NoisePolluter.IsNoiseableCell(cell))
        {
            dB = 0;
        }
        if (dB != 0)
        {
            setProvider.Clear();
            OccupyArea occupyArea = setProvider.occupyArea;
            baseExtents = occupyArea.GetExtents();
            provider    = setProvider;
            position    = setProvider.transform.GetPosition();
            if (setProvider.dBRadius != null)
            {
                radius = (int)setProvider.dBRadius.GetTotalValue();
            }
            if (radius != 0)
            {
                int x = 0;
                int y = 0;
                Grid.CellToXY(cell, out x, out y);
                int      widthInCells  = occupyArea.GetWidthInCells();
                int      heightInCells = occupyArea.GetHeightInCells();
                Vector2I vector2I      = new Vector2I(x - radius, y - radius);
                Vector2I v             = vector2I + new Vector2I(radius * 2 + widthInCells, radius * 2 + heightInCells);
                vector2I                     = Vector2I.Max(vector2I, Vector2I.zero);
                v                            = Vector2I.Min(v, new Vector2I(Grid.WidthInCells - 1, Grid.HeightInCells - 1));
                effectExtents                = new Extents(vector2I.x, vector2I.y, v.x - vector2I.x, v.y - vector2I.y);
                partitionerEntry             = GameScenePartitioner.Instance.Add("NoiseSplat.SplatCollectNoisePolluters", setProvider.gameObject, effectExtents, GameScenePartitioner.Instance.noisePolluterLayer, setProvider.onCollectNoisePollutersCallback);
                solidChangedPartitionerEntry = GameScenePartitioner.Instance.Add("NoiseSplat.SplatSolidCheck", setProvider.gameObject, effectExtents, GameScenePartitioner.Instance.solidChangedLayer, setProvider.refreshPartionerCallback);
            }
        }
    }
Exemple #21
0
        protected override void OnSpawn()
        {
            OccupyArea component = base.GetComponent <OccupyArea>();

            if (component != null)
            {
                this.extents = component.GetExtents();
            }
            else
            {
                Building component2 = base.GetComponent <Building>();
                this.extents = component2.GetExtents();
            }
            Extents extents = new Extents(this.extents.x - 1, this.extents.y - 1, this.extents.width + 2, this.extents.height + 2);

            this.partitionerEntry = GameScenePartitioner.Instance.Add("AnimStairs.OnNeighbourCellsUpdated", base.gameObject, extents, GameScenePartitioner.Instance.objectLayers[(int)this.objectLayer], new Action <object>(this.OnNeighbourCellsUpdated));
            //int cell = Grid.PosToCell(base.gameObject);
            //this.partitionerEntry2 = GameScenePartitioner.Instance.Add("AnimStairs.OnNavChanged", base.gameObject, cell, GameScenePartitioner.Instance.validNavCellChangedLayer, new Action<object>(this.OnNavChanged));
            this.UpdateEndCaps();
            //this.UpadateRotation();
        }
Exemple #22
0
        private static void DoWorldDamage(GameObject part, Vector3 apparentPosition)
        {
            OccupyArea component = part.GetComponent <OccupyArea>();

            component.UpdateOccupiedArea();
            CellOffset[] occupiedCellsOffsets = component.OccupiedCellsOffsets;
            foreach (CellOffset offset in occupiedCellsOffsets)
            {
                int num = Grid.OffsetCell(Grid.PosToCell(apparentPosition), offset);
                if (Grid.IsValidCell(num))
                {
                    if (Grid.Solid[num])
                    {
                        WorldDamage instance    = WorldDamage.Instance;
                        int         cell        = num;
                        float       amount      = 10000f;
                        int         src_cell    = num;
                        string      source_name = BUILDINGS.DAMAGESOURCES.ROCKET;
                        instance.ApplyDamage(cell, amount, src_cell, -1, source_name, UI.GAMEOBJECTEFFECTS.DAMAGE_POPS.ROCKET);
                    }
                    else if (Grid.FakeFloor[num])
                    {
                        GameObject gameObject = Grid.Objects[num, 38];
                        if ((Object)gameObject != (Object)null)
                        {
                            BuildingHP component2 = gameObject.GetComponent <BuildingHP>();
                            if ((Object)component2 != (Object)null)
                            {
                                gameObject.Trigger(-794517298, new BuildingHP.DamageSourceInfo
                                {
                                    damage    = component2.MaxHitPoints,
                                    source    = (string)BUILDINGS.DAMAGESOURCES.ROCKET,
                                    popString = (string)UI.GAMEOBJECTEFFECTS.DAMAGE_POPS.ROCKET
                                });
                            }
                        }
                    }
                }
            }
        }
Exemple #23
0
    public static GameObject CreateAndRegisterPreview(string id, KAnimFile anim, string initial_anim, ObjectLayer object_layer, int width, int height)
    {
        GameObject gameObject = CreatePlacedEntity(id, id, id, 1f, anim, initial_anim, Grid.SceneLayer.Front, width, height, TUNING.BUILDINGS.DECOR.NONE, default(EffectorValues), SimHashes.Creature, null, 293f);

        gameObject.UpdateComponentRequirement <KSelectable>(false);
        gameObject.UpdateComponentRequirement <SaveLoadRoot>(false);
        EntityPreview entityPreview = gameObject.AddOrGet <EntityPreview>();

        entityPreview.objectLayer = object_layer;
        OccupyArea occupyArea = gameObject.AddOrGet <OccupyArea>();

        occupyArea.objectLayers = new ObjectLayer[1]
        {
            object_layer
        };
        occupyArea.ApplyToCells = false;
        gameObject.AddOrGet <Storage>();
        KPrefabID component = gameObject.GetComponent <KPrefabID>();

        Assets.AddPrefab(component);
        return(gameObject);
    }
Exemple #24
0
 protected override void OnDragTool(int cell, int distFromOrigin)
 {
     if (!Grid.Solid[cell])
     {
         foreach (Uprootable item in Components.Uprootables.Items)
         {
             if (Grid.PosToCell(item.gameObject) == cell)
             {
                 item.MarkForUproot(true);
                 break;
             }
             OccupyArea area = item.area;
             if ((Object)area != (Object)null && area.CheckIsOccupying(cell))
             {
                 item.MarkForUproot(true);
             }
         }
     }
     if (DebugHandler.InstantBuildMode)
     {
         if (Grid.IsValidCell(cell) && Grid.Solid[cell] && !Grid.Foundation[cell])
         {
             WorldDamage.Instance.DestroyCell(cell, -1);
         }
     }
     else
     {
         GameObject gameObject = PlaceDig(cell, distFromOrigin);
         if ((Object)gameObject != (Object)null)
         {
             Prioritizable component = gameObject.GetComponent <Prioritizable>();
             if ((Object)component != (Object)null)
             {
                 component.SetMasterPriority(ToolMenu.Instance.PriorityScreen.GetLastSelectedPriority());
             }
         }
     }
 }
    public GameObject CreatePrefab()
    {
        GameObject gameObject = EntityTemplates.CreatePlacedEntity("OilWell", STRINGS.CREATURES.SPECIES.OIL_WELL.NAME, STRINGS.CREATURES.SPECIES.OIL_WELL.DESC, 2000f, Assets.GetAnim("geyser_side_oil_kanim"), "off", Grid.SceneLayer.BuildingBack, 4, 2, TUNING.BUILDINGS.DECOR.BONUS.TIER1, NOISE_POLLUTION.NOISY.TIER5, SimHashes.Creature, null, 293f);
        OccupyArea component  = gameObject.GetComponent <OccupyArea>();

        component.objectLayers = new ObjectLayer[1]
        {
            ObjectLayer.Building
        };
        PrimaryElement component2 = gameObject.GetComponent <PrimaryElement>();

        component2.SetElement(SimHashes.SedimentaryRock);
        component2.Temperature = 372.15f;
        BuildingAttachPoint buildingAttachPoint = gameObject.AddOrGet <BuildingAttachPoint>();

        buildingAttachPoint.points = new BuildingAttachPoint.HardPoint[1]
        {
            new BuildingAttachPoint.HardPoint(new CellOffset(0, 0), GameTags.OilWell, null)
        };
        SoundEventVolumeCache.instance.AddVolume("geyser_side_methane_kanim", "GeyserMethane_shake_LP", NOISE_POLLUTION.NOISY.TIER5);
        SoundEventVolumeCache.instance.AddVolume("geyser_side_methane_kanim", "GeyserMethane_erupt_LP", NOISE_POLLUTION.NOISY.TIER6);
        return(gameObject);
    }
Exemple #26
0
    public GameObject CreatePrefab()
    {
        string     name       = DUPLICANTS.MODIFIERS.BASEDUPLICANT.NAME;
        GameObject gameObject = EntityTemplates.CreateEntity(ID, name, true);

        gameObject.AddOrGet <StateMachineController>();
        MinionModifiers modifiers = gameObject.AddOrGet <MinionModifiers>();

        AddMinionAmounts(modifiers);
        AddMinionTraits(name, modifiers);
        gameObject.AddOrGet <MinionBrain>();
        gameObject.AddOrGet <KPrefabID>().AddTag(GameTags.DupeBrain, false);
        gameObject.AddOrGet <Worker>();
        gameObject.AddOrGet <ChoreConsumer>();
        Storage storage = gameObject.AddOrGet <Storage>();

        storage.fxPrefix   = Storage.FXPrefix.PickedUp;
        storage.dropOnLoad = true;
        storage.SetDefaultStoredItemModifiers(new List <Storage.StoredItemModifier>
        {
            Storage.StoredItemModifier.Preserve,
            Storage.StoredItemModifier.Seal
        });
        gameObject.AddOrGet <Health>();
        OxygenBreather oxygenBreather = gameObject.AddOrGet <OxygenBreather>();

        oxygenBreather.O2toCO2conversion  = 0.02f;
        oxygenBreather.lowOxygenThreshold = 0.52f;
        oxygenBreather.noOxygenThreshold  = 0.05f;
        oxygenBreather.mouthOffset        = new Vector2f(0.25f, 0.7f);
        oxygenBreather.minCO2ToEmit       = 0.02f;
        oxygenBreather.breathableCells    = new CellOffset[6]
        {
            new CellOffset(0, 0),
            new CellOffset(0, 1),
            new CellOffset(1, 1),
            new CellOffset(-1, 1),
            new CellOffset(1, 0),
            new CellOffset(-1, 0)
        };
        gameObject.AddOrGet <WarmBlooded>();
        gameObject.AddOrGet <MinionIdentity>();
        GridVisibility gridVisibility = gameObject.AddOrGet <GridVisibility>();

        gridVisibility.radius      = 30f;
        gridVisibility.innerRadius = 20f;
        gameObject.AddOrGet <MiningSounds>();
        gameObject.AddOrGet <SaveLoadRoot>();
        gameObject.AddOrGet <AntiCluster>();
        Navigator navigator = gameObject.AddOrGet <Navigator>();

        navigator.NavGridName    = "MinionNavGrid";
        navigator.CurrentNavType = NavType.Floor;
        KBatchedAnimController kBatchedAnimController = gameObject.AddOrGet <KBatchedAnimController>();

        kBatchedAnimController.isMovable  = true;
        kBatchedAnimController.sceneLayer = Grid.SceneLayer.Move;
        kBatchedAnimController.AnimFiles  = new KAnimFile[8]
        {
            Assets.GetAnim("body_comp_default_kanim"),
            Assets.GetAnim("anim_construction_default_kanim"),
            Assets.GetAnim("anim_idles_default_kanim"),
            Assets.GetAnim("anim_loco_firepole_kanim"),
            Assets.GetAnim("anim_loco_new_kanim"),
            Assets.GetAnim("anim_loco_tube_kanim"),
            Assets.GetAnim("anim_construction_firepole_kanim"),
            Assets.GetAnim("anim_construction_jetsuit_kanim")
        };
        KBoxCollider2D kBoxCollider2D = gameObject.AddOrGet <KBoxCollider2D>();

        kBoxCollider2D.offset = new Vector2(0f, 0.8f);
        kBoxCollider2D.size   = new Vector2(1f, 1.5f);
        SnapOn snapOn = gameObject.AddOrGet <SnapOn>();

        snapOn.snapPoints = new List <SnapOn.SnapPoint>(new SnapOn.SnapPoint[17]
        {
            new SnapOn.SnapPoint
            {
                pointName      = "dig",
                automatic      = false,
                context        = (HashedString)"dig",
                buildFile      = Assets.GetAnim("excavator_kanim"),
                overrideSymbol = (HashedString)"snapTo_rgtHand"
            },
            new SnapOn.SnapPoint
            {
                pointName      = "dig",
                automatic      = false,
                context        = (HashedString)"build",
                buildFile      = Assets.GetAnim("constructor_gun_kanim"),
                overrideSymbol = (HashedString)"snapTo_rgtHand"
            },
            new SnapOn.SnapPoint
            {
                pointName      = "dig",
                automatic      = false,
                context        = (HashedString)"fetchliquid",
                buildFile      = Assets.GetAnim("water_gun_kanim"),
                overrideSymbol = (HashedString)"snapTo_rgtHand"
            },
            new SnapOn.SnapPoint
            {
                pointName      = "dig",
                automatic      = false,
                context        = (HashedString)"paint",
                buildFile      = Assets.GetAnim("painting_gun_kanim"),
                overrideSymbol = (HashedString)"snapTo_rgtHand"
            },
            new SnapOn.SnapPoint
            {
                pointName      = "dig",
                automatic      = false,
                context        = (HashedString)"harvest",
                buildFile      = Assets.GetAnim("plant_harvester_gun_kanim"),
                overrideSymbol = (HashedString)"snapTo_rgtHand"
            },
            new SnapOn.SnapPoint
            {
                pointName      = "dig",
                automatic      = false,
                context        = (HashedString)"capture",
                buildFile      = Assets.GetAnim("net_gun_kanim"),
                overrideSymbol = (HashedString)"snapTo_rgtHand"
            },
            new SnapOn.SnapPoint
            {
                pointName      = "dig",
                automatic      = false,
                context        = (HashedString)"attack",
                buildFile      = Assets.GetAnim("attack_gun_kanim"),
                overrideSymbol = (HashedString)"snapTo_rgtHand"
            },
            new SnapOn.SnapPoint
            {
                pointName      = "dig",
                automatic      = false,
                context        = (HashedString)"pickup",
                buildFile      = Assets.GetAnim("pickupdrop_gun_kanim"),
                overrideSymbol = (HashedString)"snapTo_rgtHand"
            },
            new SnapOn.SnapPoint
            {
                pointName      = "dig",
                automatic      = false,
                context        = (HashedString)"store",
                buildFile      = Assets.GetAnim("pickupdrop_gun_kanim"),
                overrideSymbol = (HashedString)"snapTo_rgtHand"
            },
            new SnapOn.SnapPoint
            {
                pointName      = "dig",
                automatic      = false,
                context        = (HashedString)"disinfect",
                buildFile      = Assets.GetAnim("plant_spray_gun_kanim"),
                overrideSymbol = (HashedString)"snapTo_rgtHand"
            },
            new SnapOn.SnapPoint
            {
                pointName      = "dig",
                automatic      = false,
                context        = (HashedString)"tend",
                buildFile      = Assets.GetAnim("plant_harvester_gun_kanim"),
                overrideSymbol = (HashedString)"snapTo_rgtHand"
            },
            new SnapOn.SnapPoint
            {
                pointName      = "carry",
                automatic      = false,
                context        = (HashedString)string.Empty,
                buildFile      = null,
                overrideSymbol = (HashedString)"snapTo_chest"
            },
            new SnapOn.SnapPoint
            {
                pointName      = "build",
                automatic      = false,
                context        = (HashedString)string.Empty,
                buildFile      = null,
                overrideSymbol = (HashedString)"snapTo_rgtHand"
            },
            new SnapOn.SnapPoint
            {
                pointName      = "remote",
                automatic      = false,
                context        = (HashedString)string.Empty,
                buildFile      = null,
                overrideSymbol = (HashedString)"snapTo_rgtHand"
            },
            new SnapOn.SnapPoint
            {
                pointName      = "snapTo_neck",
                automatic      = false,
                context        = (HashedString)string.Empty,
                buildFile      = Assets.GetAnim("helm_oxygen_kanim"),
                overrideSymbol = (HashedString)"snapTo_neck"
            },
            new SnapOn.SnapPoint
            {
                pointName      = "dig",
                automatic      = false,
                context        = (HashedString)"powertinker",
                buildFile      = Assets.GetAnim("electrician_gun_kanim"),
                overrideSymbol = (HashedString)"snapTo_rgtHand"
            },
            new SnapOn.SnapPoint
            {
                pointName      = "dig",
                automatic      = false,
                context        = (HashedString)"specialistdig",
                buildFile      = Assets.GetAnim("excavator_kanim"),
                overrideSymbol = (HashedString)"snapTo_rgtHand"
            }
        });
        gameObject.AddOrGet <Effects>();
        gameObject.AddOrGet <Traits>();
        gameObject.AddOrGet <AttributeLevels>();
        gameObject.AddOrGet <AttributeConverters>();
        PrimaryElement primaryElement = gameObject.AddOrGet <PrimaryElement>();

        primaryElement.InternalTemperature = 310.15f;
        primaryElement.MassPerUnit         = 30f;
        primaryElement.ElementID           = SimHashes.Creature;
        gameObject.AddOrGet <ChoreProvider>();
        gameObject.AddOrGetDef <DebugGoToMonitor.Def>();
        gameObject.AddOrGetDef <SpeechMonitor.Def>();
        gameObject.AddOrGetDef <BlinkMonitor.Def>();
        gameObject.AddOrGetDef <ConversationMonitor.Def>();
        gameObject.AddOrGet <Sensors>();
        gameObject.AddOrGet <Chattable>();
        gameObject.AddOrGet <FaceGraph>();
        gameObject.AddOrGet <Accessorizer>();
        gameObject.AddOrGet <Schedulable>();
        LoopingSounds loopingSounds = gameObject.AddOrGet <LoopingSounds>();

        loopingSounds.updatePosition = true;
        gameObject.AddOrGet <AnimEventHandler>();
        FactionAlignment factionAlignment = gameObject.AddOrGet <FactionAlignment>();

        factionAlignment.Alignment = FactionManager.FactionID.Duplicant;
        gameObject.AddOrGet <Weapon>();
        gameObject.AddOrGet <RangedAttackable>();
        gameObject.AddOrGet <CharacterOverlay>();
        OccupyArea occupyArea = gameObject.AddOrGet <OccupyArea>();

        occupyArea.objectLayers         = new ObjectLayer[1];
        occupyArea.ApplyToCells         = false;
        occupyArea.OccupiedCellsOffsets = new CellOffset[2]
        {
            new CellOffset(0, 0),
            new CellOffset(0, 1)
        };
        gameObject.AddOrGet <Pickupable>();
        CreatureSimTemperatureTransfer creatureSimTemperatureTransfer = gameObject.AddOrGet <CreatureSimTemperatureTransfer>();

        creatureSimTemperatureTransfer.SurfaceArea = 10f;
        creatureSimTemperatureTransfer.Thickness   = 0.01f;
        gameObject.AddOrGet <SicknessTrigger>();
        gameObject.AddOrGet <ClothingWearer>();
        gameObject.AddOrGet <SuitEquipper>();
        DecorProvider decorProvider = gameObject.AddOrGet <DecorProvider>();

        decorProvider.baseRadius = 3f;
        decorProvider.isMovable  = true;
        gameObject.AddOrGet <ConsumableConsumer>();
        gameObject.AddOrGet <NoiseListener>();
        gameObject.AddOrGet <MinionResume>();
        DuplicantNoiseLevels.SetupNoiseLevels();
        SetupLaserEffects(gameObject);
        SymbolOverrideController symbolOverrideController = SymbolOverrideControllerUtil.AddToPrefab(gameObject);

        symbolOverrideController.applySymbolOverridesEveryFrame = true;
        ConfigureSymbols(gameObject);
        return(gameObject);
    }
 public override void InitializeStates(out BaseState default_state)
 {
     base.serializable = true;
     default_state     = closed;
     root.Update("RefreshIsBlocked", delegate(Instance smi, float dt)
     {
         smi.RefreshIsBlocked();
     }, UpdateRate.SIM_200ms, false).ParamTransition(isSealed, Sealed.closed, GameStateMachine <Controller, Instance, Door, object> .IsTrue);
     closeblocked.PlayAnim("open").ParamTransition(isOpen, open, GameStateMachine <Controller, Instance, Door, object> .IsTrue).ParamTransition(isBlocked, closedelay, GameStateMachine <Controller, Instance, Door, object> .IsFalse);
     closedelay.PlayAnim("open").ScheduleGoTo(0.5f, closing).ParamTransition(isOpen, open, GameStateMachine <Controller, Instance, Door, object> .IsTrue)
     .ParamTransition(isBlocked, closeblocked, GameStateMachine <Controller, Instance, Door, object> .IsTrue);
     closing.ParamTransition(isBlocked, closeblocked, GameStateMachine <Controller, Instance, Door, object> .IsTrue).ToggleTag(GameTags.Transition).ToggleLoopingSound("Closing loop", (Instance smi) => smi.master.doorClosingSound, (Instance smi) => !string.IsNullOrEmpty(smi.master.doorClosingSound))
     .Enter("SetParams", delegate(Instance smi)
     {
         smi.master.UpdateAnimAndSoundParams(smi.master.on);
     })
     .Update(delegate(Instance smi, float dt)
     {
         if (smi.master.doorClosingSound != null)
         {
             smi.master.loopingSounds.UpdateSecondParameter(smi.master.doorClosingSound, SOUND_PROGRESS_PARAMETER, smi.Get <KBatchedAnimController>().GetPositionPercent());
         }
     }, UpdateRate.SIM_33ms, false)
     .Enter("SetActive", delegate(Instance smi)
     {
         smi.master.SetActive(true);
     })
     .Exit("SetActive", delegate(Instance smi)
     {
         smi.master.SetActive(false);
     })
     .PlayAnim("closing")
     .OnAnimQueueComplete(closed);
     open.PlayAnim("open").ParamTransition(isOpen, closeblocked, GameStateMachine <Controller, Instance, Door, object> .IsFalse).Enter("SetWorldStateOpen", delegate(Instance smi)
     {
         smi.master.SetWorldState();
     });
     closed.PlayAnim("closed").ParamTransition(isOpen, opening, GameStateMachine <Controller, Instance, Door, object> .IsTrue).ParamTransition(isLocked, locking, GameStateMachine <Controller, Instance, Door, object> .IsTrue)
     .Enter("SetWorldStateClosed", delegate(Instance smi)
     {
         smi.master.SetWorldState();
     });
     locking.PlayAnim("locked_pre").OnAnimQueueComplete(locked).Enter("SetWorldStateClosed", delegate(Instance smi)
     {
         smi.master.SetWorldState();
     });
     locked.PlayAnim("locked").ParamTransition(isLocked, unlocking, GameStateMachine <Controller, Instance, Door, object> .IsFalse);
     unlocking.PlayAnim("locked_pst").OnAnimQueueComplete(closed);
     opening.ToggleTag(GameTags.Transition).ToggleLoopingSound("Opening loop", (Instance smi) => smi.master.doorOpeningSound, (Instance smi) => !string.IsNullOrEmpty(smi.master.doorOpeningSound)).Enter("SetParams", delegate(Instance smi)
     {
         smi.master.UpdateAnimAndSoundParams(smi.master.on);
     })
     .Update(delegate(Instance smi, float dt)
     {
         if (smi.master.doorOpeningSound != null)
         {
             smi.master.loopingSounds.UpdateSecondParameter(smi.master.doorOpeningSound, SOUND_PROGRESS_PARAMETER, smi.Get <KBatchedAnimController>().GetPositionPercent());
         }
     }, UpdateRate.SIM_33ms, false)
     .Enter("SetActive", delegate(Instance smi)
     {
         smi.master.SetActive(true);
     })
     .Exit("SetActive", delegate(Instance smi)
     {
         smi.master.SetActive(false);
     })
     .PlayAnim("opening")
     .OnAnimQueueComplete(open);
     Sealed.Enter(delegate(Instance smi)
     {
         OccupyArea component = smi.master.GetComponent <OccupyArea>();
         for (int i = 0; i < component.OccupiedCellsOffsets.Length; i++)
         {
             Grid.PreventFogOfWarReveal[Grid.OffsetCell(Grid.PosToCell(smi.master.gameObject), component.OccupiedCellsOffsets[i])] = false;
         }
         smi.sm.isLocked.Set(true, smi);
         smi.master.controlState = ControlState.Locked;
         smi.master.RefreshControlState();
         if (smi.master.GetComponent <Unsealable>().facingRight)
         {
             KBatchedAnimController component2 = smi.master.GetComponent <KBatchedAnimController>();
             component2.FlipX = true;
         }
     }).Enter("SetWorldStateClosed", delegate(Instance smi)
     {
         smi.master.SetWorldState();
     }).Exit(delegate(Instance smi)
     {
         smi.sm.isLocked.Set(false, smi);
         smi.master.GetComponent <AccessControl>().controlEnabled = true;
         smi.master.controlState = ControlState.Opened;
         smi.master.RefreshControlState();
         smi.sm.isOpen.Set(true, smi);
         smi.sm.isLocked.Set(false, smi);
         smi.sm.isSealed.Set(false, smi);
     });
     Sealed.closed.PlayAnim("sealed", KAnim.PlayMode.Once);
     Sealed.awaiting_unlock.ToggleChore((Instance smi) => CreateUnsealChore(smi, true), Sealed.chore_pst);
     Sealed.chore_pst.Enter(delegate(Instance smi)
     {
         smi.master.hasBeenUnsealed = true;
         if (smi.master.GetComponent <Unsealable>().unsealed)
         {
             smi.GoTo(opening);
             FogOfWarMask.ClearMask(Grid.CellRight(Grid.PosToCell(smi.master.gameObject)));
             FogOfWarMask.ClearMask(Grid.CellLeft(Grid.PosToCell(smi.master.gameObject)));
         }
         else
         {
             smi.GoTo(Sealed.closed);
         }
     });
 }