public override bool Update() { bool isValid = ActionUtils.IsValidTarget(TargetId); if (m_Parent.RunningActions.RunningActionCount == 1 && !m_Movement.IsMoving() && isValid) { //we're the only action running, and we're not moving, so let's swivel to face our target, just to be cool! FaceTarget(TargetId); } return(isValid); }
/// <summary> /// When you right-click on something you will want to do contextually different things. For example you might attack an enemy, /// but revive a friend. You might also decide to do nothing (e.g. right-clicking on a friend who hasn't FAINTED). /// </summary> /// <param name="hit">The Transform of the entity we clicked on, or null if none.</param> /// <param name="actionType">The Action to build for</param> /// <param name="triggerStyle">How did this skill play get triggered? Mouse, Keyboard, UI etc.</param> /// <param name="resultData">Out parameter that will be filled with the resulting action, if any.</param> /// <returns>true if we should play an action, false otherwise. </returns> private bool GetActionRequestForTarget(Transform hit, ActionType actionType, SkillTriggerStyle triggerStyle, out ActionRequestData resultData) { resultData = new ActionRequestData(); var targetNetObj = hit != null?hit.GetComponent <NetworkObject>() : null; //if we can't get our target from the submitted hit transform, get it from our stateful target in our NetworkCharacterState. if (!targetNetObj && actionType != ActionType.GeneralTarget) { ulong targetId = m_NetworkCharacter.TargetId.Value; NetworkSpawnManager.SpawnedObjects.TryGetValue(targetId, out targetNetObj); } //sanity check that this is indeed a valid target. if (targetNetObj == null || !ActionUtils.IsValidTarget(targetNetObj.NetworkObjectId)) { return(false); } var targetNetState = targetNetObj.GetComponent <NetworkCharacterState>(); if (targetNetState != null) { //Skill1 may be contextually overridden if it was generated from a mouse-click. if (actionType == CharacterData.Skill1 && triggerStyle == SkillTriggerStyle.MouseClick) { if (!targetNetState.IsNpc && targetNetState.NetworkLifeState.Value == LifeState.Fainted) { //right-clicked on a downed ally--change the skill play to Revive. actionType = ActionType.GeneralRevive; } } } // record our target in case this action uses that info (non-targeted attacks will ignore this) resultData.ActionTypeEnum = actionType; resultData.TargetIds = new ulong[] { targetNetObj.NetworkObjectId }; PopulateSkillRequest(targetNetObj.transform.position, actionType, ref resultData); return(true); }