public override void Update()
        {
            if (buffer.Length == 0)
            {
                buffer = new bool[delay];
            }

            if (buffer[0])
            {
                Wiring.TripWire(base.Position.X + 2, base.Position.Y, 1, 1);
            }

            for (int i = 1; i < buffer.Length; i++)
            {
                buffer[i - 1] = buffer[i];
            }
            buffer[delay - 1] = justHit;
            justHit           = false;


            //string str = "";
            //for(int i = 0; i < buffer.Length; i++) {
            //    str += (buffer[i] ? "1" : "0") + " ";
            //}
            //Main.NewText(str);

            if (changed)
            {
                NetMessage.SendData(MessageID.TileEntitySharing, -1, -1, null, ID, Position.X, Position.Y);
                changed = false;
            }
        }
Example #2
0
        public override void Update()
        {
            if (Main.player.Any(player => Vector2.Distance(player.Center, Position.ToVector2() * 16) <= 100 && player.ActiveAbility<Wisp>()) && timer == 0)
                timer = 300;
            if (timer > 0)
            {
                timer--;
                if (timer == 299 || timer == 1)
                    Wiring.TripWire(Position.X, Position.Y, 2, 2);

                Dust.NewDust(Position.ToVector2() * 16 + new Vector2(10, 10), 2, 2, DustType<Dusts.GoldWithMovement>(), 0, 0, 0, default, timer / 300f);
        public bool deposit(Item item, Player player)
        {
            Players.RecieverChestSelector modPlayer = (Players.RecieverChestSelector)Main.LocalPlayer.GetModPlayer <Players.RecieverChestSelector>();
            Point16 topLeft = modPlayer.topLeft;

            //chest
            int chestNo = Common.AutoStacker.FindChest(topLeft.X, topLeft.Y);

            if (chestNo != -1)
            {
                //stack item
                for (int slot = 0; slot < Main.chest[chestNo].item.Length; slot++)
                {
                    if (Main.chest[chestNo].item[slot].stack == 0)
                    {
                        Main.chest[chestNo].item[slot] = item.Clone();
                        item.SetDefaults(0, true);
                        Wiring.TripWire(topLeft.X, topLeft.Y, 2, 2);
                        return(true);
                    }

                    Item chestItem = Main.chest[chestNo].item[slot];
                    if (item.IsTheSameAs(chestItem) && chestItem.stack < chestItem.maxStack)
                    {
                        int spaceLeft = chestItem.maxStack - chestItem.stack;
                        if (spaceLeft >= item.stack)
                        {
                            chestItem.stack += item.stack;
                            item.SetDefaults(0, true);
                            Wiring.TripWire(topLeft.X, topLeft.Y, 2, 2);
                            return(true);
                        }
                        else
                        {
                            item.stack     -= spaceLeft;
                            chestItem.stack = chestItem.maxStack;
                        }
                    }
                }
            }

            //storage heart
            else if (AutoStacker.modMagicStorage != null || AutoStacker.modMagicStorageExtra != null)
            {
                Common.MagicStorageConnecter.InjectItem(topLeft, item);
                if (item.stack == 0)
                {
                    item.SetDefaults(0, true);
                    return(true);
                }
            }
            return(false);
        }
Example #4
0
        public override void PostUpdate()
        {
            List <delayedTrip> temp = wireTriggerQ;

            wireTriggerQ = new List <delayedTrip>();

            foreach (var item in temp)
            {
                Wiring.TripWire(item.x, item.y, item.width, item.height);
            }
            temp.Clear();
        }
Example #5
0
        public override void Update()
        {
            if (Main.player.Any(player => Vector2.Distance(player.Center, Position.ToVector2() * 16) <= 100 && player.GetModPlayer <AbilityHandler>().wisp.Active) && timer == 0)
            {
                timer = 300;
            }
            if (timer > 0)
            {
                timer--;
                if (timer == 299 || timer == 1)
                {
                    Wiring.TripWire(Position.X, Position.Y, 2, 2);
                }

                Dust.NewDust(Position.ToVector2() * 16 + new Vector2(10, 10), 2, 2, ModContent.DustType <Dusts.Gold2>(), 0, 0, 0, default, timer / 300f);
Example #6
0
        public void ReceiveTripWire(BinaryReader reader, int from)
        {
            // TODO: Find out what happens if player 0 leaves
            if (from != 0)
            {
                return;
            }

            var x = reader.ReadInt32();
            var y = reader.ReadInt32();

            WireMod.Instance.Logger.Info($"{from} Received TripWire: x {x}, y {y}");

            Wiring.TripWire(x, y, 1, 1);
        }
        public override void RightClick(int i, int j)
        {
            if (Main.netMode == 0)
            {
                Wiring.TripWire(i, j, 1, 1);
            }
            else
            {
                ModPacket packet = NetRouter.GetPacketTo(this, mod);
                packet.Write((Int16)i);
                packet.Write((Int16)j);
                packet.Send();
            }
            mod.GetModWorld <ButtonDelayWorld>().setPoint(new Point16(i, j));

            Main.PlaySound(SoundID.MenuTick);
        }
Example #8
0
        public override bool NewRightClick(int i, int j)
        {
            if (Main.netMode == 0)
            {
                Wiring.TripWire(i, j, 1, 1);
            }
            else
            {
                ModPacket packet = NetRouter.GetPacketTo(this, mod);
                packet.Write((Int16)i);
                packet.Write((Int16)j);
                packet.Send();
            }
            ModContent.GetInstance <ButtonDelayWorld>().setPoint(new Point16(i, j));

            Main.PlaySound(SoundID.MenuTick);
            return(true);
        }
Example #9
0
 void ActivateReceiver(Point16 receiver)
 {
     if (WirelessUtils.IsReceiver(receiver))
     {
         Wiring.TripWire(receiver.X, receiver.Y, 1, 1);
         Tile tile = Main.tile[receiver.X, receiver.Y];
         if (tile.TileType == ModContent.TileType <Tiles.WirelessTransceiver>() && WirelessSystem.Links.ContainsKey(receiver))
         {
             if (WirelessUtils.IsReceiver(WirelessSystem.Links[receiver]))
             {
                 Wiring.TripWire(WirelessSystem.Links[receiver].X, WirelessSystem.Links[receiver].Y, 1, 1);
             }
         }
     }
     else
     {
         SyncRemoveLink(receiver);
     }
 }
Example #10
0
        public override void RightClick(int i, int j)
        {
            Point16 origin  = GetOrigin(i, j);
            Point16 topLeft = origin - tileObjectData.Origin;

            if (Main.netMode == 0)
            {
                Wiring.TripWire(topLeft.X, topLeft.Y, 2, 2);
            }
            else
            {
                ModPacket packet = NetRouter.GetPacketTo(this, mod);
                packet.Write(topLeft.X);
                packet.Write(topLeft.Y);
                packet.Send();
            }
            mod.GetModWorld <ButtonDelayWorld>().setPoint(topLeft);

            Main.PlaySound(SoundID.MenuTick);
        }
        public void ChangeState(bool onState, bool TripWire)
        {
            if (onState != this.On && !SanityCheck())
            {
                return;
            }

            Main.tile[base.Position.X, base.Position.Y].frameX = (short)(onState ? 18 : 0);
            this.On = onState;
            GetFrame();

            if (Main.netMode == 2)
            {
                NetMessage.SendTileSquare(-1, base.Position.X, base.Position.Y, 1, TileChangeType.None);
            }

            if (TripWire && Main.netMode != 1)
            {
                Wiring.TripWire(base.Position.X, base.Position.Y, 1, 1);
            }
        }
Example #12
0
        public static void Use(int i, int j)
        {
            Tile tile = Main.tile[i, j];
            int  num6 = Main.tile[i, j].frameX / 18 * -1;
            int  num5 = Main.tile[i, j].frameY / 18 * -1;

            num6 %= 4;
            if (num6 < -1)
            {
                num6 += 2;
            }
            num6 += i;
            num5 += j;
            Main.PlaySound(28, i * 16, j * 16, 0);
            Wiring.TripWire(num6, num5, 2, 2);
            int num = i;

            if (tile.frameX % 36 != 0)
            {
                num--;
            }
        }
        public static bool BeginTripWire(int left, int top, int width, int height)
        {
            if (!Active || Thread.CurrentThread.Name == wireThreadName)
            {
                VisualizerWorld.AddStart(new Rectangle(left, top, width, height));
                return(true);
            }

            if (Running)
            {
                if (queuedWireTrips.Count < maxQueuedTrips)
                {
                    queuedWireTrips.Enqueue(new Rectangle(left, top, width, height));
                }
                return(false);
            }

            VisualizerWorld.ResetSegments();

            Running = true;

            Thread wireThread = new Thread(delegate(object rand)
            {
                Main.rand = (UnifiedRandom)rand; //Main.rand is ThreadStatic, but we need it for faulty gates
                Wiring.TripWire(left, top, width, height);
                Running = false;
                mainWait.Set();
            });

            wireThread.IsBackground = true;
            wireThread.Name         = wireThreadName;
            wireThread.Start(Main.rand);

            mainWait.WaitOne();

            return(false);
        }
Example #14
0
        public override void Update(GameTime gameTime)
        {
            if (!this.GetPinIn(0).IsConnected())
            {
                this.Settings["Value"] = "-1";
                return;
            }
            ;

            if (!int.TryParse(this.Settings["Value"], out var val) || !int.TryParse(this.GetPinIn(0).GetValue(), out var in0))
            {
                this.Settings["Value"] = "-2";
                return;
            }

            if ((in0 <= 0 && val > 0) || (in0 > 0 && val <= 0))
            {
                if (this.Settings["Trigger"] == Triggers[2] ||                   // Enter and Exit
                    (in0 == 1 && this.Settings["Trigger"] == Triggers[1]) ||     // Enter Only
                    (in0 == 0 && this.Settings["Trigger"] == Triggers[0]))       // Exit Only
                {
                    Wiring.blockPlayerTeleportationForOneIteration = true;

                    if (Main.netMode != NetmodeID.MultiplayerClient)
                    {
                        Wiring.TripWire(this.GetPinOut(0).Location.X, this.GetPinOut(0).Location.Y, 1, 1);
                    }
                    else
                    {
                        Wiring.TripWire(this.GetPinOut(0).Location.X, this.GetPinOut(0).Location.Y, 1, 1);
                        WireMod.PacketHandler.SendTripWire(256, Main.myPlayer, this.GetPinOut(0).Location.X, this.GetPinOut(0).Location.Y);
                    }
                }
            }

            this.Settings["Value"] = in0.ToString();
        }
Example #15
0
        private int GetOutput()
        {
            if (!int.TryParse(this.Value, out var val))
            {
                return(-1);
            }
            if (!this.Pins["In"][0].IsConnected())
            {
                return(-1);
            }
            if (this.Pins["In"][0].DataType != "bool")
            {
                return(-1);
            }
            if (!int.TryParse(this.Pins["In"][0].GetValue(), out var in0))
            {
                return(-1);
            }

            if ((in0 <= 0 && val > 0) || (in0 > 0 && val <= 0))
            {
                Wiring.blockPlayerTeleportationForOneIteration = true;

                if (Main.netMode != NetmodeID.MultiplayerClient)
                {
                    Wiring.TripWire(this.Pins["Out"][0].Location.X, this.Pins["Out"][0].Location.Y, 1, 1);
                }
                else
                {
                    Wiring.TripWire(this.Pins["Out"][0].Location.X, this.Pins["Out"][0].Location.Y, 1, 1);
                    WireMod.PacketHandler.SendTripWire(256, Main.myPlayer, this.Pins["Out"][0].Location.X, this.Pins["Out"][0].Location.Y);
                }
            }

            this.Value = in0.ToString();
            return(in0);
        }
Example #16
0
 public void HandlePacket(BinaryReader reader, int WhoAmI)
 {
     Wiring.TripWire(reader.ReadInt16(), reader.ReadInt16(), 2, 2);
 }
Example #17
0
 private void Callback()
 {
     Wiring.TripWire(Position.X, Position.Y, 1, 1);
 }
Example #18
0
        public override bool OnTileCollide(Vector2 oldVelocity)
        {
            int x = (int)(projectile.Center.X + oldVelocity.X * 16) / 16;
            int y = (int)(projectile.Center.Y + oldVelocity.Y * 16) / 16;

            if (WorldGen.InWorld(x, y))
            {
                Tile tile = Main.tile[x, y];

                if (tile.type == TileType <Mirror>())
                {
                    Vector2 velocity = Vector2.Zero;

                    if (oldVelocity == new Vector2(0, 1))
                    {
                        switch (tile.frameX)
                        {
                        case 0: velocity = new Vector2(-1, 0); break;

                        case 1: velocity = new Vector2(1, 0); break;

                        default: return(true);
                        }
                    }

                    if (oldVelocity == new Vector2(0, -1))
                    {
                        switch (tile.frameX)
                        {
                        case 2: velocity = new Vector2(1, 0); break;

                        case 3: velocity = new Vector2(-1, 0); break;

                        default: return(true);
                        }
                    }

                    if (oldVelocity == new Vector2(1, 0))
                    {
                        switch (tile.frameX)
                        {
                        case 0: velocity = new Vector2(0, -1); break;

                        case 3: velocity = new Vector2(0, 1); break;

                        default: return(true);
                        }
                    }

                    if (oldVelocity == new Vector2(-1, 0))
                    {
                        switch (tile.frameX)
                        {
                        case 1: velocity = new Vector2(0, -1); break;

                        case 2: velocity = new Vector2(0, 1); break;

                        default: return(true);
                        }
                    }

                    projectile.velocity = velocity;
                    projectile.position = new Vector2(x, y) * 16;

                    for (int k = 0; k < 8; k++)
                    {
                        Dust.NewDustPerfect(Vector2.Lerp(projectile.position, projectile.oldPosition, k / 8f) + projectile.Size / 2, DustType <Dusts.Electric>(), Vector2.Zero);
                    }

                    Main.PlaySound(SoundID.DD2_WitherBeastCrystalImpact, projectile.Center);

                    return(false);
                }

                if (tile.type == TileType <Splitter>())
                {
                    Vector2 vel = oldVelocity.RotatedBy(MathHelper.Pi / 2f).ToPoint16().ToVector2();
                    Projectile.NewProjectile(new Vector2(x + 0.5f, y + 0.5f) * 16 + vel * 8, vel, projectile.type, 0, 0);

                    Vector2 vel2 = oldVelocity.RotatedBy(-MathHelper.Pi / 2f).ToPoint16().ToVector2();
                    Projectile.NewProjectile(new Vector2(x + 0.5f, y + 0.5f) * 16 + vel2 * 8, vel2, projectile.type, 0, 0);

                    for (int k = 0; k < 8; k++)
                    {
                        Dust.NewDustPerfect(projectile.Center + oldVelocity * k, DustType <Dusts.Electric>(), Vector2.Zero);
                    }

                    Main.PlaySound(SoundID.DD2_WitherBeastCrystalImpact, projectile.Center);
                }

                if (tile.type == TileType <RecieverPuzzle>())
                {
                    Main.NewText("Nice c**k.", new Color(255, 0, 255));
                }

                if (tile.type == TileType <RecieverPlacable>())
                {
                    for (int k = 0; k < 50; k++)
                    {
                        Dust.NewDustPerfect(projectile.Center + oldVelocity * 16, DustType <Dusts.Starlight>(), Vector2.One.RotatedByRandom(6.28f) * Main.rand.NextFloat(20));
                    }

                    Main.PlaySound(SoundID.DD2_BetsyFireballImpact, projectile.Center);

                    Wiring.TripWire(x, y, 1, 1);
                }
            }
            return(true);
        }
Example #19
0
 internal static void TriggerMech(int x, int y)
 {
     HitWireSingle(x, y);
     Wiring.TripWire(x, y, 1, 1);
 }
Example #20
0
 // UseItem
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 public override bool UseItem(Player player)
 {
     Wiring.TripWire(Player.tileTargetX, Player.tileTargetY, 1, 1);
     return(true);
 }