protected virtual void UseRangeWeapon() { if (target.CanAttack() && target.state != WOState.Attacking) { target.BeginAttack(this); } }
public static void HandleSingleModeAttack(StateController controller) { WorldObject controlledObject = controller.controlledObject; WorldObject chaseTarget = controller.chaseTarget; // if no target or canot attack, return if (chaseTarget == null || !controlledObject.CanAttack()) { return; } Vector3 currentPosition = controlledObject.transform.position; Vector3 currentEnemyPosition = WorkManager.GetTargetClosestPoint(controlledObject, chaseTarget); Vector3 direction = currentEnemyPosition - currentPosition; if ( direction.sqrMagnitude < controlledObject.weaponRange * controlledObject.weaponRange ) { controller.attacking = true; controlledObject.PerformAttack(chaseTarget); } else { controller.attacking = false; } // controller.MarkChaseTarget(); }
private bool ListenToFriendsTarget(StateController controller) { WorldObject unit = controller.controlledObject; Vector3 currentPosition = unit.transform.position; if (unit.CanAttack()) { // if there is no common target, look for nearby enemies foreach (WorldObject nearbyObject in controller.nearbyAllies) { if ( nearbyObject && unit.ObjectId != nearbyObject.ObjectId && nearbyObject.GetStateController() && nearbyObject.GetStateController().chaseTarget ) { controller.chaseTarget = nearbyObject.GetStateController().chaseTarget; return(true); } } } return(false); }
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); } } }