Example #1
0
        protected ButtonState previousRMBState; // Left Mouse Button for you uninitiated, uncultured reactionist neo-liberals.
        // TODO create list of moused-over systems and use that to disable no-shift clear
        public virtual void MouseSelection(Sector sector)
        {
            int mouseX = Mouse.GetState().X;
            int mouseY = Mouse.GetState().Y;

            if (Mouse.GetState().LeftButton == ButtonState.Pressed)
            {
                //Debug.WriteLine($"x: {mouseX} y: {mouseY}");
            }
            #region System Selection
            if (!IsOccluded)
            {
                for (int systemId = 0; systemId < ChapterMaster.Sector.Systems.Count; systemId++)
                {
                    /*  Vector2 camPositionTransform = new Vector2(camX, camY);
                     * Vector2 originTransform = new Vector2(ChapterMaster.GetWidth() / 2, ChapterMaster.GetHeight() / 2);
                     * Vector2 upperLeft = (new Vector2(system.x,system.y) - camPositionTransform) * zoom + originTransform;
                     * upperLeft, upperLeft + (new Vector2(Constants.SYSTEM_WIDTH_HEIGHT, Constants.SYSTEM_WIDTH_HEIGHT) * zoom + originTransform) */

                    // TODO: replace with Rectangle.Contains
                    int ulCornerX = (int)((ChapterMaster.Sector.Systems[systemId].x - camX) * zoom + GameManager.GetWidth() / 2);
                    int ulCornerY = (int)((ChapterMaster.Sector.Systems[systemId].y - camY) * zoom + GameManager.GetHeight() / 2);
                    int brCornerX = (int)((ChapterMaster.Sector.Systems[systemId].x + Constants.SystemSize / 2 - camX) * zoom + GameManager.GetWidth() / 2);
                    int brCornerY = (int)((ChapterMaster.Sector.Systems[systemId].y + Constants.SystemSize / 2 - camY) * zoom + GameManager.GetHeight() / 2);
                    if (mouseX > ulCornerX && mouseY > ulCornerY && mouseX < brCornerX && mouseY < brCornerY)
                    {
                        currentSystemId = systemId;
                        systemSelected  = true;
                        if (Mouse.GetState().RightButton == ButtonState.Pressed)
                        {
                            foreach (int id in selectedFleets)
                            {
                                if (!ChapterMaster.Sector.Fleets[id].isMoving && ChapterMaster.Sector.Fleets[id].originSystemId != currentSystemId)
                                {
                                    ChapterMaster.Sector.Fleets[id].destinationSystemId = currentSystemId;
                                    ChapterMaster.Sector.Fleets[id].isMoving            = true;
                                    ChapterMaster.Sector.Fleets[id].fleetMoveProgress   = 0;
                                }
                            }
                        }
                        else if (Mouse.GetState().LeftButton == ButtonState.Pressed)
                        {
                            if (!PlanetScreenOpen)
                            {
                                //currentSystemScreenAlign = (SystemScreenAlign)ChapterMaster.Sector.Systems[currentSystemId].OpenSystemScreen(this, currentSystemId, gameState).align;
                                ChapterMaster.Sector.Systems[currentSystemId].OpenSystemScreen(this, currentSystemId, gameState.GetDesktop());
                                PlanetScreenOpen = true;
                                openSystem       = currentSystemId;
                            }
                        }
                    }
                    else
                    {
                        delayTimer++;
                        if (delayTimer > DeselectionDelay)
                        {
                            systemSelected = false;
                            delayTimer     = 0;
                        }
                        #region Moved To SystemScreen

                        /*
                         * //PlanetScreenWasOpen = false;
                         * //ChapterMaster.Sector.Systems[currentSystemId].CloseSystemScreen(this);
                         * if (Mouse.GetState().LeftButton == ButtonState.Pressed && systemId == openSystem)
                         *  if (currentSystemScreenAlign.GetRect(this).Contains(new Point(mouseX, mouseY)))
                         *  {
                         *      //Debug.WriteLine("Closing planet screen");
                         *      for(int i = 0; i < ChapterMaster.MainScreen.Screens.Count; i++)
                         *      {
                         *          if (ChapterMaster.MainScreen.Screens[i] is SystemScreen)
                         *          {
                         *             // Predicate<UI.Screen> predicate = delegate (UI.Screen screen) { return screen is UI.PlanetScreen; };
                         *              //ChapterMaster.MainScreen.Screens[i].Screens.RemoveAll(predicate);
                         *          }
                         *      }
                         *
                         *  }
                         *  else
                         *  {
                         *     // Debug.WriteLine("Closing system screen");
                         *     // Predicate<UI.Screen> predicate = delegate (UI.Screen screen) { return screen is UI.SystemScreen; };
                         *      //ChapterMaster.MainScreen.Screens.RemoveAll(predicate);
                         *     // PlanetScreenOpen = false;
                         *      //openSystem = -1;
                         *  }
                         */
                        #endregion
                    }
                }
            }
            #endregion

            #region Fleet Selection
            if (Mouse.GetState().LeftButton == ButtonState.Pressed && previousLMBState == ButtonState.Released && !IsOccluded)
            {
                bool notWasOverFleet = true;
                for (int fleetId = 0; fleetId < ChapterMaster.Sector.Fleets.Count; fleetId++)
                {
                    //Debug.WriteLine($"Fleet ID {fleetId}");
                    if (ChapterMaster.Sector.Fleets[fleetId].Intersects(this))
                    {
                        if (!selectedFleets.Contains(fleetId))
                        {
                            selectedFleets.Add(fleetId);
                            ChapterMaster.Sector.Fleets[fleetId].isSelected = true;
                            notWasOverFleet = false;
                        }
                        else
                        {
                            selectedFleets.Remove(fleetId);
                            ChapterMaster.Sector.Fleets[fleetId].isSelected = false;
                        }
                    }
                    else
                    {
                        for (int otherFleetId = 0; otherFleetId < ChapterMaster.Sector.Fleets.Count; otherFleetId++)
                        {
                            if (ChapterMaster.Sector.Fleets[fleetId].Intersects(this))
                            {
                                if (otherFleetId != fleetId)
                                {
                                    //selectedFleets.Remove(otherFleetId);
                                    //ChapterMaster.Sector.Fleets[otherFleetId].isSelected = false;
                                }
                                //notWasOverFleet = false;
                            }
                            else
                            {
                            }
                        }
                    }
                }
                if (!Keyboard.GetState().IsKeyDown(Keys.LeftShift))
                {
                    for (int fleetToDeselect = 0; fleetToDeselect < ChapterMaster.Sector.Fleets.Count; fleetToDeselect++)
                    {
                        if (!ChapterMaster.Sector.Fleets[fleetToDeselect].Intersects(this))
                        {
                            Debug.WriteLine($"noshift deselecting fleet {fleetToDeselect}");
                            ChapterMaster.Sector.Fleets[fleetToDeselect].isSelected = false;
                            selectedFleets.Remove(fleetToDeselect);
                        }
                    }
                }
            }
            previousLMBState = Mouse.GetState().LeftButton;
            #endregion
            string fleets = "";
            foreach (int id in selectedFleets)
            {
                fleets += "F" + id + ", ";
                fleets += "\n";
                fleets += "COF: ";
                foreach (int coId in ChapterMaster.Sector.Fleets[id].coFleets)
                {
                    fleets += coId + ", ";
                }
            }
            ChapterMaster.DebugString = "System: " + currentSystemId + "\n" + "Fleet: " + fleets;
            IsOccluded = false;
        }