Exemplo n.º 1
0
        private void simulateFleetMovement(Vector4 currentPosition)
        {
            if (!this.SelectedFleet.CanMove)
            {
                return;
            }

            Vector4 mousePoint   = Vector4.Transform(currentPosition, invProjection);
            var     searchRadius = Math.Max(screenLength * ClickRadius, StarMinClickRadius);         //TODO(v0.6) doesn't scale with zoom
            var     searchPoint  = new NGenerics.DataStructures.Mathematical.Vector2D(mousePoint.X, mousePoint.Y);
            var     searchSize   = new NGenerics.DataStructures.Mathematical.Vector2D(searchRadius, searchRadius);

            var starsFound = this.QueryScene(searchPoint, searchRadius).
                             Where(x => x.Data is StarData).
                             OrderBy(x => (x.PhysicalShape.Center - convert(searchPoint)).LengthSquared).
                             ToList();

            if (!starsFound.Any())
            {
                return;
            }

            this.SelectedFleet.SimulateTravel(starsFound[0].Data as StarData);
            this.setupMovementEta();
            this.setupMovementSimulation();
        }
Exemplo n.º 2
0
        public double TestNGenerics()
        {
            var v1 = new NGenerics.DataStructures.Mathematical.Vector2D(_x, _y);

            v1.Divide(_factor);

            return(v1.X);
        }
Exemplo n.º 3
0
        public override void OnMouseDoubleClick(MouseEventArgs e)
        {
            if (panAbsPath > PanClickTolerance)
            {
                return;
            }

            Vector4 mousePoint   = Vector4.Transform(mouseToView(e.X, e.Y), invProjection);
            var     searchRadius = Math.Max(screenLength * ClickRadius, StarMinClickRadius);         //TODO(v0.6) doesn't scale with zoom
            var     searchPoint  = new NGenerics.DataStructures.Mathematical.Vector2D(mousePoint.X, mousePoint.Y);
            var     searchSize   = new NGenerics.DataStructures.Mathematical.Vector2D(searchRadius, searchRadius);

            var starsFound = this.QueryScene(searchPoint, searchRadius).
                             Where(x => x.Data is StarData).
                             Select(x => x.Data as StarData).
                             OrderBy(x => (x.Position - searchPoint).Magnitude()).
                             ToList();

            if (starsFound.Any())
            {
                this.galaxyViewListener.SystemOpened(this.currentPlayer.OpenStarSystem(starsFound[0]));
            }
        }
Exemplo n.º 4
0
        public override void OnMouseClick(MouseEventArgs e)
        {
            if (panAbsPath > PanClickTolerance)             //TODO(v0.6) maybe make AScene differentiate between click and drag
            {
                return;
            }

            Vector4 mousePoint   = Vector4.Transform(mouseToView(e.X, e.Y), invProjection);
            var     searchRadius = Math.Max(screenLength * ClickRadius, StarMinClickRadius);         //TODO(v0.6) doesn't scale with zoom
            var     searchPoint  = new NGenerics.DataStructures.Mathematical.Vector2D(mousePoint.X, mousePoint.Y);
            var     searchSize   = new NGenerics.DataStructures.Mathematical.Vector2D(searchRadius, searchRadius);

            var allObjects = this.QueryScene(searchPoint, searchRadius).
                             OrderBy(x => (x.PhysicalShape.Center - convert(searchPoint)).LengthSquared).
                             ToList();
            var starsFound = allObjects.Where(x => x.Data is StarData).Select(x => x.Data as StarData).ToList();
            var fleetFound = allObjects.Where(x => x.Data is FleetInfo).Select(x => x.Data as FleetInfo).ToList();

            var foundAny      = starsFound.Any() || fleetFound.Any();
            var isStarClosest =
                starsFound.Any() &&
                (
                    !fleetFound.Any() ||
                    (starsFound[0].Position - searchPoint).Magnitude() <= (fleetFound[0].Position - searchPoint).Magnitude()
                );

            if (this.SelectedFleet != null)
            {
                if (foundAny && isStarClosest)
                {
                    this.SelectedFleet = this.SelectedFleet.Send(this.SelectedFleet.SimulationWaypoints);
                    this.lastSelectedIdleFleets[this.currentPlayer.PlayerIndex] = this.SelectedFleet.Fleet;
                    this.galaxyViewListener.FleetClicked(new FleetInfo[] { this.SelectedFleet.Fleet });
                    this.setupFleetMarkers();
                    this.setupFleetMovement();
                    this.setupSelectionMarkers();
                    return;
                }
                else
                {
                    this.galaxyViewListener.FleetDeselected();
                    this.SelectedFleet = null;
                    this.setupMovementEta();
                    this.setupMovementSimulation();
                    this.setupSelectionMarkers();
                }
            }


            if (!foundAny)
            {
                return;
            }

            if (isStarClosest)
            {
                this.currentSelection = GalaxySelectionType.Star;
                this.lastSelectedStars[this.currentPlayer.PlayerIndex] = starsFound[0].Position;
                this.galaxyViewListener.SystemSelected(this.currentPlayer.OpenStarSystem(starsFound[0]));
                this.setupSelectionMarkers();
            }
            else
            {
                this.currentSelection = GalaxySelectionType.Fleet;
                this.lastSelectedIdleFleets[this.currentPlayer.PlayerIndex] = fleetFound[0];                 //TODO(v0.6) marks wrong fleet when there are multiple players
                this.galaxyViewListener.FleetClicked(fleetFound);
                this.setupSelectionMarkers();
            }
        }
Exemplo n.º 5
0
 protected static Vector2 convert(NGenerics.DataStructures.Mathematical.Vector2D v)
 {
     return(new Vector2((float)v.X, (float)v.Y));
 }
Exemplo n.º 6
0
 protected IEnumerable <SceneObject> QueryScene(NGenerics.DataStructures.Mathematical.Vector2D center, double radius)
 {
     return(this.physicalObjects.Query(center, new NGenerics.DataStructures.Mathematical.Vector2D(radius, radius)));
 }