private void IssueMoveOrderToUnit(Unit objectHandler, GameObject hitObject, Vector3 hitPoint, Vector3 formationOffset) { var handlerStateController = objectHandler.GetStateController(); if (handlerStateController && hitPoint != ResourceManager.InvalidPosition) { Vector3 idealDestination = hitPoint + formationOffset; if (!WorkManager.ObjectIsGround(hitObject)) { Vector3?onNavMeshDest = WorkManager.GetClosestPointOnNavMesh(hitPoint, "Walkable", 7); if (onNavMeshDest.HasValue) { idealDestination = onNavMeshDest.Value; } } Vector3 actualDestination = hitPoint; Vector3 destDifference = hitPoint - idealDestination; for (int i = 0; i < 5; i++) { var potentialDest = WorkManager.GetClosestPointOnNavMesh(idealDestination + (destDifference / 4 * i), "Walkable", 2); if (potentialDest.HasValue) { actualDestination = potentialDest.Value; break; } } EventManager.TriggerEvent(EventNames.RELOCATE_UNIT); InputToCommandManager.ToBusyState(targetManager, handlerStateController, actualDestination); } }
private void SwitchFormationType() { if (Input.GetButtonDown(InputNames.SWITCH_FORMATION) || (Gamepad.GetButton(InputNames.SELECTION_MODIFIER) && Gamepad.GetButtonDown(InputNames.ABILITY1))) { EventManager.TriggerEvent(EventNames.SWITCH_FORMATION_COMMAND); InputToCommandManager.SwitchFormationType(formationManager); } }
private void SwitchHoldPosition() { if (Input.GetButtonDown(InputNames.HOLD_POSITION) || (Gamepad.GetButton(InputNames.SELECTION_MODIFIER) && Gamepad.GetButtonDown(InputNames.ABILITY2))) { EventManager.TriggerEvent(EventNames.SWITCH_HOLD_POSIITON_COMMAND); InputToCommandManager.SwitchHoldPosition(player); } }
private void StopUnits() { if (Input.GetButtonDown(InputNames.STOP_UNITS) || (Gamepad.GetButton(InputNames.SELECTION_MODIFIER) && Gamepad.GetButtonDown(InputNames.ABILITY4))) { EventManager.TriggerEvent(EventNames.STOP_COMMAND); InputToCommandManager.StopUnits(player, targetManager); } }
private void AttackModeSelection() { if (player.selectedAllyTargettingAbility == null && (Input.GetButtonDown(InputNames.ATTACK_MODE) || Gamepad.GetButtonDown(InputNames.ATTACK_MODE))) { // get all the objects controlled through AI var stateControlles = player.GetComponentsInChildren <UnitStateController>(); EventManager.TriggerEvent(EventNames.SWITCH_ATTACK_MODE_COMMAND); InputToCommandManager.SwitchAttackMode(targetManager, new List <UnitStateController>(stateControlles)); } }
private void WorldObjectMouseClick(WorldObject objectHandler, GameObject hitObject, Vector3 hitPoint) { //only handle input if currently selected if (objectHandler.IsSelected() && !WorkManager.ObjectIsGround(hitObject)) { if (!hitObject.transform.parent) { return; } WorldObject worldObject = hitObject.transform.parent.GetComponent <WorldObject>(); //clicked on another selectable object if (worldObject) { Player owner = hitObject.transform.root.GetComponent <Player>(); if (owner) { //the object is controlled by a player // get owner of the object handler Player objectHandlerOwner = objectHandler.GetComponentInParent <Player>(); if (objectHandlerOwner && player && objectHandlerOwner.username == player.username && player.human) { //this object is controlled by a human player var handlerStateController = objectHandler.GetStateController(); //start attack if object is not owned by the same player and this object can attack, else select if (handlerStateController && player.username != owner.username && objectHandler.CanAttack()) { InputToCommandManager.ToChaseState(targetManager, handlerStateController, worldObject); } else { IssueMoveOrderToSelectedUnits(hitObject, hitPoint); } } } else if (objectHandler.CanAttack()) { if (!hitObject.transform.parent) { return; } Unit unit = hitObject.transform.parent.GetComponent <Unit>(); Building building = hitObject.transform.parent.GetComponent <Building>(); BossPart bossPart = hitObject.transform.parent.GetComponent <BossPart>(); var handlerStateController = objectHandler.GetStateController(); if ((unit || building || bossPart) && handlerStateController) { InputToCommandManager.ToChaseState(targetManager, handlerStateController, worldObject); } } // else ChangeSelection(objectHandler, worldObject); } } }
private void SwitchEnemy() { if (Input.GetButtonDown(InputNames.NEXT_ENEMY) || (Gamepad.GetButton(InputNames.SELECTION_MODIFIER) && Gamepad.GetButtonDown(InputNames.ABILITY3))) { var majorVisibleEnemies = UnitManager.GetPlayerVisibleMajorEnemies(player).Cast <WorldObject>(); var visibleBuildings = UnitManager.GetVisibleEnemyBuildings(player); var visibleBossParts = UnitManager.GetVisibleEnemyBossParts(player); var enemiesToDisplay = majorVisibleEnemies .Concat(visibleBuildings) .Concat(visibleBossParts) .ToList(); enemiesToDisplay.Sort((a, b) => a.ObjectId - b.ObjectId); if (targetManager) { int selectionIdx = WorkManager.GetTargetSelectionIndex(targetManager.SingleTarget, enemiesToDisplay); EventManager.TriggerEvent(EventNames.SWITCH_ENEMY_COMMAND); InputToCommandManager.SwitchEnemy(targetManager, enemiesToDisplay, selectionIdx); } } }