public static bool IsEndTargetBelowClimbAngle(OCAction action, OCActionArgs args) { Vector3 sourcePos = args.Source.transform.position; Vector3 endTargetPos = args.EndTarget.transform.position; float angle = Vector3.Angle(endTargetPos - sourcePos, Vector3.up); return(angle > 45.0f); }
public static bool IsEndTargetCloseUp(OCAction action, OCActionArgs args) { Vector3 sourcePosition = args.Source.gameObject.transform.position; Vector3 targetPosition = args.EndTarget.gameObject.transform.position; Vector3 sourceUp = args.Source.gameObject.transform.up; Vector3 distance = targetPosition - sourcePosition; float projection = Vector3.Dot(distance, sourceUp); return(projection >= 0.5f && projection < 2.5f); }
public static bool IsLocalAnimating(OCAction action, OCActionArgs args) { bool isAnimating = false; foreach (OCAnimationEffect afx in action._AnimationEffects) { isAnimating |= afx.Target.animation.IsPlaying(afx.StateName); } return(isAnimating); }
public static bool IsLocalAnimatingAnythingElse(OCAction action, OCActionArgs args) { bool isAnimatingAnythingElse = false; foreach (OCAnimationEffect afx in action._AnimationEffects) { isAnimatingAnythingElse |= afx.IsPlayingButNotThis; } return(isAnimatingAnythingElse); }
public static bool IsEndTargetFarForward(OCAction action, OCActionArgs args) { Vector3 sourcePosition = args.Source.gameObject.transform.position; Vector3 targetPosition = args.EndTarget.gameObject.transform.position; Vector3 sourceForward = args.Source.gameObject.transform.forward; Vector3 distance = targetPosition - sourcePosition; float projection = Vector3.Dot(distance, sourceForward); return(projection >= 3.5f); }
public static bool IsEndTargetMoreRight(OCAction action, OCActionArgs args) { Vector3 sourcePosition = args.Source.gameObject.transform.position; Vector3 targetPosition = args.EndTarget.gameObject.transform.position; Vector3 sourceRight = args.Source.gameObject.transform.right; Vector3 sourceLeft = -args.Source.gameObject.transform.right; Vector3 sourceForward = args.Source.gameObject.transform.forward; Vector3 sourceGoal = targetPosition - sourcePosition; float projectionLeft = Vector3.Dot(sourceGoal, sourceLeft); float projectionRight = Vector3.Dot(sourceGoal, sourceRight); float projectionForward = Vector3.Dot(sourceGoal, sourceForward); return(projectionRight > (projectionLeft) && projectionRight > projectionForward); }
public static bool IsPathOpenForSourceForwardBlockSolid(OCAction action, OCActionArgs args) { OCMap map = (OCMap)GameObject.FindObjectOfType(typeof(OCMap)); CharacterController charController = args.Source.GetComponent <CharacterController>(); return (map.IsPathOpen (args.Source.transform , charController.height , OCMap.PathDirection.ForwardBlockSolid ) ); }
public static bool IsEndTargetAhead(OCAction action, OCActionArgs args) { Vector3 sourcePosition = args.Source.gameObject.transform.position; Vector3 targetPosition = args.EndTarget.gameObject.transform.position; Vector3 sourceUp = args.Source.transform.up; Vector3 sourceForward = args.Source.transform.forward; Vector3 sourceRight = args.Source.transform.right; Vector3 distance = targetPosition - sourcePosition; float projUp = Vector3.Dot(distance, sourceUp); float projForward = Vector3.Dot(distance, sourceForward); float projRight = Vector3.Dot(distance, sourceRight); return(Math.Abs(projUp) < 0.5f && projForward >= 0.5f && Math.Abs(projRight) < 0.5f); }
public static bool IsEndTargetFarForward(OCAction action, OCActionArgs args) { Vector3 sourcePosition = args.Source.gameObject.transform.position; Vector3 targetPosition = args.EndTarget.gameObject.transform.position; Vector3 sourceForward = args.Source.gameObject.transform.forward; Vector3 distance = targetPosition - sourcePosition; float projection = Vector3.Dot(distance, sourceForward); return projection >= 3.5f; }
public static bool IsEndTargetAdjacentBelow(OCAction action, OCActionArgs args) { Vector3 sourcePosition = args.Source.gameObject.transform.position; Vector3 targetPosition = args.EndTarget.gameObject.transform.position; sourcePosition = sourcePosition - args.Source.gameObject.transform.up; Vector3 distance = targetPosition - sourcePosition; return distance.sqrMagnitude <= (1.4f + float.Epsilon); }
public static bool IsSourceNotIdlingAnimation(OCAction action, OCActionArgs args) { return(IsSourceIdlingAnimation(action, args)); }
public static bool IsNotAnimatingAnything(OCAction action, OCActionArgs args) { return(!args.Source.animation.isPlaying); }
public static bool IsSourceOnlyIdling(OCAction action, OCActionArgs args) { return action._ActionController.RunningActions.Where(s => s != "StandIdleShow").Count() == 0; }
public static bool IsSourceNotAnimatingOrRunningAction(OCAction action, OCActionArgs args) { return IsSourceNotAnimating(action, args) || IsSourceRunningAction(action, args); }
public static bool IsEndTargetMoreRight(OCAction action, OCActionArgs args) { Vector3 sourcePosition = args.Source.gameObject.transform.position; Vector3 targetPosition = args.EndTarget.gameObject.transform.position; Vector3 sourceRight = args.Source.gameObject.transform.right; Vector3 sourceLeft = -args.Source.gameObject.transform.right; Vector3 sourceForward = args.Source.gameObject.transform.forward; Vector3 sourceGoal = targetPosition - sourcePosition; float projectionLeft = Vector3.Dot(sourceGoal, sourceLeft); float projectionRight = Vector3.Dot(sourceGoal, sourceRight); float projectionForward = Vector3.Dot(sourceGoal, sourceForward); return projectionRight > (projectionLeft);// && projectionRight > projectionForward; }
public static bool IsEndTargetNotCloseUp(OCAction action, OCActionArgs args) { return(!IsEndTargetCloseUp(action, args)); }
public static bool IsSourceAnimating(OCAction action, OCActionArgs args) { iTween itween = args.Source.GetComponent <iTween>(); return(itween != null && itween.isRunning); }
public static bool IsEndTargetNotFarForward(OCAction action, OCActionArgs args) { return(!IsEndTargetFarForward(action, args)); }
public static bool IsSourceNotAnimating(OCAction action, OCActionArgs args) { return(!IsSourceAnimating(action, args)); }
public static bool IsSourceIdlingAnimation(OCAction action, OCActionArgs args) { return(!args.Source.animation.isPlaying || args.Source.animation.IsPlaying("idle")); }
public static bool IsEndTargetCloseUp(OCAction action, OCActionArgs args) { Vector3 sourcePosition = args.Source.gameObject.transform.position; Vector3 targetPosition = args.EndTarget.gameObject.transform.position; Vector3 sourceUp = args.Source.gameObject.transform.up; Vector3 distance = targetPosition - sourcePosition; float projection = Vector3.Dot(distance, sourceUp); return projection >= 0.5f && projection < 2.5f; }
public static bool IsEndTargetNotAhead(OCAction action, OCActionArgs args) { return(!IsEndTargetAhead(action, args)); }
public static bool IsEndTargetAhead(OCAction action, OCActionArgs args) { Vector3 sourcePosition = args.Source.gameObject.transform.position; Vector3 targetPosition = args.EndTarget.gameObject.transform.position; Vector3 sourceUp = args.Source.transform.up; Vector3 sourceForward = args.Source.transform.forward; Vector3 sourceRight = args.Source.transform.right; Vector3 distance = targetPosition - sourcePosition; float projUp = Vector3.Dot(distance, sourceUp); float projForward = Vector3.Dot(distance, sourceForward); float projRight = Vector3.Dot(distance, sourceRight); return Math.Abs(projUp) < 0.5f && projForward >= 0.5f && Math.Abs(projRight) < 0.5f; }
public static bool IsSourceAnimating(OCAction action, OCActionArgs args) { iTween itween = args.Source.GetComponent<iTween>(); return itween != null && itween.isRunning; }
public static bool IsSourceRunningAction(OCAction action, OCActionArgs args) { return action._ActionController.RunningActions.Count > 0 && action._ActionController.RunningActions.Contains(action.FullName); }
public static bool IsSourceAngry(OCAction action, OCActionArgs args) { OCPhysiologicalModel model = GameObject.FindGameObjectWithTag("OCAGI").GetComponent<OCPhysiologicalModel>(); return model.Energy < 0.9; }
public static bool DoesSourceNeedToTellEndTarget(OCAction action, OCActionArgs args) { return UnityEngine.Random.Range(0,100) > 75 && !action._ActionController.RunningActions.Contains("StandIdleTell"); }
public static bool IsSourceNotIdlingAnimation(OCAction action, OCActionArgs args) { return IsSourceIdlingAnimation(action, args); }
public static bool IsSourceRunningOtherActionsIgnoreIdle(OCAction action, OCActionArgs args) { return action._ActionController.RunningActions.Where(s => s != action.FullName && s != "StandIdleShow").Count() > 0; }
public static bool IsPathOpenForSourceForwardBlockSolid(OCAction action, OCActionArgs args) { OCMap map = OCMap.Instance; CharacterController charController = args.Source.GetComponent<CharacterController>(); return map.IsPathOpen ( args.Source.transform , charController.height , OCMap.PathDirection.ForwardBlockSolid , default(Vector3i) ) ; }
public static bool IsNotAnimatingAnything(OCAction action, OCActionArgs args) { return !args.Source.animation.isPlaying; }
public static bool IsNoEndTargetOrNotAnimating(OCAction action, OCActionArgs args) { return(IsSourceNotAnimating(action, args) || IsNoEndTarget(action, args)); }
public static bool IsSourceNotAnimating(OCAction action, OCActionArgs args) { return !IsSourceAnimating(action, args); }
public static bool IsEndTarget(OCAction action, OCActionArgs args) { return(args.EndTarget.transform.position != Vector3.zero); }
public static bool IsNoEndTargetOrNotAnimating(OCAction action, OCActionArgs args) { return IsSourceNotAnimating(action, args) || IsNoEndTarget(action, args); }
public static bool IsSourceRunningAction(OCAction action, OCActionArgs args) { return(action._ActionController.RunningActions.Count > 0 && action._ActionController.RunningActions.Contains(action.FullName)); }
public static bool IsSourceIdlingAnimation(OCAction action, OCActionArgs args) { return !args.Source.animation.isPlaying || args.Source.animation.IsPlaying("idle"); }
public static bool IsSourceNotRunningAction(OCAction action, OCActionArgs args) { return(!IsSourceRunningAction(action, args)); }
public static bool IsPathOpenForSourceAdjacentBlockSolid(OCAction action, OCActionArgs args) { OCMap map = OCMap.Instance; CharacterController charController = args.Source.GetComponent<CharacterController>(); return map.IsPathOpen ( args.Source.transform , charController.height , OCMap.PathDirection.AdjacentBlockSolid , VectorUtil.Vector3ToVector3i(args.EndTarget.transform.position) ) ; }
public static bool IsSourceNotAnimatingOrRunningAction(OCAction action, OCActionArgs args) { return(IsSourceNotAnimating(action, args) || IsSourceRunningAction(action, args)); }
public static bool IsEndTargetRight(OCAction action, OCActionArgs args) { Vector3 sourcePosition = args.Source.gameObject.transform.position; Vector3 targetPosition = args.EndTarget.gameObject.transform.position; Vector3 sourceRight = args.Source.gameObject.transform.right; Vector3 distance = targetPosition - sourcePosition; float projection = Vector3.Dot(distance, sourceRight); return projection >= 0.5f; }
public static bool IsSourceIdling(OCAction action, OCActionArgs args) { return(action._ActionController.RunningActions.Contains("StandIdleShow")); }
public static bool IsEndTargetNotFarForward(OCAction action, OCActionArgs args) { return !IsEndTargetFarForward(action, args); }
public static bool DoesSourceNeedToTellEndTarget(OCAction action, OCActionArgs args) { return(UnityEngine.Random.Range(0, 100) > 75 && !action._ActionController.RunningActions.Contains("StandIdleTell")); }
public static bool IsEndTargetNotCloseUp(OCAction action, OCActionArgs args) { return !IsEndTargetCloseUp(action, args); }
public static bool IsSourceRunningOtherActions(OCAction action, OCActionArgs args) { return(action._ActionController.RunningActions.Where(s => s != action.FullName).Count() > 0); }
public static bool IsEndTargetNotAhead(OCAction action, OCActionArgs args) { return !IsEndTargetAhead(action, args); }
public static bool IsSourceOnlyIdling(OCAction action, OCActionArgs args) { return(action._ActionController.RunningActions.Where(s => s != "StandIdleShow").Count() == 0); }
public static bool IsEndTarget(OCAction action, OCActionArgs args) { return args.EndTarget.transform.position != Vector3.zero; }
public static bool IsSourceNotOnlyIdling(OCAction action, OCActionArgs args) { return(!IsSourceOnlyIdling(action, args)); }
public static bool IsSourceNotRunningAction(OCAction action, OCActionArgs args) { return !IsSourceRunningAction(action, args); }
public static bool IsSourceRunningOtherActionsIgnoreIdle(OCAction action, OCActionArgs args) { return(action._ActionController.RunningActions.Where(s => s != action.FullName && s != "StandIdleShow").Count() > 0); }
public static bool IsSourceIdling(OCAction action, OCActionArgs args) { return action._ActionController.RunningActions.Contains("StandIdleShow"); }
public static bool IsSourceNotRunningOtherActionsIgnoreIdle(OCAction action, OCActionArgs args) { return(!IsSourceRunningOtherActionsIgnoreIdle(action, args)); }
public static bool IsSourceRunningOtherActions(OCAction action, OCActionArgs args) { return action._ActionController.RunningActions.Where(s => s != action.FullName).Count() > 0; }
//--------------------------------------------------------------------------- #endregion //--------------------------------------------------------------------------- #region Private Member Functions //--------------------------------------------------------------------------- private ActionStatus Execute() { ActionStatus retVal = ActionStatus.NONE; // Checks if all Preconditions are true. if (ShouldStart) { return(StartAction()); //retVal = StartAction(); } // Checks if all Invariants are true. if (ShouldContinue && retVal == ActionStatus.NONE) { return(ContinueAction()); //retVal = ContinueAction(); } // Checks if all Postconditions are true. if (ShouldEnd && retVal == ActionStatus.NONE) { return(EndAction()); //retVal = EndAction(); } // if(Descriptors.Contains("Idle") && _EndTarget.transform.position != Vector3.zero && retVal == ActionStatus.NONE) // { // return ActionStatus.FAILURE; // } // else if(retVal != ActionStatus.NONE) // return retVal; OCActionArgs args = null; if (_ActionController.Step != null) { args = _ActionController.Step.Arguments; } if (!_blockOnFail) { if (IsSourceRunningAction(this, null)) { Debug.Log(" -- Action Failed, but will not block: " + FullName); // if(args.ActionPlanID != null) // OCConnectorSingleton.Instance.SendActionStatus(args.ActionPlanID, args.SequenceID, args.ActionName, true); } return(ActionStatus.SUCCESS); } else if (args == null || args.ActionPlanID == null) { if (IsSourceRunningAction(this, null)) { Debug.LogWarning(" -- Action Failed: " + FullName); } return(ActionStatus.FAILURE); } // else if(IsSourceNotRunningAction(this, null)) // { // if(_ActionController.Step.Behaviour.Name == "Character.Move" || args.ActionName == "walk" || args.ActionName == "jump_toward") // { // Vector3 endTargetPos = args.EndTarget.transform.position; // Vector3 sourceTargetPos = args.Source.transform.position; // // sourceTargetPos.y -= 0.5f; // // if(args.EndTarget.transform.position == Vector3.zero || endTargetPos == sourceTargetPos) // { // OCConnectorSingleton.Instance.SendActionStatus(args.ActionPlanID, args.SequenceID, args.ActionName, true); // return ActionStatus.SUCCESS; // } // } // // if(_ActionController.Step.Behaviour.Name == "Character.TurnAndDestroy" || args.ActionName == "grab" || args.ActionName == "eat") // { // if(args.EndTarget.transform.position == Vector3.zero) // { // OCConnectorSingleton.Instance.SendActionStatus(args.ActionPlanID, args.SequenceID, args.ActionName, true); // return ActionStatus.SUCCESS; // } // } // // return ActionStatus.FAILURE; // } return(ActionStatus.FAILURE); }
public static bool IsSourceNotOnlyIdling(OCAction action, OCActionArgs args) { return !IsSourceOnlyIdling(action, args); }
private ActionStatus EndAction() { //OCLogger.Debugging("Ending the " + FullName + " Action."); OCActionArgs args = null; if (_ActionController.Step != null) { args = _ActionController.Step.Arguments; } if (_blockOnFail && _blockOnRunning) { _ActionController.RunningActions.Remove(FullName); } // End animation effects // foreach(OCAnimationEffect afx in _AnimationEffects) // { // afx.Stop(); // } foreach (OCDestroyBlockEffect dbfx in _DestroyBlockEffects) { Vector3i forward = VectorUtil.Vector3ToVector3i(_Source.transform.position + _Source.transform.forward); Vector3i forwardUp = VectorUtil.Vector3ToVector3i(_Source.transform.position + _Source.transform.forward + _Source.transform.up); Vector3i forwardUp2x = VectorUtil.Vector3ToVector3i(_Source.transform.position + _Source.transform.forward + 2 * _Source.transform.up); OCBlockData forwardBlock = _Map.GetBlock(forward); OCBlockData forwardUpBlock = _Map.GetBlock(forwardUp); OCBlockData forwardUp2xBlock = _Map.GetBlock(forwardUp2x); dbfx.DestroyBlock(forward); dbfx.DestroyBlock(forwardUp); dbfx.DestroyBlock(forwardUp2x); args.EndTarget.transform.position = Vector3.zero; args.StartTarget.transform.position = Vector3.zero; // This is just some example code for you Lake, that you can use to give energy to the robot after consuming a battery. if ((forwardBlock.block != null && forwardBlock.block.GetName() == "Battery") || (forwardUpBlock.block != null && forwardUpBlock.block.GetName() == "Battery") || (forwardUp2xBlock.block != null && forwardUp2xBlock.block.GetName() == "Battery")) { UnityEngine.GameObject[] agiArray = UnityEngine.GameObject.FindGameObjectsWithTag("OCAGI"); for (int iAGI = 0; iAGI < agiArray.Length; iAGI++) { UnityEngine.GameObject agiObject = agiArray[iAGI]; //args.EndTarget = agiObject; OCPhysiologicalModel agiPhysModel = agiObject.GetComponent <OCPhysiologicalModel>(); OCPhysiologicalEffect batteryEatEffect = new OCPhysiologicalEffect(OCPhysiologicalEffect.CostLevel.NONE); batteryEatEffect.EnergyIncrease = 0.2f; agiPhysModel.ProcessPhysiologicalEffect(batteryEatEffect); break; } } } //@TODO: Fix this hack... if (Descriptors.Contains("Jump") || Descriptors.Contains("Climb") || Descriptors.Contains("Fall")) { OCCharacterMotor motor = _Source.GetComponent <OCCharacterMotor>(); motor.enabled = true; } if (!Descriptors.Contains("Idle")) { Debug.LogWarning("Ending Action: " + FullName); } // if(args.ActionPlanID != null) // OCConnectorSingleton.Instance.SendActionStatus(args.ActionPlanID, args.SequenceID, args.ActionName, true); return(ActionStatus.SUCCESS); }
public static bool IsSourceNotRunningOtherActionsIgnoreIdle(OCAction action, OCActionArgs args) { return !IsSourceRunningOtherActionsIgnoreIdle(action, args); }
public static bool IsLocalNotAnimatingAnythingElse(OCAction action, OCActionArgs args) { return !IsLocalAnimatingAnythingElse(action, args); }