Beispiel #1
0
        public IEnumerable<SolarSystem> FindSystemsInLocalArea(LocalAreaView localAreaView)
        {
            if (localAreaView == null) throw new ArgumentNullException("localAreaView");

            var solarSystems = new List<SolarSystem>();
            var xDiff = (localAreaView.ScreenSize.Width - 1) / 2; // either side of the focal point we show this many squares
            var yDiff = (localAreaView.ScreenSize.Height - 1) / 2;
            var minX = localAreaView.FocusCoordinates.X - xDiff;
            var maxX = localAreaView.FocusCoordinates.X + xDiff;
            var minY = localAreaView.FocusCoordinates.Y - yDiff;
            var maxY = localAreaView.FocusCoordinates.Y + yDiff;

            // This will need to change once we consider three dimensional space
            var query = this.CreateQuery("X BETWEEN @MinX AND @MaxX and Y BETWEEN @MinY AND @MaxY AND Z = @Z");

            using (var cmd = this.SessionManager.GetCurrentUnitOfWork().CreateCommand(query))
            {
                cmd.AddParameter("MinX", DbType.Int64, minX);
                cmd.AddParameter("MaxX", DbType.Int64, maxX);
                cmd.AddParameter("MinY", DbType.Int64, minY);
                cmd.AddParameter("MaxY", DbType.Int64, maxY);
                cmd.AddParameter("Z", DbType.Int64, 0);

                using (var dr = cmd.ExecuteReader())
                {
                    while (dr.Read())
                    {
                        solarSystems.Add(this.InflateSolarSystem(dr));
                    }
                }
            }

            return solarSystems;
        }
Beispiel #2
0
        public LocalAreaViewResult FindLocalSystems(ScreenSize screenSize)
        {
            if (screenSize == null) throw new ArgumentNullException("screenSize");

            var currentUser = _securityManager.GetCurrentUserAccount();
            if (currentUser == null) throw new CurrentUserNotFoundException();
            var localAreaView = new LocalAreaView(currentUser.FocusCoordinates, screenSize);
            var solarSystems = _solarSystems.FindSystemsInLocalArea(localAreaView);

            var screenCornerX = localAreaView.FocusCoordinates.X - ((screenSize.Width - 1) / 2);
            var screenCornerY = localAreaView.FocusCoordinates.Y - ((screenSize.Height - 1) / 2);

            var relative = solarSystems.Select(s => new RelativeSolarSystem
                {
                    Coordinates = s.Coordinates,
                    Name = s.Name,
                    SolarSystemID = s.SolarSystemID,
                    ScreenOffset = new ScreenOffSet
                    {
                        X = (int)(s.Coordinates.X - screenCornerX),
                        Y = (int)(s.Coordinates.Y - screenCornerY)
                    }
                });

            return new LocalAreaViewResult(currentUser.FocusCoordinates, screenSize, relative);
        }