Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
0
 public override void SetDefaults()
 {
     item.rare  = ItemRarityID.Blue;
     item.value = Item.sellPrice(silver: 1);
     TechMod.VialDefaults(item);
 }
Ejemplo n.º 5
0
 public override void SetDefaults()
 {
     item.rare  = ItemRarityID.White;
     item.value = Item.sellPrice(copper: 80);
     TechMod.VialDefaults(item);
 }