Exemple #1
0
    public override void ConfigureBuildingTemplate(GameObject go, Tag prefab_tag)
    {
        GeneratedBuildings.MakeBuildingAlwaysOperational(go);
        BuildingConfigManager.Instance.IgnoreDefaultKComponent(typeof(RequiresFoundation), prefab_tag);
        SimCellOccupier simCellOccupier = go.AddOrGet <SimCellOccupier>();

        simCellOccupier.doReplaceElement = true;
        simCellOccupier.notifyOnMelt     = true;
        go.AddOrGet <TileTemperature>();
        go.AddOrGet <WildFarmTile>();
        Storage storage = BuildingTemplates.CreateDefaultStorage(go);

        storage.SetDefaultStoredItemModifiers(Storage.StandardSealedStorage);
        PlantablePlot plantablePlot = go.AddOrGet <PlantablePlot>();

        plantablePlot.occupyingObjectRelativePosition = new Vector3(0f, 1f, 0f);
        plantablePlot.AddDepositTag(GameTags.CropSeed);
        plantablePlot.AddDepositTag(GameTags.WaterSeed);
        plantablePlot.SetFertilizationFlags(fertilizer: false, liquid_piping: false);
        CopyBuildingSettings copyBuildingSettings = go.AddOrGet <CopyBuildingSettings>();

        copyBuildingSettings.copyGroupTag = GameTags.Farm;
        go.AddOrGet <AnimTileable>();
        Prioritizable.AddRef(go);

        // turn off irrigation
        FieldInfo fi = typeof(PlantablePlot).GetField("accepts_irrigation", BindingFlags.NonPublic | BindingFlags.Instance);

        fi.SetValue(plantablePlot, false);
    }
Exemple #2
0
    private void OnSolidChanged(HandleVector <int> .Handle h)
    {
        Data            data      = GetData(h);
        SimCellOccupier component = data.go.GetComponent <SimCellOccupier>();

        if ((UnityEngine.Object)component == (UnityEngine.Object)null || component.IsReady())
        {
            Rotatable   component2  = data.go.GetComponent <Rotatable>();
            Orientation orientation = ((UnityEngine.Object)component2 != (UnityEngine.Object)null) ? component2.GetOrientation() : Orientation.Neutral;
            bool        is_solid    = BuildingDef.CheckFoundation(data.cell, orientation, data.buildRule, data.width, data.height);
            UpdateSolidState(is_solid, ref data);
            SetData(h, data);
        }
    }
    public override void ConfigureBuildingTemplate(GameObject go, Tag prefab_tag)
    {
        GeneratedBuildings.MakeBuildingAlwaysOperational(go);
        BuildingConfigManager.Instance.IgnoreDefaultKComponent(typeof(RequiresFoundation), prefab_tag);
        SimCellOccupier simCellOccupier = go.AddOrGet <SimCellOccupier>();

        simCellOccupier.doReplaceElement = true;
        go.AddOrGet <TileTemperature>();
        KAnimGridTileVisualizer kAnimGridTileVisualizer = go.AddOrGet <KAnimGridTileVisualizer>();

        kAnimGridTileVisualizer.blockTileConnectorID = BlockTileConnectorID;
        BuildingHP buildingHP = go.AddOrGet <BuildingHP>();

        buildingHP.destroyOnDamaged = true;
    }
Exemple #4
0
        public override void ConfigureBuildingTemplate(GameObject go, Tag prefab_tag)
        {
            GeneratedBuildings.MakeBuildingAlwaysOperational(go);
            BuildingConfigManager.Instance.IgnoreDefaultKComponent(typeof(RequiresFoundation), prefab_tag);
            SimCellOccupier simCellOccupier = go.AddOrGet <SimCellOccupier>();

            simCellOccupier.movementSpeedMultiplier = DUPLICANTSTATS.MOVEMENT.PENALTY_3;
            simCellOccupier.notifyOnMelt            = true;
            go.AddOrGet <TileTemperature>();
            KAnimGridTileVisualizer kAnimGridTileVisualizer = go.AddOrGet <KAnimGridTileVisualizer>();

            kAnimGridTileVisualizer.blockTileConnectorID = MetalTileConfig.BlockTileConnectorID;
            BuildingHP buildingHP = go.AddOrGet <BuildingHP>();

            buildingHP.destroyOnDamaged = true;
        }
    protected override void OnCompleteWork(Worker worker)
    {
        PrimaryElement  component  = GetComponent <PrimaryElement>();
        Building        building   = GetComponent <Building>();
        SimCellOccupier component2 = GetComponent <SimCellOccupier>();

        if ((UnityEngine.Object)DetailsScreen.Instance != (UnityEngine.Object)null && DetailsScreen.Instance.CompareTargetWith(base.gameObject))
        {
            DetailsScreen.Instance.Show(false);
        }
        float temperature   = component.Temperature;
        byte  disease_idx   = component.DiseaseIdx;
        int   disease_count = component.DiseaseCount;

        if ((UnityEngine.Object)component2 != (UnityEngine.Object)null)
        {
            if (building.Def.TileLayer != ObjectLayer.NumLayers)
            {
                int num = Grid.PosToCell(base.transform.GetPosition());
                if ((UnityEngine.Object)Grid.Objects[num, (int)building.Def.TileLayer] == (UnityEngine.Object)base.gameObject)
                {
                    Grid.Objects[num, (int)building.Def.ObjectLayer] = null;
                    Grid.Objects[num, (int)building.Def.TileLayer]   = null;
                    Grid.Foundation[num] = false;
                    TileVisualizer.RefreshCell(num, building.Def.TileLayer, building.Def.ReplacementLayer);
                }
            }
            component2.DestroySelf(delegate
            {
                TriggerDestroy(building, temperature, disease_idx, disease_count);
            });
        }
        else
        {
            TriggerDestroy(building, temperature, disease_idx, disease_count);
        }
        string sound = GlobalAssets.GetSound("Finish_Deconstruction_" + building.Def.AudioSize, false);

        if (sound != null)
        {
            KMonoBehaviour.PlaySound3DAtLocation(sound, base.gameObject.transform.GetPosition());
        }
        Trigger(-702296337, this);
    }
Exemple #6
0
        public override void ConfigureBuildingTemplate(GameObject go, Tag prefab_tag)
        {
            GeneratedBuildings.MakeBuildingAlwaysOperational(go);
            BuildingConfigManager.Instance.IgnoreDefaultKComponent(typeof(RequiresFoundation), prefab_tag);
            SimCellOccupier simCellOccupier = go.AddOrGet <SimCellOccupier>();

            simCellOccupier.doReplaceElement = true;
            simCellOccupier.notifyOnMelt     = true;
            go.AddOrGet <TileTemperature>();
            BuildingTemplates.CreateDefaultStorage(go, false).SetDefaultStoredItemModifiers(Storage.StandardSealedStorage);
            PlantablePlot plantablePlot = go.AddOrGet <PlantablePlot>();

            plantablePlot.occupyingObjectRelativePosition = new Vector3(0.0f, 1f, 0.0f);
            plantablePlot.AddDepositTag(GameTags.CropSeed);
            plantablePlot.AddDepositTag(GameTags.WaterSeed);
            plantablePlot.SetFertilizationFlags(true, false);
            go.AddOrGet <CopyBuildingSettings>().copyGroupTag = GameTags.Farm;
            go.AddOrGet <AnimTileable>();
            Prioritizable.AddRef(go);
        }
Exemple #7
0
    protected override void OnCompleteWork(Worker worker)
    {
        float num  = 0f;
        float num2 = 0f;
        bool  flag = true;

        foreach (GameObject item in storage.items)
        {
            if (!((UnityEngine.Object)item == (UnityEngine.Object)null))
            {
                PrimaryElement component = item.GetComponent <PrimaryElement>();
                if (!((UnityEngine.Object)component == (UnityEngine.Object)null))
                {
                    num  += component.Mass;
                    num2 += component.Temperature * component.Mass;
                    flag  = (flag && component.HasTag(GameTags.Liquifiable));
                }
            }
        }
        if (num <= 0f)
        {
            DebugUtil.LogWarningArgs(base.gameObject, "uhhh this constructable is about to generate a nan", "Item Count: ", storage.items.Count);
        }
        else
        {
            if (flag)
            {
                initialTemperature = Mathf.Min(num2 / num, 318.15f);
            }
            else
            {
                initialTemperature = Mathf.Clamp(num2 / num, 288.15f, 318.15f);
            }
            KAnimGraphTileVisualizer component2  = GetComponent <KAnimGraphTileVisualizer>();
            UtilityConnections       connections = (!((UnityEngine.Object)component2 == (UnityEngine.Object)null)) ? component2.Connections : ((UtilityConnections)0);
            if (IsReplacementTile)
            {
                int        cell = Grid.PosToCell(base.transform.GetLocalPosition());
                GameObject replacementCandidate = building.Def.GetReplacementCandidate(cell);
                if ((UnityEngine.Object)replacementCandidate != (UnityEngine.Object)null)
                {
                    SimCellOccupier component3 = replacementCandidate.GetComponent <SimCellOccupier>();
                    if ((UnityEngine.Object)component3 != (UnityEngine.Object)null)
                    {
                        component3.DestroySelf(delegate
                        {
                            if ((UnityEngine.Object) this != (UnityEngine.Object)null && (UnityEngine.Object)base.gameObject != (UnityEngine.Object)null)
                            {
                                FinishConstruction(connections);
                            }
                        });
                    }
                    else
                    {
                        Conduit component4 = replacementCandidate.GetComponent <Conduit>();
                        if ((UnityEngine.Object)component4 != (UnityEngine.Object)null)
                        {
                            ConduitFlow flowManager = component4.GetFlowManager();
                            flowManager.MarkForReplacement(cell);
                        }
                        BuildingComplete component5 = replacementCandidate.GetComponent <BuildingComplete>();
                        if ((UnityEngine.Object)component5 != (UnityEngine.Object)null)
                        {
                            component5.Subscribe(-21016276, delegate
                            {
                                FinishConstruction(connections);
                            });
                        }
                        else
                        {
                            Debug.LogWarning("Why am I trying to replace a: " + replacementCandidate.name);
                            FinishConstruction(connections);
                        }
                    }
                    KAnimGraphTileVisualizer component6 = replacementCandidate.GetComponent <KAnimGraphTileVisualizer>();
                    if ((UnityEngine.Object)component6 != (UnityEngine.Object)null)
                    {
                        component6.skipCleanup = true;
                    }
                    PrimaryElement component7   = replacementCandidate.GetComponent <PrimaryElement>();
                    float          mass         = component7.Mass;
                    float          temperature  = component7.Temperature;
                    byte           diseaseIdx   = component7.DiseaseIdx;
                    int            diseaseCount = component7.DiseaseCount;
                    Debug.Assert(component7.Element != null && component7.Element.tag != (Tag)null);
                    Deconstructable.SpawnItem(component7.transform.GetPosition(), component7.GetComponent <Building>().Def, component7.Element.tag, mass, temperature, diseaseIdx, diseaseCount);
                    replacementCandidate.Trigger(1606648047, building.Def.TileLayer);
                    replacementCandidate.DeleteObject();
                }
            }
            else
            {
                FinishConstruction(connections);
            }
            PopFXManager.Instance.SpawnFX(PopFXManager.Instance.sprite_Building, GetComponent <KSelectable>().GetName(), base.transform, 1.5f, false);
        }
    }