public static bool HandleMouse <TEntity>(Machine machine, Point16 tilePos, Func <bool> additionalCondition) where TEntity : MachineEntity { if (MiscUtils.TryGetTileEntity(tilePos, out TEntity entity) && additionalCondition()) { TechMod instance = TechMod.Instance; string name = tileToStructureName[instance.TileType(machine.Name)]; UserInterface ui = instance.machineLoader.GetInterface(name); //Force the current one to close if another one of the same type is going to be opened if (ui.CurrentState is MachineUI mui && mui.UIEntity.Position != tilePos) { instance.machineLoader.HideUI(mui.MachineName); } if (ui.CurrentState == null) { instance.machineLoader.ShowUI(name, entity); } else { instance.machineLoader.HideUI(name); } return(true); } return(false); }
public static void UpdateOutputSlot(MachineGasID intendedGas, Item input, Item output, ref float storedGas) { if (storedGas <= 0 || input.IsAir) { return; } //Check that the output is either 1) air or 2) is storing the same type of gas as "intendedGas" if (output.IsAir || (output.modItem is Capsule capsule && capsule.GasType == intendedGas)) { do { if (output.IsAir) { output.SetDefaults(TechMod.GetCapsuleType(intendedGas)); output.stack = 0; } input.stack--; if (input.stack == 0) { input.TurnToAir(); } output.stack++; storedGas--; }while(!input.IsAir && storedGas > 0); } }
public static bool TryPlaceGasInMachine <T>(Machine machine, Point16 pos) where T : MachineEntity, IGasMachine { Tile tile = Framing.GetTileSafely(pos); Point16 orig = pos - tile.TileCoord(); if (MiscUtils.TryGetTileEntity(orig, out T entity) && entity.GasPlaceDelay <= 0) { if (!(Main.LocalPlayer.HeldItem.modItem is Capsule capsule)) { return(false); } var id = capsule.GasType; if (id == MachineGasID.None) { return(false); } //null validTypes means any gas can be put in the slot int index; if (id == MachineGasID.None || (index = Array.FindIndex(entity.GasEntries, entry => entry.isInput && (entry.validTypes is null || Array.Exists(entry.validTypes, t => t == id)))) == -1 || (entity.GasEntries[index].id != MachineGasID.None && entity.GasEntries[index].id != id)) { return(false); } var use = entity.GasEntries[index]; if (use.current + 1 > use.max) { return(false); } if (use.id == MachineGasID.None) { use.id = id; } use.current += 1; if (use.current > use.max) { use.current = use.max; } entity.GasPlaceDelay = ElectrolyzerEntity.MaxPlaceDelay; Main.PlaySound(SoundID.Splash, TileEntityCenter(entity, machine.Type)); Main.LocalPlayer.HeldItem.stack--; Main.LocalPlayer.QuickSpawnItem(TechMod.GetCapsuleType(MachineGasID.None)); //Success return(true); } return(false); }
public override void SetDefaults() { item.rare = ItemRarityID.Blue; item.value = Item.sellPrice(silver: 1); TechMod.VialDefaults(item); }
public override void SetDefaults() { item.rare = ItemRarityID.White; item.value = Item.sellPrice(copper: 80); TechMod.VialDefaults(item); }