public void ChangeHull(ShipData hull) { this.Reset = true; this.DesignStack.Clear(); lock (GlobalStats.ObjectManagerLocker) { if (this.shipSO != null) { base.ScreenManager.inter.ObjectManager.Remove(this.shipSO); } } this.ActiveHull = new ShipData() { Animated = hull.Animated, CombatState = hull.CombatState, Hull = hull.Hull, IconPath = hull.IconPath, ModelPath = hull.ModelPath, Name = hull.Name, Role = hull.Role, ShipStyle = hull.ShipStyle, ThrusterList = hull.ThrusterList, ShipCategory = hull.ShipCategory, CarrierShip = hull.CarrierShip, ModuleSlotList = new List<ModuleSlotData>(), }; this.CarrierOnly = hull.CarrierShip; this.LoadCategory = hull.ShipCategory; this.fml = true; this.fmlevenmore = true; foreach (ModuleSlotData slot in hull.ModuleSlotList) { ModuleSlotData data = new ModuleSlotData() { Position = slot.Position, Restrictions = slot.Restrictions, facing = slot.facing, InstalledModuleUID = slot.InstalledModuleUID }; this.ActiveHull.ModuleSlotList.Add(slot); } this.CombatState = hull.CombatState; if (!hull.Animated) { this.ActiveModel = Ship_Game.ResourceManager.GetModel(this.ActiveHull.ModelPath); ModelMesh mesh = this.ActiveModel.Meshes[0]; this.shipSO = new SceneObject(mesh) { ObjectType = ObjectType.Dynamic, World = this.worldMatrix }; lock (GlobalStats.ObjectManagerLocker) { base.ScreenManager.inter.ObjectManager.Submit(this.shipSO); } } else { SkinnedModel sm = Ship_Game.ResourceManager.GetSkinnedModel(this.ActiveHull.ModelPath); this.shipSO = new SceneObject(sm.Model) { ObjectType = ObjectType.Dynamic, World = this.worldMatrix }; lock (GlobalStats.ObjectManagerLocker) { base.ScreenManager.inter.ObjectManager.Submit(this.shipSO); } } foreach (ToggleButton button in this.CombatStatusButtons) { string action = button.Action; string str = action; if (action == null) { continue; } if (str == "attack") { if (this.CombatState != Ship_Game.Gameplay.CombatState.AttackRuns) { button.Active = false; } else { button.Active = true; } } else if (str == "arty") { if (this.CombatState != Ship_Game.Gameplay.CombatState.Artillery) { button.Active = false; } else { button.Active = true; } } else if (str == "hold") { if (this.CombatState != Ship_Game.Gameplay.CombatState.HoldPosition) { button.Active = false; } else { button.Active = true; } } else if (str == "orbit_left") { if (this.CombatState != Ship_Game.Gameplay.CombatState.OrbitLeft) { button.Active = false; } else { button.Active = true; } } else if (str == "broadside_left") { if (this.CombatState != Ship_Game.Gameplay.CombatState.BroadsideLeft) { button.Active = false; } else { button.Active = true; } } else if (str != "orbit_right") { if (str == "evade") { if (this.CombatState != Ship_Game.Gameplay.CombatState.Evade) { button.Active = false; } else { button.Active = true; } } } else if (str == "broadside_right") { if (this.CombatState != Ship_Game.Gameplay.CombatState.BroadsideRight) { button.Active = false; } else { button.Active = true; } } else if (this.CombatState != Ship_Game.Gameplay.CombatState.OrbitRight) { button.Active = false; } else { button.Active = true; } } this.SetupSlots(); }
public void SaveShipDesign(string name) { this.ActiveHull.ModuleSlotList.Clear(); this.ActiveHull.Name = name; ShipData toSave = this.ActiveHull.GetClone(); foreach (SlotStruct slot in this.Slots) { if (slot.isDummy) { ModuleSlotData data = new ModuleSlotData() { Position = slot.slotReference.Position, Restrictions = slot.Restrictions, InstalledModuleUID = "Dummy" }; toSave.ModuleSlotList.Add(data); } else { ModuleSlotData data = new ModuleSlotData() { InstalledModuleUID = slot.ModuleUID, Position = slot.slotReference.Position, Restrictions = slot.Restrictions }; if (slot.module != null) { data.facing = slot.module.facing; } toSave.ModuleSlotList.Add(data); if (slot.module != null && slot.module.ModuleType == ShipModuleType.Hangar) { data.SlotOptions = slot.module.hangarShipUID; } data.state = slot.state; } } string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); Ship_Game.Gameplay.CombatState combatState = toSave.CombatState; toSave.CombatState = this.CombatState; toSave.Name = name; //Cases correspond to the 5 options in the drop-down menu; default exists for... Propriety, mainly. The option selected when saving will always be the Category saved, pretty straightforward. switch (this.CategoryList.Options[this.CategoryList.ActiveIndex].@value) { case 1: { this.ActiveHull.ShipCategory = ShipData.Category.Unclassified; break; } case 2: { this.ActiveHull.ShipCategory = ShipData.Category.Civilian; break; } case 3: { this.ActiveHull.ShipCategory = ShipData.Category.Recon; break; } case 4: { this.ActiveHull.ShipCategory = ShipData.Category.Fighter; break; } case 5: { this.ActiveHull.ShipCategory = ShipData.Category.Bomber; break; } default: { this.ActiveHull.ShipCategory = ShipData.Category.Unclassified; break; } } //Adds the category determined by the case from the dropdown to the 'toSave' ShipData. toSave.ShipCategory = this.ActiveHull.ShipCategory; //Adds the boolean derived from the checkbox boolean (CarrierOnly) to the ShipData. Defaults to 'false'. toSave.CarrierShip = this.CarrierOnly; XmlSerializer Serializer = new XmlSerializer(typeof(ShipData)); TextWriter WriteFileStream = new StreamWriter(string.Concat(path, "/StarDrive/Saved Designs/", name, ".xml")); Serializer.Serialize(WriteFileStream, toSave); WriteFileStream.Close(); this.ShipSaved = true; if (Ship_Game.ResourceManager.ShipsDict.ContainsKey(name)) { Ship newShip = Ship.CreateShipFromShipData(toSave); newShip.SetShipData(toSave); newShip.InitForLoad(); newShip.InitializeStatus(); Ship_Game.ResourceManager.ShipsDict[name] = newShip; Ship_Game.ResourceManager.ShipsDict[name].IsPlayerDesign = true; } else { Ship newShip = Ship.CreateShipFromShipData(toSave); newShip.SetShipData(toSave); newShip.InitForLoad(); newShip.InitializeStatus(); Ship_Game.ResourceManager.ShipsDict.Add(name, newShip); Ship_Game.ResourceManager.ShipsDict[name].IsPlayerDesign = true; } EmpireManager.GetEmpireByName(this.EmpireUI.screen.PlayerLoyalty).UpdateShipsWeCanBuild(); this.ActiveHull.CombatState = this.CombatState; this.ChangeHull(this.ActiveHull); }
public override void HandleInput(InputState input) { this.CategoryList.HandleInput(input); this.CarrierOnlyBox.HandleInput(input); if (this.ActiveModule != null && (this.ActiveModule.InstalledWeapon != null && this.ActiveModule.ModuleType != ShipModuleType.Turret || this.ActiveModule.XSIZE != this.ActiveModule.YSIZE)) { if (input.Left) this.ChangeModuleState(ShipDesignScreen.ActiveModuleState.Left); if (input.Right) this.ChangeModuleState(ShipDesignScreen.ActiveModuleState.Right); if (input.Down) this.ChangeModuleState(ShipDesignScreen.ActiveModuleState.Rear); if (input.Up) this.ChangeModuleState(ShipDesignScreen.ActiveModuleState.Normal); } if (input.CurrentKeyboardState.IsKeyDown(Keys.Y) && !input.LastKeyboardState.IsKeyDown(Keys.Y) && !GlobalStats.TakingInput) { AudioManager.PlayCue("echo_affirm"); this.ExitScreen(); } if (this.close.HandleInput(input)) this.ExitScreen(); else if (input.CurrentKeyboardState.IsKeyDown(Keys.Z) && input.LastKeyboardState.IsKeyUp(Keys.Z) && input.CurrentKeyboardState.IsKeyDown(Keys.LeftControl)) { if (this.DesignStack.Count <= 0) return; ShipModule shipModule = this.ActiveModule; DesignAction designAction = this.DesignStack.Pop(); SlotStruct slot1 = new SlotStruct(); foreach (SlotStruct slot2 in this.Slots) { if (slot2.pq == designAction.clickedSS.pq) { this.ClearSlotNoStack(slot2); slot1 = slot2; slot1.facing = designAction.clickedSS.facing; } foreach (SlotStruct slotStruct in designAction.AlteredSlots) { if (slot2.pq == slotStruct.pq) { this.ClearSlotNoStack(slot2); break; } } } if (designAction.clickedSS.ModuleUID != null) { this.ActiveModule = ResourceManager.GetModule(designAction.clickedSS.ModuleUID); this.ResetModuleState(); this.InstallModuleNoStack(slot1); } foreach (SlotStruct slotStruct in designAction.AlteredSlots) { foreach (SlotStruct slot2 in this.Slots) { if (slot2.pq == slotStruct.pq && slotStruct.ModuleUID != null) { this.ActiveModule = ResourceManager.GetModule(slotStruct.ModuleUID); this.ResetModuleState(); this.InstallModuleNoStack(slot2); slot2.facing = slotStruct.facing; slot2.ModuleUID = slotStruct.ModuleUID; } } } this.ActiveModule = shipModule; this.ResetModuleState(); } else { if (!HelperFunctions.CheckIntersection(this.ModuleSelectionMenu.Menu, input.CursorPosition) && !HelperFunctions.CheckIntersection(this.HullSelectionRect, input.CursorPosition) && !HelperFunctions.CheckIntersection(this.ChooseFighterSub.Menu, input.CursorPosition)) { if (input.ScrollOut) { this.TransitionZoom -= 0.1f; if ((double)this.TransitionZoom < 0.300000011920929) this.TransitionZoom = 0.3f; if ((double)this.TransitionZoom > 2.65000009536743) this.TransitionZoom = 2.65f; } if (input.ScrollIn) { this.TransitionZoom += 0.1f; if ((double)this.TransitionZoom < 0.300000011920929) this.TransitionZoom = 0.3f; if ((double)this.TransitionZoom > 2.65000009536743) this.TransitionZoom = 2.65f; } } if (input.CurrentKeyboardState.IsKeyDown(Keys.OemTilde)) input.LastKeyboardState.IsKeyUp(Keys.OemTilde); if (this.Debug) { if (input.CurrentKeyboardState.IsKeyDown(Keys.Enter) && input.LastKeyboardState.IsKeyUp(Keys.Enter)) { foreach (ModuleSlotData moduleSlotData in this.ActiveHull.ModuleSlotList) moduleSlotData.InstalledModuleUID = (string)null; new XmlSerializer(typeof(ShipData)).Serialize((TextWriter)new StreamWriter("Content/Hulls/" + this.ActiveHull.ShipStyle + "/" + this.ActiveHull.Name + ".xml"), (object)this.ActiveHull); } if (input.Right) ++this.operation; if (this.operation > (ShipDesignScreen.SlotModOperation)6) this.operation = ShipDesignScreen.SlotModOperation.Delete; } this.HoveredModule = (ShipModule)null; this.mouseStateCurrent = Mouse.GetState(); Vector2 vector2 = new Vector2((float)this.mouseStateCurrent.X, (float)this.mouseStateCurrent.Y); this.selector = (Selector)null; this.EmpireUI.HandleInput(input, (GameScreen)this); this.activeModSubMenu.HandleInputNoReset((object)this); this.hullSL.HandleInput(input); for (int index = this.hullSL.indexAtTop; index < this.hullSL.Copied.Count && index < this.hullSL.indexAtTop + this.hullSL.entriesToDisplay; ++index) { ScrollList.Entry e = this.hullSL.Copied[index]; if (e.item is ModuleHeader) { if ((e.item as ModuleHeader).HandleInput(input, e)) return; } else if (HelperFunctions.CheckIntersection(e.clickRect, vector2)) { this.selector = new Selector(this.ScreenManager, e.clickRect); e.clickRectHover = 1; this.selector = new Selector(this.ScreenManager, e.clickRect); if (input.InGameSelect) { AudioManager.PlayCue("sd_ui_accept_alt3"); if (!this.ShipSaved && !this.CheckDesign()) { MessageBoxScreen messageBoxScreen = new MessageBoxScreen(Localizer.Token(2121), "Save", "No"); messageBoxScreen.Accepted += new EventHandler<EventArgs>(this.SaveWIPThenChangeHull); messageBoxScreen.Cancelled += new EventHandler<EventArgs>(this.JustChangeHull); this.changeto = e.item as ShipData; this.ScreenManager.AddScreen((GameScreen)messageBoxScreen); return; } else { this.ChangeHull(e.item as ShipData); return; } } } else e.clickRectHover = 0; } this.modSel.HandleInput((object)this); if (this.ActiveModule != null) { if (this.ActiveModule.ModuleType == ShipModuleType.Hangar && !this.ActiveModule.IsTroopBay && !this.ActiveModule.IsSupplyBay) { this.UpdateHangarOptions(this.ActiveModule); this.ChooseFighterSL.HandleInput(input); for (int index = this.ChooseFighterSL.indexAtTop; index < this.ChooseFighterSL.Copied.Count && index < this.ChooseFighterSL.indexAtTop + this.ChooseFighterSL.entriesToDisplay; ++index) { ScrollList.Entry entry = this.ChooseFighterSL.Copied[index]; if (HelperFunctions.CheckIntersection(entry.clickRect, vector2)) { this.selector = new Selector(this.ScreenManager, entry.clickRect); entry.clickRectHover = 1; this.selector = new Selector(this.ScreenManager, entry.clickRect); if (input.InGameSelect) { this.ActiveModule.hangarShipUID = (entry.item as Ship).Name; this.HangarShipUIDLast = (entry.item as Ship).Name; AudioManager.PlayCue("sd_ui_accept_alt3"); return; } } } } } else if (this.HighlightedModule != null && this.HighlightedModule.ModuleType == ShipModuleType.Hangar && (!this.HighlightedModule.IsTroopBay && !this.HighlightedModule.IsSupplyBay)) { this.ChooseFighterSL.HandleInput(input); for (int index = this.ChooseFighterSL.indexAtTop; index < this.ChooseFighterSL.Copied.Count && index < this.ChooseFighterSL.indexAtTop + this.ChooseFighterSL.entriesToDisplay; ++index) { ScrollList.Entry entry = this.ChooseFighterSL.Copied[index]; if (HelperFunctions.CheckIntersection(entry.clickRect, vector2)) { this.selector = new Selector(this.ScreenManager, entry.clickRect); entry.clickRectHover = 1; this.selector = new Selector(this.ScreenManager, entry.clickRect); if (input.InGameSelect) { this.HighlightedModule.hangarShipUID = (entry.item as Ship).Name; this.HangarShipUIDLast = (entry.item as Ship).Name; AudioManager.PlayCue("sd_ui_accept_alt3"); return; } } } } for (int index = this.weaponSL.indexAtTop; index < this.weaponSL.Copied.Count && index < this.weaponSL.indexAtTop + this.weaponSL.entriesToDisplay; ++index) { ScrollList.Entry e = this.weaponSL.Copied[index]; if (e.item is ModuleHeader) { if ((e.item as ModuleHeader).HandleInput(input, e)) return; } else if (HelperFunctions.CheckIntersection(e.clickRect, vector2)) { this.selector = new Selector(this.ScreenManager, e.clickRect); e.clickRectHover = 1; this.selector = new Selector(this.ScreenManager, e.clickRect); if (input.InGameSelect) { this.SetActiveModule(ResourceManager.GetModule((e.item as ShipModule).UID)); this.ResetModuleState(); return; } } else e.clickRectHover = 0; } this.weaponSL.HandleInput(input); if (HelperFunctions.CheckIntersection(this.HullSelectionRect, input.CursorPosition) && input.CurrentMouseState.LeftButton == ButtonState.Pressed || HelperFunctions.CheckIntersection(this.modSel.Menu, input.CursorPosition) && input.CurrentMouseState.LeftButton == ButtonState.Pressed || HelperFunctions.CheckIntersection(this.activeModSubMenu.Menu, input.CursorPosition) && input.CurrentMouseState.LeftButton == ButtonState.Pressed) return; if (HelperFunctions.CheckIntersection(this.modSel.Menu, vector2)) { if (this.mouseStateCurrent.ScrollWheelValue > this.mouseStatePrevious.ScrollWheelValue && this.weaponSL.indexAtTop > 0) --this.weaponSL.indexAtTop; if (this.mouseStateCurrent.ScrollWheelValue < this.mouseStatePrevious.ScrollWheelValue && this.weaponSL.indexAtTop + this.weaponSL.entriesToDisplay < this.weaponSL.Entries.Count) ++this.weaponSL.indexAtTop; } if (HelperFunctions.CheckIntersection(this.ArcsButton.R, input.CursorPosition)) ToolTip.CreateTooltip(134, this.ScreenManager); if (this.ArcsButton.HandleInput(input)) { this.ArcsButton.ToggleOn = !this.ArcsButton.ToggleOn; this.ShowAllArcs = this.ArcsButton.ToggleOn; } if (input.Tab) { this.ShowAllArcs = !this.ShowAllArcs; this.ArcsButton.ToggleOn = this.ShowAllArcs; } if (input.CurrentMouseState.RightButton == ButtonState.Pressed && input.LastMouseState.RightButton == ButtonState.Released) { this.StartDragPos = input.CursorPosition; this.cameraVelocity.X = 0.0f; this.cameraVelocity.Y = 0.0f; } if (input.CurrentMouseState.RightButton == ButtonState.Pressed && input.LastMouseState.RightButton == ButtonState.Pressed) { float num1 = input.CursorPosition.X - this.StartDragPos.X; float num2 = input.CursorPosition.Y - this.StartDragPos.Y; this.camera._pos += new Vector2(-num1, -num2); this.StartDragPos = input.CursorPosition; this.cameraPosition.X += -num1; this.cameraPosition.Y += -num2; } else { this.cameraVelocity.X = 0.0f; this.cameraVelocity.Y = 0.0f; } this.cameraVelocity.X = MathHelper.Clamp(this.cameraVelocity.X, -10f, 10f); this.cameraVelocity.Y = MathHelper.Clamp(this.cameraVelocity.Y, -10f, 10f); if (input.Escaped) this.ExitScreen(); if (this.ToggleOverlay) { foreach (SlotStruct slotStruct in this.Slots) { Vector2 spaceFromWorldSpace = this.camera.GetScreenSpaceFromWorldSpace(new Vector2((float)slotStruct.pq.enclosingRect.X, (float)slotStruct.pq.enclosingRect.Y)); if (HelperFunctions.CheckIntersection(new Rectangle((int)spaceFromWorldSpace.X, (int)spaceFromWorldSpace.Y, (int)(16.0 * (double)this.camera.Zoom), (int)(16.0 * (double)this.camera.Zoom)), vector2)) { if (slotStruct.isDummy && slotStruct.parent.module != null) this.HoveredModule = slotStruct.parent.module; else if (slotStruct.module != null) this.HoveredModule = slotStruct.module; if (input.CurrentMouseState.LeftButton == ButtonState.Pressed && input.LastMouseState.LeftButton == ButtonState.Released) { AudioManager.GetCue("simple_beep").Play(); if (this.Debug) { this.DebugAlterSlot(slotStruct.slotReference.Position, this.operation); return; } else if (slotStruct.isDummy && slotStruct.parent.module != null) this.HighlightedModule = slotStruct.parent.module; else if (slotStruct.module != null) this.HighlightedModule = slotStruct.module; } } } } if (HelperFunctions.CheckIntersection(this.upArrow, vector2) && this.mouseStateCurrent.LeftButton == ButtonState.Released && (this.mouseStatePrevious.LeftButton == ButtonState.Pressed && this.scrollPosition > 0)) { --this.scrollPosition; AudioManager.GetCue("blip_click").Play(); foreach (ModuleButton moduleButton in this.ModuleButtons) moduleButton.moduleRect.Y += 128; } if (HelperFunctions.CheckIntersection(this.downArrow, vector2) && this.mouseStateCurrent.LeftButton == ButtonState.Released && this.mouseStatePrevious.LeftButton == ButtonState.Pressed) { ++this.scrollPosition; AudioManager.GetCue("blip_click").Play(); foreach (ModuleButton moduleButton in this.ModuleButtons) moduleButton.moduleRect.Y -= 128; } if (HelperFunctions.CheckIntersection(this.ModuleSelectionArea, vector2)) { if (input.ScrollIn && this.scrollPosition > 0) { --this.scrollPosition; AudioManager.GetCue("blip_click").Play(); foreach (ModuleButton moduleButton in this.ModuleButtons) moduleButton.moduleRect.Y += 128; } if (input.ScrollOut) { ++this.scrollPosition; AudioManager.GetCue("blip_click").Play(); foreach (ModuleButton moduleButton in this.ModuleButtons) moduleButton.moduleRect.Y -= 128; } } if (this.mouseStateCurrent.RightButton == ButtonState.Released && this.mouseStatePrevious.RightButton == ButtonState.Pressed) { //this should actually clear slots this.ActiveModule = (ShipModule)null; foreach (SlotStruct parent in this.Slots) { parent.ShowInvalid = false; parent.ShowValid = false; Vector2 spaceFromWorldSpace = this.camera.GetScreenSpaceFromWorldSpace(new Vector2((float)parent.pq.enclosingRect.X, (float)parent.pq.enclosingRect.Y)); Rectangle rect = new Rectangle((int)spaceFromWorldSpace.X, (int)spaceFromWorldSpace.Y, (int)(16.0 * (double)this.camera.Zoom), (int)(16.0 * (double)this.camera.Zoom)); if ((parent.module != null || parent.isDummy) && HelperFunctions.CheckIntersection(rect, vector2)) //if clicked at this slot { DesignAction designAction = new DesignAction(); designAction.clickedSS = new SlotStruct(); designAction.clickedSS.pq = parent.isDummy ? parent.parent.pq : parent.pq; designAction.clickedSS.Restrictions = parent.Restrictions; designAction.clickedSS.facing = parent.module != null ? parent.module.facing : 0.0f; designAction.clickedSS.ModuleUID = parent.isDummy ? parent.parent.ModuleUID : parent.ModuleUID; designAction.clickedSS.module = parent.module; designAction.clickedSS.slotReference = parent.isDummy ? parent.parent.slotReference : parent.slotReference; this.DesignStack.Push(designAction); AudioManager.GetCue("sub_bass_whoosh").Play(); if (parent.isDummy) this.ClearParentSlot(parent.parent); else this.ClearParentSlot(parent); this.RecalculatePower(); } } } foreach (ModuleButton moduleButton in this.ModuleButtons) { if (HelperFunctions.CheckIntersection(this.ModuleSelectionArea, new Vector2((float)(moduleButton.moduleRect.X + 30), (float)(moduleButton.moduleRect.Y + 30)))) { if (HelperFunctions.CheckIntersection(moduleButton.moduleRect, vector2)) { if (input.InGameSelect) this.SetActiveModule(ResourceManager.GetModule(moduleButton.ModuleUID)); moduleButton.isHighlighted = true; } else moduleButton.isHighlighted = false; } } if (input.CurrentMouseState.LeftButton == ButtonState.Pressed && this.ActiveModule != null) { foreach (SlotStruct slot in this.Slots) { Vector2 spaceFromWorldSpace = this.camera.GetScreenSpaceFromWorldSpace(new Vector2((float)slot.pq.enclosingRect.X, (float)slot.pq.enclosingRect.Y)); if (HelperFunctions.CheckIntersection(new Rectangle((int)spaceFromWorldSpace.X, (int)spaceFromWorldSpace.Y, (int)(16.0 * (double)this.camera.Zoom), (int)(16.0 * (double)this.camera.Zoom)), vector2)) { AudioManager.GetCue("sub_bass_mouseover").Play(); this.InstallModule(slot); } } } else if (this.mouseStateCurrent.LeftButton == ButtonState.Pressed && this.mouseStatePrevious.LeftButton == ButtonState.Pressed) this.HoldTimer -= .01666f; else this.HoldTimer = 0.50f; foreach (SlotStruct slotStruct in this.Slots) { if (slotStruct.ModuleUID != null && this.HighlightedModule != null && (slotStruct.module == this.HighlightedModule && (double)slotStruct.module.FieldOfFire != 0.0) && slotStruct.module.ModuleType == ShipModuleType.Turret) { float num1 = slotStruct.module.FieldOfFire / 2f; Vector2 spaceFromWorldSpace = this.camera.GetScreenSpaceFromWorldSpace(new Vector2((float)(slotStruct.pq.enclosingRect.X + 16 * (int)slotStruct.module.XSIZE / 2), (float)(slotStruct.pq.enclosingRect.Y + 16 * (int)slotStruct.module.YSIZE / 2))); float num2 = Math.Abs(this.findAngleToTarget(spaceFromWorldSpace, vector2)); float num3 = this.HighlightedModule.facing; float num4 = Math.Abs(num2 - num3); if ((double)num4 > (double)num1) { if ((double)num2 > 180.0) num2 = (float)(-1.0 * (360.0 - (double)num2)); if ((double)num3 > 180.0) num3 = (float)(-1.0 * (360.0 - (double)num3)); num4 = Math.Abs(num2 - num3); } if (GlobalStats.AltArcControl) { //The Doctor: ALT (either) + LEFT CLICK to pick and move arcs. This way, it's impossible to accidentally pick the wrong arc, while it's just as responsive and smooth as the original method when you are trying to. if ((double)num4 < (double)num1 && (this.mouseStateCurrent.LeftButton == ButtonState.Pressed && this.mouseStatePrevious.LeftButton == ButtonState.Pressed && ((input.CurrentKeyboardState.IsKeyDown(Keys.LeftAlt) || input.LastKeyboardState.IsKeyDown(Keys.LeftAlt)) || (input.CurrentKeyboardState.IsKeyDown(Keys.RightAlt) || input.LastKeyboardState.IsKeyDown(Keys.RightAlt))))) { this.HighlightedModule.facing = Math.Abs(this.findAngleToTarget(spaceFromWorldSpace, vector2)); } } else { //Delay method if ((double)num4 < (double)num1 && (this.mouseStateCurrent.LeftButton == ButtonState.Pressed && this.mouseStatePrevious.LeftButton == ButtonState.Pressed && this.HoldTimer < 0)) { this.HighlightedModule.facing = Math.Abs(this.findAngleToTarget(spaceFromWorldSpace, vector2)); } } } } foreach (UIButton uiButton in this.Buttons) { if (HelperFunctions.CheckIntersection(uiButton.Rect, vector2)) { uiButton.State = UIButton.PressState.Hover; if (this.mouseStateCurrent.LeftButton == ButtonState.Pressed && this.mouseStatePrevious.LeftButton == ButtonState.Pressed) uiButton.State = UIButton.PressState.Pressed; if (this.mouseStateCurrent.LeftButton == ButtonState.Released && this.mouseStatePrevious.LeftButton == ButtonState.Pressed) { switch (uiButton.Launches) { case "Toggle Overlay": AudioManager.PlayCue("blip_click"); this.ToggleOverlay = !this.ToggleOverlay; continue; case "Save As...": if (this.CheckDesign()) { this.ScreenManager.AddScreen((GameScreen)new DesignManager(this, this.ActiveHull.Name)); continue; } else { AudioManager.PlayCue("UI_Misc20"); this.ScreenManager.AddScreen((GameScreen)new MessageBoxScreen(Localizer.Token(2049))); continue; } case "Load": this.ScreenManager.AddScreen((GameScreen)new LoadDesigns(this)); continue; default: continue; } } } else uiButton.State = UIButton.PressState.Normal; } if (this.ActiveHull != null) { foreach (ToggleButton toggleButton in this.CombatStatusButtons) { if (HelperFunctions.CheckIntersection(toggleButton.r, input.CursorPosition)) { if (toggleButton.HasToolTip) ToolTip.CreateTooltip(toggleButton.WhichToolTip, this.ScreenManager); if (input.InGameSelect) { AudioManager.PlayCue("sd_ui_accept_alt3"); switch (toggleButton.Action) { case "attack": this.CombatState = CombatState.AttackRuns; break; case "arty": this.CombatState = CombatState.Artillery; break; case "hold": this.CombatState = CombatState.HoldPosition; break; case "orbit_left": this.CombatState = CombatState.OrbitLeft; break; case "broadside_left": this.CombatState = CombatState.BroadsideLeft; break; case "orbit_right": this.CombatState = CombatState.OrbitRight; break; case "broadside_right": this.CombatState = CombatState.BroadsideRight; break; case "evade": this.CombatState = CombatState.Evade; break; } } } else toggleButton.Hover = false; switch (toggleButton.Action) { case "attack": toggleButton.Active = this.CombatState == CombatState.AttackRuns; continue; case "arty": toggleButton.Active = this.CombatState == CombatState.Artillery; continue; case "hold": toggleButton.Active = this.CombatState == CombatState.HoldPosition; continue; case "orbit_left": toggleButton.Active = this.CombatState == CombatState.OrbitLeft; continue; case "broadside_left": toggleButton.Active = this.CombatState == CombatState.BroadsideLeft; continue; case "orbit_right": toggleButton.Active = this.CombatState == CombatState.OrbitRight; continue; case "broadside_right": toggleButton.Active = this.CombatState == CombatState.BroadsideRight; continue; case "evade": toggleButton.Active = this.CombatState == CombatState.Evade; continue; default: continue; } } } this.mouseStatePrevious = this.mouseStateCurrent; base.HandleInput(input); } }