public static void SendBeamsToPlayer(this IZone zone, Player player, GridDistricts districts)
        {
            var beams = player.CurrentPosition.ToCellCoord().GetNeighbours(districts).SelectMany(cellCoord =>
            {
                var area = cellCoord.ToArea();
                return(zone.Beams.All.Where(b => area.Contains(b.SourcePosition)));
            });

            foreach (var beam in beams)
            {
                player.Session.SendBeamIfVisible(beam);
            }
        }
        public IEnumerable <CellCoord> GetNeighbours(GridDistricts gridDistricts = GridDistricts.All)
        {
            var mask = 0x80;

            do
            {
                var district = gridDistricts & (GridDistricts)mask;

                if (district == GridDistricts.Undefined)
                {
                    continue;
                }

                var n = _neighbours[district];

                n.x += x;
                n.y += y;

                yield return(n);
            } while ((mask >>= 1) > 0);
        }