bool AIShipIsInMaxRange(AI_Ship ship) { if (components.Count(comp => comp is Component_Weapon) == 0) return false; float maxWeaponRange = components .Where(comp => comp is Component_Weapon) .Select(comp => (Component_Weapon)comp) .Max(weapon => weapon.range); float distance = Vector3.Distance(ship.transform.position, trans.position); return distance <= maxWeaponRange; }
void aiShip_OnShipMouseEnter(AI_Ship ship) { if(AIShipIsInMaxRange(ship)) { combatInterface.SetCursorType(CursorType.Attack); } else { combatInterface.SetCursorType(CursorType.Invalid); } ship.ShowHPBars(true); }
void aiShip_OnShipClick(AI_Ship ship) { if (AIShipIsInMaxRange(ship)) { Debug.Log("on Ship click " + ship); TutorialSystem.Instance.ShowTutorial(TutorialSystem.TutorialType.ClickEnemyToEngage, false); combatInterface.SetCursorType(CursorType.Default); ship.ShowHPBars(false); targetShip = ship; ChangeState(PlayerState.TargetingEnemy); } }
private IEnumerator ComponentSelectionAndTargeting() { //stop listening to mouse events on ai ships SubscribeToAIShipMouseEvents(false); //show enemy target int targetShipIndex = 0; List<AI_Ship> aiShips = TurnBasedCombatSystem.Instance.ai_Ships; int numAIShips = aiShips.Count; #if FULL_DEBUG if (numAIShips == 0) { Debug.LogError("No ai ships found"); } #endif //targetShip = aiShips[targetShipIndex]; targetShipIndex = aiShips.IndexOf(targetShip); Transform aiTargetTrans = targetShip.transform; spaceGround.Display(false); //camera yield return StartCoroutine(CameraDirector.Instance.OverheadAimAt(trans, aiTargetTrans, GlobalVars.CameraAimAtPeriod)); //show comp seleciton panel combatInterface.EnableComponentSelectionPanel(true); combatInterface.ShowComponentSelectionPanel(true); //show hotkeys //combatInterface.ShowComponentHotkeyButtons(SelectAllComponents, components.Where(c => c.CanActivate)); ShowTargetingPanel(true); trans.LookAt(aiTargetTrans); InputManager.Instance.RegisterKeysDown(TargetNext, KeyCode.Tab); InputManager.Instance.RegisterKeysDown(StopTargetingSequence, KeyCode.Escape); TutorialSystem.Instance.ShowNextTutorial(TutorialSystem.TutorialType.ClickEnemyToEngage); while (!attackTargetConfirmed) { if (stopTargetingSequence) { startTargetingSequence = false; stopTargetingSequence = false; targetComponent = null; ShowTargetingPanel(false); combatInterface.ShowComponentSelectionPanel(false); InputManager.Instance.DeregisterKeysDown(TargetNext, KeyCode.Tab); InputManager.Instance.DeregisterKeysDown(StopTargetingSequence, KeyCode.Escape); yield return StartCoroutine(CameraDirector.Instance.MoveToFocusOn(trans, GlobalVars.CameraMoveToFocusPeriod)); break; } if (targetNext) { ShowTargetingPanel(false); targetShipIndex = ++targetShipIndex % numAIShips; targetShip = aiShips[targetShipIndex]; ShowTargetingPanel(true); aiTargetTrans = targetShip.transform; yield return StartCoroutine(CameraDirector.Instance.OverheadAimAt(trans, aiTargetTrans, GlobalVars.CameraAimAtPeriod)); trans.LookAt(aiTargetTrans); targetNext = false; } yield return null; } ShowTargetingPanel(false); SubscribeToAIShipMouseEvents(true); combatInterface.ShowComponentSelectionPanel(false); InputManager.Instance.DeregisterKeysDown(TargetNext, KeyCode.Tab); InputManager.Instance.DeregisterKeysDown(StopTargetingSequence, KeyCode.Escape); }
void aiShip_OnShipMouseExit(AI_Ship ship) { combatInterface.SetCursorType(CursorType.Default); ship.ShowHPBars(false); }
void aiShip_OnShipMouseEnter(AI_Ship ship) { if (!startTargetingSequence) { combatInterface.SetCursorType(CursorType.Attack); ship.ShowHPBars(true); } }
void aiShip_OnShipClick(AI_Ship ship) { combatInterface.SetCursorType(CursorType.Default); startTargetingSequence = true; targetShip = ship; Debug.Log("on Ship click " + ship); ship.ShowHPBars(false); }
//Waits for the player to select the target ship and target component to fire the selected weapons at private IEnumerator WeaponTargetingSequence() { targetShipIndex = 0; targetConfirmed = false; targetComponent = null; List<AI_Ship> ai_ships = TurnBasedCombatSystem.Instance.ai_Ships; numAiShips = ai_ships.Count; //Debug.Log(targetShipIndex); targetShip = ai_ships[targetShipIndex]; Transform aiTargetTrans; #if UNITY_EDITOR Debug.Log("Select Target to fire upon: [Click] to confirm, [Esc] to cancel, [Tab] to switch targets"); #endif #if !NO_DEBUG if (numAiShips == 0) { Debug.LogError("No ai ships found"); } #endif //aims camera at the ship that is currently targeted aiTargetTrans = targetShip.transform; yield return StartCoroutine(CameraDirector.Instance.OverheadAimAt(trans, aiTargetTrans, GlobalVars.CameraAimAtPeriod)); trans.LookAt(aiTargetTrans); //shows the targeting panel for the target ship TargetShip(targetShip, true); //runs until a targetcomponent is successfully confirmed (until a component is clicked on) while(!targetConfirmed) { //end targeting sequence upon hitting Esc if (Input.GetKeyDown(KeyCode.Escape)) { TargetShip(targetShip, false); targetConfirmed = true; targetComponent = null; } //switch to the next ai ship if (Input.GetKeyDown(KeyCode.Tab)) { TargetShip(targetShip, false); targetShipIndex = ++targetShipIndex % numAiShips; targetShip = ai_ships[targetShipIndex]; TargetShip(targetShip, true); //aims camera at the ship that is currently targeted aiTargetTrans = targetShip.transform; yield return StartCoroutine(CameraDirector.Instance.OverheadAimAt(trans, aiTargetTrans, GlobalVars.CameraAimAtPeriod)); trans.LookAt(aiTargetTrans); } yield return null; }//while }