public override void ConfigureBuildingTemplate(GameObject go, Tag prefab_tag)
        {
            Storage storage1 = go.AddOrGet <Storage>();

            storage1.showInUI = true;

            Storage storage2 = go.AddComponent <Storage>();

            storage2.capacityKg = 5f;
            storage2.showInUI   = true;
            storage2.SetDefaultStoredItemModifiers(PollutedWaterStorageModifiers);
            storage2.allowItemRemoval = false;
            storage2.storageFilters   = new List <Tag> {
                SimHashes.Algae.CreateTag(), SimHashes.CarbonDioxide.CreateTag()
            };

            ManualDeliveryKG manualDeliveryKg1 = go.AddOrGet <ManualDeliveryKG>();

            manualDeliveryKg1.SetStorage(storage1);
            manualDeliveryKg1.requestedItemTag = SimHashes.Fertilizer.CreateTag();
            manualDeliveryKg1.capacity         = 90f;
            manualDeliveryKg1.refillMass       = 18f;
            manualDeliveryKg1.choreTypeIDHash  = Db.Get().ChoreTypes.OperateFetch.IdHash;

            ManualDeliveryKG manualDeliveryKg2 = go.AddComponent <ManualDeliveryKG>();

            manualDeliveryKg2.SetStorage(storage1);
            manualDeliveryKg2.requestedItemTag = SimHashes.Water.CreateTag();
            manualDeliveryKg2.capacity         = 360f;
            manualDeliveryKg2.refillMass       = 72f;
            manualDeliveryKg2.allowPause       = true;
            manualDeliveryKg2.choreTypeIDHash  = Db.Get().ChoreTypes.OperateFetch.IdHash;

            AlgaeGrower algaeHabitat = go.AddOrGet <AlgaeGrower>();

            algaeHabitat.pressureSampleOffset = new CellOffset(0, 1);

            ElementConverter elementConverter = go.AddComponent <ElementConverter>();

            elementConverter.consumedElements = new ElementConverter.ConsumedElement[3]
            {
                new ElementConverter.ConsumedElement(SimHashes.CarbonDioxide.CreateTag(), 0.01375f),
                new ElementConverter.ConsumedElement(SimHashes.Fertilizer.CreateTag(), 0.000625f),
                new ElementConverter.ConsumedElement(SimHashes.Water.CreateTag(), 0.005625f)
            };
            elementConverter.outputElements = new ElementConverter.OutputElement[2]
            {
                new ElementConverter.OutputElement(0.005f, SimHashes.Oxygen, 303.15f, false, 0.0f, 1f),
                new ElementConverter.OutputElement(0.015f, SimHashes.Algae, 303.15f, true, 0.0f, 1f)
            };

            ElementDropper elementDropper = go.AddComponent <ElementDropper>();

            elementDropper.emitMass = 5;
            elementDropper.emitTag  = SimHashes.Algae.CreateTag();

            ElementConsumer elementConsumer = go.AddOrGet <ElementConsumer>();

            elementConsumer.elementToConsume  = SimHashes.CarbonDioxide;
            elementConsumer.consumptionRate   = 0.01375f;
            elementConsumer.consumptionRadius = 3;
            elementConsumer.showInStatusPanel = true;
            elementConsumer.storeOnConsume    = true;
            elementConsumer.sampleCellOffset  = new Vector3(0.0f, 1f, 0.0f);
            elementConsumer.isRequired        = true;

            PassiveElementConsumer passiveElementConsumer = go.AddComponent <PassiveElementConsumer>();

            passiveElementConsumer.elementToConsume  = SimHashes.Water;
            passiveElementConsumer.consumptionRate   = 1.2f;
            passiveElementConsumer.consumptionRadius = 1;
            passiveElementConsumer.showDescriptor    = false;
            passiveElementConsumer.storeOnConsume    = true;
            passiveElementConsumer.capacityKG        = 360f;
            passiveElementConsumer.showInStatusPanel = false;

            go.AddOrGet <AnimTileable>();

            Prioritizable.AddRef(go);
        }
        public static void ProcessPost(BuildingDef buildingDef)
        {
            float multiplier;
            bool  flag = CustomizeBuildingsState.StateManager.State.MachineMultiplier.TryGetValue(buildingDef.PrefabID, out multiplier);

            if (!flag)
            {
                flag = CustomizeBuildingsState.StateManager.State.MachineMultiplier.TryGetValue(BuildingConfigManager_RegisterBuilding.FindBetweenLink.Match(buildingDef.Name).Groups[1].Value, out multiplier);
            }
            if (flag)
            {
                ElementConverter[] converters = buildingDef.BuildingComplete.GetComponents <ElementConverter>();
                for (int j = 0; j < converters.Count(); j++)
                {
                    ElementConverter converter = converters[j];

                    for (int i = 0; i < converter.consumedElements.Count(); i++)
                    {
                        converter.consumedElements[i].massConsumptionRate *= (float)multiplier;
                    }
                    for (int i = 0; i < converter.outputElements.Count(); i++)
                    {
                        converter.outputElements[i].massGenerationRate *= (float)multiplier;
                    }
                    //converter.SetWorkSpeedMultiplier((float)multiplier);
                    Debug.Log("Multiplier: " + buildingDef.PrefabID + " x" + multiplier);
                }
                //if(converters.Count() == 0) Debug.Log("Muliplier: converter was null for " + buildingDef.PrefabID);

                Storage[] storages = buildingDef.BuildingComplete.GetComponents <Storage>();
                for (int i = 0; i < storages.Count(); i++)
                {
                    storages[i].capacityKg *= multiplier;
                }

                ManualDeliveryKG[] manualDeliveryKGs = buildingDef.BuildingComplete.GetComponents <ManualDeliveryKG>();
                for (int i = 0; i < manualDeliveryKGs.Count(); i++)
                {
                    manualDeliveryKGs[i].capacity *= multiplier;
                }

                ConduitConsumer conduitConsumer = buildingDef.BuildingComplete.GetComponent <ConduitConsumer>();
                if (conduitConsumer != null)
                {
                    conduitConsumer.capacityKG *= multiplier;
                }

                PassiveElementConsumer elementConsumer = buildingDef.BuildingComplete.GetComponent <PassiveElementConsumer>();
                if (elementConsumer != null)
                {
                    elementConsumer.consumptionRate *= multiplier;
                    elementConsumer.capacityKG      *= multiplier;
                }

                BuildingElementEmitter buildingElementEmitter = buildingDef.BuildingComplete.GetComponent <BuildingElementEmitter>();
                if (buildingElementEmitter != null)
                {
                    buildingElementEmitter.emitRate *= multiplier;
                }

                AlgaeDistillery algaeDistillery = buildingDef.BuildingComplete.GetComponent <AlgaeDistillery>();
                if (algaeDistillery != null)
                {
                    algaeDistillery.emitMass *= multiplier;
                }

                ElementDropper elementDropper = buildingDef.BuildingComplete.GetComponent <ElementDropper>();
                if (elementDropper != null)
                {
                    elementDropper.emitMass *= multiplier;
                }
            }
        }
        public override void ConfigureBuildingTemplate(GameObject go, Tag prefab_tag)
        {
            Storage storage1 = go.AddOrGet <Storage>();

            storage1.showInUI = true;

            Storage storage2 = go.AddComponent <Storage>();

            storage2.capacityKg = 5f;
            storage2.showInUI   = true;
            storage2.SetDefaultStoredItemModifiers(PollutedWaterStorageModifiers);
            storage2.allowItemRemoval = false;
            storage2.storageFilters   = new List <Tag> {
                ElementLoader.FindElementByHash(SimHashes.DirtyWater).tag
            };

            ManualDeliveryKG manualDeliveryKg1 = go.AddOrGet <ManualDeliveryKG>();

            manualDeliveryKg1.SetStorage(storage1);
            manualDeliveryKg1.requestedItemTag = new Tag("Algae");
            manualDeliveryKg1.capacity         = 90f;
            manualDeliveryKg1.refillMass       = 18f;
            manualDeliveryKg1.choreTypeIDHash  = Db.Get().ChoreTypes.OperateFetch.IdHash;

            ManualDeliveryKG manualDeliveryKg2 = go.AddComponent <ManualDeliveryKG>();

            manualDeliveryKg2.SetStorage(storage1);
            manualDeliveryKg2.requestedItemTag = new Tag("Water");
            manualDeliveryKg2.capacity         = 360f;
            manualDeliveryKg2.refillMass       = 72f;
            manualDeliveryKg2.allowPause       = true;
            manualDeliveryKg2.choreTypeIDHash  = Db.Get().ChoreTypes.OperateFetch.IdHash;

            PipedAlgaeTerrarium algaeHabitat = go.AddOrGet <PipedAlgaeTerrarium>();

            algaeHabitat.lightBonusMultiplier = 1.1f;
            algaeHabitat.pressureSampleOffset = new CellOffset(0, 1);

            ElementConverter elementConverter = go.AddComponent <ElementConverter>();

            elementConverter.consumedElements = new ElementConverter.ConsumedElement[2]
            {
                new ElementConverter.ConsumedElement(new Tag("Algae"), 0.03f),
                new ElementConverter.ConsumedElement(new Tag("Water"), 0.3f)
            };
            elementConverter.outputElements = new ElementConverter.OutputElement[2]
            {
                new ElementConverter.OutputElement(0.04f, SimHashes.Oxygen, 303.15f, false, 0.0f, 1f, false, 1f, byte.MaxValue, 0),
                new ElementConverter.OutputElement(0.2903333f, SimHashes.DirtyWater, 303.15f, true, 0.0f, 1f, false, 1f, byte.MaxValue, 0)
            };

            ConduitDispenser conduitDispenser = go.AddOrGet <ConduitDispenser>();

            conduitDispenser.conduitType         = ConduitType.Liquid;
            conduitDispenser.invertElementFilter = true;
            conduitDispenser.elementFilter       = new SimHashes[1]
            {
                SimHashes.Water
            };

            ElementConsumer elementConsumer = go.AddOrGet <ElementConsumer>();

            elementConsumer.elementToConsume  = SimHashes.CarbonDioxide;
            elementConsumer.consumptionRate   = 0.0003333333f;
            elementConsumer.consumptionRadius = (byte)3;
            elementConsumer.showInStatusPanel = true;
            elementConsumer.sampleCellOffset  = new Vector3(0.0f, 1f, 0.0f);
            elementConsumer.isRequired        = false;

            PassiveElementConsumer passiveElementConsumer = go.AddComponent <PassiveElementConsumer>();

            passiveElementConsumer.elementToConsume  = SimHashes.Water;
            passiveElementConsumer.consumptionRate   = 1.2f;
            passiveElementConsumer.consumptionRadius = (byte)1;
            passiveElementConsumer.showDescriptor    = false;
            passiveElementConsumer.storeOnConsume    = true;
            passiveElementConsumer.capacityKG        = 360f;
            passiveElementConsumer.showInStatusPanel = false;

            go.AddOrGet <AnimTileable>();

            Prioritizable.AddRef(go);
        }
    public override void ConfigureBuildingTemplate(GameObject go, Tag prefab_tag)
    {
        Storage storage = go.AddOrGet <Storage>();

        storage.showInUI = true;
        List <Tag> list = new List <Tag>();

        list.Add(SimHashes.DirtyWater.CreateTag());
        List <Tag> storageFilters = list;
        Tag        tag            = SimHashes.Algae.CreateTag();
        Tag        tag2           = SimHashes.Water.CreateTag();
        Storage    storage2       = go.AddComponent <Storage>();

        storage2.capacityKg = 360f;
        storage2.showInUI   = true;
        storage2.SetDefaultStoredItemModifiers(PollutedWaterStorageModifiers);
        storage2.allowItemRemoval = false;
        storage2.storageFilters   = storageFilters;
        ManualDeliveryKG manualDeliveryKG = go.AddOrGet <ManualDeliveryKG>();

        manualDeliveryKG.SetStorage(storage);
        manualDeliveryKG.requestedItemTag = tag;
        manualDeliveryKG.capacity         = 90f;
        manualDeliveryKG.refillMass       = 18f;
        manualDeliveryKG.choreTypeIDHash  = Db.Get().ChoreTypes.FetchCritical.IdHash;
        ManualDeliveryKG manualDeliveryKG2 = go.AddComponent <ManualDeliveryKG>();

        manualDeliveryKG2.SetStorage(storage);
        manualDeliveryKG2.requestedItemTag = tag2;
        manualDeliveryKG2.capacity         = 360f;
        manualDeliveryKG2.refillMass       = 72f;
        manualDeliveryKG2.allowPause       = true;
        manualDeliveryKG2.choreTypeIDHash  = Db.Get().ChoreTypes.FetchCritical.IdHash;
        KAnimFile[] overrideAnims = new KAnimFile[1]
        {
            Assets.GetAnim("anim_interacts_algae_terarrium_kanim")
        };
        AlgaeHabitatEmpty algaeHabitatEmpty = go.AddOrGet <AlgaeHabitatEmpty>();

        algaeHabitatEmpty.workTime      = 5f;
        algaeHabitatEmpty.overrideAnims = overrideAnims;
        algaeHabitatEmpty.workLayer     = Grid.SceneLayer.BuildingFront;
        AlgaeHabitat algaeHabitat = go.AddOrGet <AlgaeHabitat>();

        algaeHabitat.lightBonusMultiplier = 1.1f;
        algaeHabitat.pressureSampleOffset = new CellOffset(0, 1);
        ElementConverter elementConverter = go.AddComponent <ElementConverter>();

        elementConverter.consumedElements = new ElementConverter.ConsumedElement[2]
        {
            new ElementConverter.ConsumedElement(tag, 0.0300000012f),
            new ElementConverter.ConsumedElement(tag2, 0.3f)
        };
        elementConverter.outputElements = new ElementConverter.OutputElement[1]
        {
            new ElementConverter.OutputElement(0.0400000028f, SimHashes.Oxygen, 303.15f, false, false, 0f, 1f, 1f, byte.MaxValue, 0)
        };
        ElementConverter elementConverter2 = go.AddComponent <ElementConverter>();

        elementConverter2.outputElements = new ElementConverter.OutputElement[1]
        {
            new ElementConverter.OutputElement(0.290333331f, SimHashes.DirtyWater, 303.15f, false, true, 0f, 1f, 1f, byte.MaxValue, 0)
        };
        ElementConsumer elementConsumer = go.AddOrGet <ElementConsumer>();

        elementConsumer.elementToConsume  = SimHashes.CarbonDioxide;
        elementConsumer.consumptionRate   = 0.0003333333f;
        elementConsumer.consumptionRadius = 3;
        elementConsumer.showInStatusPanel = true;
        elementConsumer.sampleCellOffset  = new Vector3(0f, 1f, 0f);
        elementConsumer.isRequired        = false;
        PassiveElementConsumer passiveElementConsumer = go.AddComponent <PassiveElementConsumer>();

        passiveElementConsumer.elementToConsume  = SimHashes.Water;
        passiveElementConsumer.consumptionRate   = 1.2f;
        passiveElementConsumer.consumptionRadius = 1;
        passiveElementConsumer.showDescriptor    = false;
        passiveElementConsumer.storeOnConsume    = true;
        passiveElementConsumer.capacityKG        = 360f;
        passiveElementConsumer.showInStatusPanel = false;
        go.AddOrGet <KBatchedAnimController>().randomiseLoopedOffset = true;
        go.AddOrGet <AnimTileable>();
        Prioritizable.AddRef(go);
    }