コード例 #1
0
            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);
            }
コード例 #2
0
            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);
            }
コード例 #3
0
            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);
            }
コード例 #4
0
            public static bool IsLocalAnimatingAnythingElse(OCAction action, OCActionArgs args)
            {
                bool isAnimatingAnythingElse = false;

                foreach (OCAnimationEffect afx in action._AnimationEffects)
                {
                    isAnimatingAnythingElse |= afx.IsPlayingButNotThis;
                }

                return(isAnimatingAnythingElse);
            }
コード例 #5
0
            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);
            }
コード例 #6
0
            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);
            }
コード例 #7
0
            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
                         )
                    );
            }
コード例 #8
0
            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);
            }
コード例 #9
0
	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;
	}
コード例 #10
0
	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);
	}
コード例 #11
0
 public static bool IsSourceNotIdlingAnimation(OCAction action, OCActionArgs args)
 {
     return(IsSourceIdlingAnimation(action, args));
 }
コード例 #12
0
 public static bool IsNotAnimatingAnything(OCAction action, OCActionArgs args)
 {
     return(!args.Source.animation.isPlaying);
 }
コード例 #13
0
	public static bool IsSourceOnlyIdling(OCAction action, OCActionArgs args)
	{
		return action._ActionController.RunningActions.Where(s => s != "StandIdleShow").Count() == 0;
	}
コード例 #14
0
	public static bool IsSourceNotAnimatingOrRunningAction(OCAction action, OCActionArgs args)
	{
		return IsSourceNotAnimating(action, args) || IsSourceRunningAction(action, args);
	}
コード例 #15
0
	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;
	}
コード例 #16
0
 public static bool IsEndTargetNotCloseUp(OCAction action, OCActionArgs args)
 {
     return(!IsEndTargetCloseUp(action, args));
 }
コード例 #17
0
            public static bool IsSourceAnimating(OCAction action, OCActionArgs args)
            {
                iTween itween = args.Source.GetComponent <iTween>();

                return(itween != null && itween.isRunning);
            }
コード例 #18
0
 public static bool IsEndTargetNotFarForward(OCAction action, OCActionArgs args)
 {
     return(!IsEndTargetFarForward(action, args));
 }
コード例 #19
0
 public static bool IsSourceNotAnimating(OCAction action, OCActionArgs args)
 {
     return(!IsSourceAnimating(action, args));
 }
コード例 #20
0
 public static bool IsSourceIdlingAnimation(OCAction action, OCActionArgs args)
 {
     return(!args.Source.animation.isPlaying || args.Source.animation.IsPlaying("idle"));
 }
コード例 #21
0
	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;
	}
コード例 #22
0
 public static bool IsEndTargetNotAhead(OCAction action, OCActionArgs args)
 {
     return(!IsEndTargetAhead(action, args));
 }
コード例 #23
0
	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;
	}
コード例 #24
0
	public static bool IsSourceAnimating(OCAction action, OCActionArgs args)
	{
		iTween itween = args.Source.GetComponent<iTween>();
		return itween != null && itween.isRunning;
	}
コード例 #25
0
	public static bool IsSourceRunningAction(OCAction action, OCActionArgs args)
	{
		return action._ActionController.RunningActions.Count > 0 && action._ActionController.RunningActions.Contains(action.FullName);
	}
コード例 #26
0
	public static bool IsSourceAngry(OCAction action, OCActionArgs args)
	{
		OCPhysiologicalModel model = GameObject.FindGameObjectWithTag("OCAGI").GetComponent<OCPhysiologicalModel>();
		return model.Energy < 0.9;
	}
コード例 #27
0
	public static bool DoesSourceNeedToTellEndTarget(OCAction action, OCActionArgs args)
	{
		return UnityEngine.Random.Range(0,100) > 75 && !action._ActionController.RunningActions.Contains("StandIdleTell");
	}
コード例 #28
0
	public static bool IsSourceNotIdlingAnimation(OCAction action, OCActionArgs args)
	{
		return IsSourceIdlingAnimation(action, args);
	}
コード例 #29
0
	public static bool IsSourceRunningOtherActionsIgnoreIdle(OCAction action, OCActionArgs args)
	{
		return action._ActionController.RunningActions.Where(s => s != action.FullName && s != "StandIdleShow").Count() > 0;
	}
コード例 #30
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)
			)
		;
	}
コード例 #31
0
	public static bool IsNotAnimatingAnything(OCAction action, OCActionArgs args)
	{
		return !args.Source.animation.isPlaying;
	}
コード例 #32
0
 public static bool IsNoEndTargetOrNotAnimating(OCAction action, OCActionArgs args)
 {
     return(IsSourceNotAnimating(action, args) || IsNoEndTarget(action, args));
 }
コード例 #33
0
	public static bool IsSourceNotAnimating(OCAction action, OCActionArgs args)
	{
		return !IsSourceAnimating(action, args);
	}
コード例 #34
0
 public static bool IsEndTarget(OCAction action, OCActionArgs args)
 {
     return(args.EndTarget.transform.position != Vector3.zero);
 }
コード例 #35
0
	public static bool IsNoEndTargetOrNotAnimating(OCAction action, OCActionArgs args)
	{
		return IsSourceNotAnimating(action, args) || IsNoEndTarget(action, args);
	}
コード例 #36
0
 public static bool IsSourceRunningAction(OCAction action, OCActionArgs args)
 {
     return(action._ActionController.RunningActions.Count > 0 && action._ActionController.RunningActions.Contains(action.FullName));
 }
コード例 #37
0
	public static bool IsSourceIdlingAnimation(OCAction action, OCActionArgs args)
	{
		return !args.Source.animation.isPlaying || args.Source.animation.IsPlaying("idle");
	}
コード例 #38
0
 public static bool IsSourceNotRunningAction(OCAction action, OCActionArgs args)
 {
     return(!IsSourceRunningAction(action, args));
 }
コード例 #39
0
	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)
				 )
				;
	}
コード例 #40
0
 public static bool IsSourceNotAnimatingOrRunningAction(OCAction action, OCActionArgs args)
 {
     return(IsSourceNotAnimating(action, args) || IsSourceRunningAction(action, args));
 }
コード例 #41
0
	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;
	}
コード例 #42
0
 public static bool IsSourceIdling(OCAction action, OCActionArgs args)
 {
     return(action._ActionController.RunningActions.Contains("StandIdleShow"));
 }
コード例 #43
0
	public static bool IsEndTargetNotFarForward(OCAction action, OCActionArgs args)
	{
		return !IsEndTargetFarForward(action, args);
	}
コード例 #44
0
 public static bool DoesSourceNeedToTellEndTarget(OCAction action, OCActionArgs args)
 {
     return(UnityEngine.Random.Range(0, 100) > 75 && !action._ActionController.RunningActions.Contains("StandIdleTell"));
 }
コード例 #45
0
	public static bool IsEndTargetNotCloseUp(OCAction action, OCActionArgs args)
	{
		return !IsEndTargetCloseUp(action, args);
	}
コード例 #46
0
 public static bool IsSourceRunningOtherActions(OCAction action, OCActionArgs args)
 {
     return(action._ActionController.RunningActions.Where(s => s != action.FullName).Count() > 0);
 }
コード例 #47
0
	public static bool IsEndTargetNotAhead(OCAction action, OCActionArgs args)
	{
		return !IsEndTargetAhead(action, args);
	}
コード例 #48
0
 public static bool IsSourceOnlyIdling(OCAction action, OCActionArgs args)
 {
     return(action._ActionController.RunningActions.Where(s => s != "StandIdleShow").Count() == 0);
 }
コード例 #49
0
	public static bool IsEndTarget(OCAction action, OCActionArgs args)
	{
		return args.EndTarget.transform.position != Vector3.zero;
	}
コード例 #50
0
 public static bool IsSourceNotOnlyIdling(OCAction action, OCActionArgs args)
 {
     return(!IsSourceOnlyIdling(action, args));
 }
コード例 #51
0
	public static bool IsSourceNotRunningAction(OCAction action, OCActionArgs args)
	{
		return !IsSourceRunningAction(action, args);
	}
コード例 #52
0
 public static bool IsSourceRunningOtherActionsIgnoreIdle(OCAction action, OCActionArgs args)
 {
     return(action._ActionController.RunningActions.Where(s => s != action.FullName && s != "StandIdleShow").Count() > 0);
 }
コード例 #53
0
	public static bool IsSourceIdling(OCAction action, OCActionArgs args)
	{
		return action._ActionController.RunningActions.Contains("StandIdleShow");
	}
コード例 #54
0
 public static bool IsSourceNotRunningOtherActionsIgnoreIdle(OCAction action, OCActionArgs args)
 {
     return(!IsSourceRunningOtherActionsIgnoreIdle(action, args));
 }
コード例 #55
0
	public static bool IsSourceRunningOtherActions(OCAction action, OCActionArgs args)
	{
		return action._ActionController.RunningActions.Where(s => s != action.FullName).Count() > 0;
	}
コード例 #56
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);
            }
コード例 #57
0
	public static bool IsSourceNotOnlyIdling(OCAction action, OCActionArgs args)
	{
		return !IsSourceOnlyIdling(action, args);
	}
コード例 #58
0
            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);
            }
コード例 #59
0
	public static bool IsSourceNotRunningOtherActionsIgnoreIdle(OCAction action, OCActionArgs args)
	{
		return !IsSourceRunningOtherActionsIgnoreIdle(action, args);
	}
コード例 #60
0
	public static bool IsLocalNotAnimatingAnythingElse(OCAction action, OCActionArgs args)
	{
		return !IsLocalAnimatingAnythingElse(action, args);
	}