private static bool Prefix(Game __instance, GameObject go) { if (!(bool)EasierBuildingsState.StateManager.State.ExtraPipeOutputs) { return(true); } go.GetComponent <KPrefabID>().AddTag(RoomConstraints.ConstraintTags.IndustrialMachinery, false); Storage defaultStorage = BuildingTemplates.CreateDefaultStorage(go, false); defaultStorage.SetDefaultStoredItemModifiers(Storage.StandardSealedStorage); go.AddOrGet <WaterPurifier>(); //ManualDeliveryKG manualDeliveryKg1 = go.AddComponent<ManualDeliveryKG>(); //manualDeliveryKg1.SetStorage(defaultStorage); //manualDeliveryKg1.choreTypeIDHash = Db.Get().ChoreTypes.MachineFetch.IdHash; //manualDeliveryKg1.requestedItemTag = new Tag("Dirt"); //manualDeliveryKg1.capacity = 136.5f; //manualDeliveryKg1.refillMass = 19.5f; ManualDeliveryKG manualDeliveryKg2 = go.AddComponent <ManualDeliveryKG>(); manualDeliveryKg2.SetStorage(defaultStorage); manualDeliveryKg2.choreTypeIDHash = Db.Get().ChoreTypes.MachineFetch.IdHash; manualDeliveryKg2.requestedItemTag = new Tag("Phosphorite"); manualDeliveryKg2.capacity = 6f * 54.6f; manualDeliveryKg2.refillMass = 6f * 7.8f; ConduitConsumer conduitConsumer = go.AddOrGet <ConduitConsumer>(); conduitConsumer.conduitType = ConduitType.Liquid; conduitConsumer.consumptionRate = 10f; conduitConsumer.capacityTag = ElementLoader.FindElementByHash(SimHashes.DirtyWater).tag; conduitConsumer.capacityKG = 3.12f; conduitConsumer.wrongElementResult = ConduitConsumer.WrongElementResult.Dump; conduitConsumer.forceAlwaysSatisfied = true; ElementConverter elementConverter = go.AddOrGet <ElementConverter>(); elementConverter.consumedElements = new ElementConverter.ConsumedElement[] { new ElementConverter.ConsumedElement(new Tag("DirtyWater"), 6f * (0.039f + 0.065f)), //new ElementConverter.ConsumedElement(new Tag("Dirt"), 0.065f), new ElementConverter.ConsumedElement(new Tag("Phosphorite"), 6f * 0.026f) }; elementConverter.outputElements = new ElementConverter.OutputElement[] { new ElementConverter.OutputElement(6f * 0.12f, SimHashes.Fertilizer, 323.15f, false, true, 0.0f, 0.5f, 1f, byte.MaxValue, 0), new ElementConverter.OutputElement(6f * 0.01f, SimHashes.Methane, 323.15f, false, true, 0.0f, 0.5f, 1f, byte.MaxValue, 0) }; //BuildingElementEmitter buildingElementEmitter = go.AddOrGet<BuildingElementEmitter>(); //buildingElementEmitter.emitRate = 0.01f; //buildingElementEmitter.temperature = 349.15f; //buildingElementEmitter.element = SimHashes.Methane; //buildingElementEmitter.modifierOffset = new Vector2(2f, 2f); ConduitDispenser conduitDispenser = go.AddOrGet <ConduitDispenser>(); conduitDispenser.conduitType = ConduitType.Gas; conduitDispenser.invertElementFilter = true; conduitDispenser.elementFilter = new SimHashes[] { SimHashes.Dirt, SimHashes.Phosphorite, SimHashes.DirtyWater }; ElementDropper elementDropper = go.AddComponent <ElementDropper>(); elementDropper.emitMass = 6f * 10f; elementDropper.emitTag = new Tag("Fertilizer"); elementDropper.emitOffset = new Vector3(0.0f, 1f, 0.0f); Prioritizable.AddRef(go); return(false); }
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) { go.GetComponent <KPrefabID>().AddTag(RoomConstraints.ConstraintTags.IndustrialMachinery, false); go.AddOrGet <PipedRustDeoxidizer>().maxMass = 1.8f; Storage storage = go.AddOrGet <Storage>(); storage.SetDefaultStoredItemModifiers(Storage.StandardSealedStorage); storage.showInUI = true; MultiOutput multiOut = go.AddOrGet <MultiOutput>(); SimHashes[] filter = new SimHashes[1] { SimHashes.Oxygen }; multiOut.AddOutputPort(ConduitType.Gas, new CellOffset(1, 1), PortIconColors.Oxygen, false, filter, false); filter = new SimHashes[1] { SimHashes.ChlorineGas }; multiOut.AddOutputPort(ConduitType.Gas, new CellOffset(0, 1), PortIconColors.ChlorineGas, false, filter, false); //MultiInput multiIn = go.AddOrGet<MultiInput>(); //InputPort in1 = multiIn.AddInputPort(ConduitType.Gas, new CellOffset(1, 0), PortIconColors.NaturalGas, 1f, 2f, new Tag("Methane"), true); //InputPort in2 = multiIn.AddInputPort(ConduitType.Gas, new CellOffset(0, 0), PortIconColors.Hydrogen, 1f, 3f, new Tag("Hydrogen"), true); //in1.RequiresConnection = false; ManualDeliveryKG manualDeliveryKG = go.AddOrGet <ManualDeliveryKG>(); manualDeliveryKG.SetStorage(storage); manualDeliveryKG.requestedItemTag = new Tag("Rust"); manualDeliveryKG.capacity = 585f; manualDeliveryKG.refillMass = 193.05f; manualDeliveryKG.choreTypeIDHash = Db.Get().ChoreTypes.FetchCritical.IdHash; ManualDeliveryKG manualDeliveryKG2 = go.AddComponent <ManualDeliveryKG>(); manualDeliveryKG2.SetStorage(storage); manualDeliveryKG2.requestedItemTag = new Tag("Salt"); manualDeliveryKG2.capacity = 195f; manualDeliveryKG2.refillMass = 64.3500061f; manualDeliveryKG2.allowPause = true; manualDeliveryKG2.choreTypeIDHash = Db.Get().ChoreTypes.FetchCritical.IdHash; ElementConverter elementConverter = go.AddOrGet <ElementConverter>(); //elementConverter.consumedElements = new ElementConverter.ConsumedElement[2] //{ // new ElementConverter.ConsumedElement(new Tag("Methane"), 0.1f), // new ElementConverter.ConsumedElement(new Tag("Hydrogen"), 0.1f) //}; elementConverter.consumedElements = new ElementConverter.ConsumedElement[2] { new ElementConverter.ConsumedElement(new Tag("Rust"), RUST_KG_CONSUMPTION_RATE), new ElementConverter.ConsumedElement(new Tag("Salt"), SALT_KG_CONSUMPTION_RATE) }; elementConverter.outputElements = new ElementConverter.OutputElement[3] { new ElementConverter.OutputElement(1.8f, SimHashes.Oxygen, OXYGEN_TEMPERATURE, false, true, 0.0f, 1f, 1f, byte.MaxValue, 0), new ElementConverter.OutputElement(1f, SimHashes.ChlorineGas, OXYGEN_TEMPERATURE, false, true, 0.0f, 1f, 1f, byte.MaxValue, 0), new ElementConverter.OutputElement(IRON_CONVERSION_RATIO, SimHashes.IronOre, OXYGEN_TEMPERATURE, false, true, 0.0f, 1f, 1f, byte.MaxValue, 0) }; //elementConverter.outputElements = new ElementConverter.OutputElement[3] //{ // new ElementConverter.OutputElement(OXYGEN_CONVERSION_RATIO, SimHashes.Oxygen, OXYGEN_TEMPERATURE, false, true, 0.0f, 1f, 1f, byte.MaxValue, 0), // new ElementConverter.OutputElement(CHLORINE_CONVERSION_RATIO, SimHashes.ChlorineGas, OXYGEN_TEMPERATURE, false, true, 0.0f, 1f, 1f, byte.MaxValue, 0), // new ElementConverter.OutputElement(IRON_CONVERSION_RATIO, SimHashes.IronOre, OXYGEN_TEMPERATURE, false, true, 0.0f, 1f, 1f, byte.MaxValue, 0) //}; ElementDropper elementDropper = go.AddComponent <ElementDropper>(); elementDropper.emitMass = 24f; elementDropper.emitTag = SimHashes.IronOre.CreateTag(); elementDropper.emitOffset = new Vector3(0.0f, 1f, 0.0f); Prioritizable.AddRef(go); }
protected override void ApplyTrait(GameObject go) { var reduction_factor = 4; var consumptionRate = 0.2f / reduction_factor; var outputKgPerSecond = 0.2f / reduction_factor; if (//go.GetComponent<GeneticTraitComponent>().IsBaby() || go.GetComponent <GeneticTraitComponent>().IsAdult() //||go.GetComponent<GeneticTraitComponent>().IsEgg() ) { Util.Shuffle(Possible_Inputs); element_input = Possible_Inputs.First(); Util.Shuffle(Possible_Outputs); List <SimHashes> complete_list = Possible_Outputs.Where(x => x != element_input).ToList(); element_output = complete_list.First(); element_input = SimHashes.ContaminatedOxygen; element_output = SimHashes.Hydrogen; var element1 = ElementLoader.FindElementByHash(element_input); var element2 = ElementLoader.FindElementByHash(element_output); var string_holder = go.AddComponent <StringHolderComponent>(); string_holder.text = "This critter skin absorbs small quantities of " + element1.name + " and drops " + element2.name; string_holder.id = ID; go.AddOrGet <Storage>().capacityKg = 10f; ElementConsumer elementConsumer = (ElementConsumer)go.AddOrGet <PassiveElementConsumer>(); elementConsumer.elementToConsume = element_input; elementConsumer.consumptionRate = consumptionRate; elementConsumer.capacityKG = 10f; elementConsumer.consumptionRadius = (byte)3; elementConsumer.showInStatusPanel = true; elementConsumer.sampleCellOffset = new Vector3(0.0f, 0.0f, 0.0f); elementConsumer.isRequired = false; elementConsumer.storeOnConsume = true; elementConsumer.showDescriptor = false; elementConsumer.EnableConsumption(true); if (element2.IsGas) { DebugHelper.Log("element2.IsGas"); go.AddOrGet <UpdateElementConsumerPosition>(); ElementConverter elementConverter = go.AddOrGet <ElementConverter>(); elementConverter.consumedElements = new ElementConverter.ConsumedElement[1] { new ElementConverter.ConsumedElement(element_input.CreateTag(), consumptionRate) }; elementConverter.outputElements = new ElementConverter.OutputElement[1] { new ElementConverter.OutputElement(outputKgPerSecond, element_output, 0.0f, true, false, 0.0f, 0.5f, 1f, byte.MaxValue, 0) }; } if (element2.IsLiquid) { DebugHelper.Log("element2.IsLiquid"); go.AddOrGet <UpdateElementConsumerPosition>(); BubbleSpawner bubbleSpawner = go.AddComponent <BubbleSpawner>(); bubbleSpawner.element = element_output; bubbleSpawner.emitMass = 2f; bubbleSpawner.emitVariance = 0.5f; bubbleSpawner.initialVelocity = (Vector2) new Vector2f(0, 1); ElementConverter elementConverter = go.AddOrGet <ElementConverter>(); elementConverter.consumedElements = new ElementConverter.ConsumedElement[1] { new ElementConverter.ConsumedElement(element_input.CreateTag(), consumptionRate) }; elementConverter.outputElements = new ElementConverter.OutputElement[1] { new ElementConverter.OutputElement(outputKgPerSecond, element_output, 0.0f, true, true, 0.0f, 0.5f, 1f, byte.MaxValue, 0) }; } if (element2.IsSolid) { DebugHelper.Log("element2.IsSolid"); go.AddOrGet <UpdateElementConsumerPosition>(); ElementDropper elementDropper = go.AddComponent <ElementDropper>(); elementDropper.emitMass = 2f; elementDropper.emitTag = element_output.CreateTag(); elementDropper.emitOffset = new Vector3(0.0f, 0.0f, 0.0f); ElementConverter elementConverter = go.AddOrGet <ElementConverter>(); elementConverter.consumedElements = new ElementConverter.ConsumedElement[1] { new ElementConverter.ConsumedElement(element_input.CreateTag(), consumptionRate) }; elementConverter.outputElements = new ElementConverter.OutputElement[1] { new ElementConverter.OutputElement(outputKgPerSecond, element_output, 0.0f, true, true, 0.0f, 0.5f, 1f, byte.MaxValue, 0) }; } } }
public override void ConfigureBuildingTemplate(GameObject go, Tag prefab_tag) { go.AddOrGet <LoopingSounds>(); Prioritizable.AddRef(go); Storage storage = BuildingTemplates.CreateDefaultStorage(go); storage.showInUI = true; storage.capacityKg = 20000f; storage.SetDefaultStoredItemModifiers(Storage.StandardSealedStorage); ConduitDispenser conduitDispenser = go.AddOrGet <ConduitDispenser>(); conduitDispenser.conduitType = ConduitType.Gas; conduitDispenser.invertElementFilter = false; conduitDispenser.elementFilter = new SimHashes[1] { SimHashes.Oxygen }; ElementConsumer elementConsumer = go.AddOrGet <ElementConsumer>(); elementConsumer.elementToConsume = SimHashes.CarbonDioxide; elementConsumer.consumptionRate = 1000f; elementConsumer.consumptionRadius = 10; elementConsumer.showInStatusPanel = true; elementConsumer.sampleCellOffset = new Vector3(0f, 0f, 0f); elementConsumer.isRequired = false; elementConsumer.storeOnConsume = true; elementConsumer.showDescriptor = false; ElementDropper elementDropper = go.AddComponent <ElementDropper>(); elementDropper.emitMass = 100f; elementDropper.emitTag = new Tag("Carbon"); elementDropper.emitOffset = new Vector3(0f, 0f, 0f); ElementConverter elementConverter = go.AddOrGet <ElementConverter>(); elementConverter.consumedElements = new ElementConverter.ConsumedElement[] { new ElementConverter.ConsumedElement(new Tag("Filter"), 0.1f), new ElementConverter.ConsumedElement(new Tag("CarbonDioxide"), 1.0f) }; elementConverter.outputElements = new ElementConverter.OutputElement[] { new ElementConverter.OutputElement(0.27f, SimHashes.Carbon, 0f, true, 0f, 0.5f, false, 0f, byte.MinValue), new ElementConverter.OutputElement(0.73f, SimHashes.Oxygen, 0f, true, 0f, 0f, false, 0f, byte.MinValue) }; ManualDeliveryKG manualDeliveryKG = go.AddOrGet <ManualDeliveryKG>(); manualDeliveryKG.SetStorage(storage); manualDeliveryKG.requestedItemTag = new Tag("Filter"); manualDeliveryKG.capacity = 100f; manualDeliveryKG.refillMass = 1f; manualDeliveryKG.choreTypeIDHash = Db.Get().ChoreTypes.FetchCritical.IdHash; CoalScrubberPiped coalScrubber = go.AddOrGet <CoalScrubberPiped>(); coalScrubber.filterTag = new Tag("Filter"); go.AddOrGet <KBatchedAnimController>().randomiseLoopedOffset = true; }
public override void ConfigureBuildingTemplate(GameObject go, Tag prefab_tag) { go.AddOrGet <LoopingSounds>(); go.AddOrGet <DropAllWorkable>(); Prioritizable.AddRef(go); List <Storage.StoredItemModifier> mod = new List <Storage.StoredItemModifier> { Storage.StoredItemModifier.Hide, Storage.StoredItemModifier.Insulate, Storage.StoredItemModifier.Preserve, Storage.StoredItemModifier.Seal }; Storage storage = BuildingTemplates.CreateDefaultStorage(go); storage.SetDefaultStoredItemModifiers(mod); storage.showInUI = true; storage.capacityKg = 20000f; storage.SetDefaultStoredItemModifiers(Storage.StandardSealedStorage); ElementConsumer elementConsumer = go.AddOrGet <ElementConsumer>(); elementConsumer.elementToConsume = SimHashes.Methane; elementConsumer.consumptionRate = 1000f; elementConsumer.consumptionRadius = 10; elementConsumer.showInStatusPanel = true; elementConsumer.sampleCellOffset = new Vector3(0f, 0f, 0f); elementConsumer.isRequired = false; elementConsumer.storeOnConsume = true; elementConsumer.showDescriptor = false; ElementDropper elementDropper = go.AddComponent <ElementDropper>(); elementDropper.emitMass = 100f; elementDropper.emitTag = new Tag("SolidMethane"); elementDropper.emitOffset = new Vector3(0f, 0f, 0f); ElementConverter elementConverter = go.AddOrGet <ElementConverter>(); elementConverter.consumedElements = new ElementConverter.ConsumedElement[] { new ElementConverter.ConsumedElement(new Tag("Ice"), 1f), new ElementConverter.ConsumedElement(new Tag("Methane"), 1.0f) }; elementConverter.outputElements = new ElementConverter.OutputElement[] { new ElementConverter.OutputElement(1.0f, SimHashes.SolidMethane, 50.15f, storeOutput: true, 0f, 0f, apply_input_temperature: false, diseaseWeight: 0f, addedDiseaseIdx: byte.MinValue) }; ManualDeliveryKG manualDeliveryKG = go.AddOrGet <ManualDeliveryKG>(); manualDeliveryKG.SetStorage(storage); manualDeliveryKG.requestedItemTag = new Tag("Ice"); manualDeliveryKG.capacity = 1000f; manualDeliveryKG.refillMass = 10f; manualDeliveryKG.choreTypeIDHash = Db.Get().ChoreTypes.FetchCritical.IdHash; NaturalGasScrubber NaturalGasScrubber = go.AddOrGet <NaturalGasScrubber>(); NaturalGasScrubber.filterTag = new Tag("Ice"); go.AddOrGet <KBatchedAnimController>().randomiseLoopedOffset = true; }