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; }
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); }