Exemple #1
0
        private void Callback()
        {
            for (int radius = 2; radius < 16; radius++)
            {
                foreach (Point point in Utility.GetCircle(Position.X + 1, Position.Y + 1, radius))
                {
                    if (Utility.InWorldBounds(point.X, point.Y) && !WorldGen.TileEmpty(point.X, point.Y) && Main.tile[point.X, point.Y].type == TileID.IceBlock)
                    {
                        WorldGen.KillTile(point.X, point.Y, noItem: true);

                        for (int i = 0; i < 10; i++)
                        {
                            Vector2 start    = point.ToWorldCoordinates(Main.rand.NextFloat() * 16f, Main.rand.NextFloat() * 16f);
                            Vector2 end      = Position.ToWorldCoordinates(24f, 24f);
                            Vector2 dir      = Vector2.Normalize(end - start);
                            int     timeLeft = (int)(Vector2.Distance(start, end) / dir.Length());

                            Photon.Spawn(start, dir, new Color(0, 237, 217), timeLeft, () => EnergyHandler.InsertEnergy(100));
                        }

                        return;
                    }
                }
            }
        }
Exemple #2
0
        private void Callback()
        {
            if (EnergyHandler.Energy < EnergyHandler.Capacity)
            {
                foreach (BaseGelumTE tile in Connections)
                {
                    if (tile is IEnergySource source && source.EnergyHandler.Energy > 0)
                    {
                        Vector2 start    = tile.Position.ToWorldCoordinates(tile.InsertionPoint);
                        Vector2 end      = Position.ToWorldCoordinates(InsertionPoint);
                        Vector2 dir      = Vector2.Normalize(end - start);
                        int     timeLeft = (int)(Vector2.Distance(start, end) / dir.Length());

                        long extracted = -source.EnergyHandler.ExtractEnergy(100);
                        Photon.Spawn(start, dir, new Color(0, 237, 217), timeLeft, () => EnergyHandler.InsertEnergy(extracted));
                    }
                }
            }

            foreach (BaseGelumTE tile in Connections)
            {
                if (tile is IEnergyReceiver receiver && receiver.EnergyHandler.Energy < receiver.EnergyHandler.Capacity)
                {
                    foreach (EnergyRelay relay in Network.Tiles.OfType <EnergyRelay>())
                    {
                        if (relay.EnergyHandler.Energy <= 0)
                        {
                            continue;
                        }

                        Vector2 start    = Position.ToWorldCoordinates(InsertionPoint);
                        Vector2 end      = tile.Position.ToWorldCoordinates(tile.InsertionPoint);
                        Vector2 dir      = Vector2.Normalize(end - start);
                        int     timeLeft = (int)(Vector2.Distance(start, end) / dir.Length());

                        long extracted = -relay.EnergyHandler.ExtractEnergy(100);
                        Photon.Spawn(start, dir, new Color(0, 237, 217), timeLeft, () => receiver.EnergyHandler.InsertEnergy(extracted));
                    }
                }
            }
        }