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