Esempio n. 1
0
		protected IEnumerator Sequence (params IEnumerator[] children)
		{
			SequenceData sequence = new SequenceData ();

			return Control (
				sequence,
				() => {
					if (sequence.Index >= children.Length)
					{
						return Success;
					}
	
					IEnumerator child = children[sequence.Index];
	
					// Fail on break or explicit failure
					if (!child.MoveNext () || Failure.Equals (child.Current))
					{
						return Failure;
					}
	
					// Move to next on success
					if (Success.Equals (child.Current))
					{
						sequence.Index = sequence.Index + 1;
					}
	
					return Running;
				},
				children
			);
		}
        public void EqualsOther_SourceIsDefaultAndOtherIsDefault_ExpectTrue()
        {
            var source = new Failure <decimal>();
            var other  = default(Failure <decimal>);

            var actual = source.Equals(other);

            Assert.True(actual);
        }
Esempio n. 3
0
        public void Equals_FailureAIsDefaultAndFailureBIsDefault_ExpectTrue()
        {
            var failureA = default(Failure <int>);
            var failureB = new Failure <int>();

            var actual = Failure.Equals(failureA, failureB);

            Assert.True(actual);
        }
        public void EqualsStatic_FailureAIsDefaultAndFailureBIsDefault_ExpectTrue()
        {
            var failureA = default(Failure <SomeFailureCode>);
            var failureB = new Failure <SomeFailureCode>();

            var actual = Failure <SomeFailureCode> .Equals(failureA, failureB);

            Assert.True(actual);
        }
Esempio n. 5
0
		IEnumerator Control (NodeData data, System.Func<ResultType> logic, IEnumerator[] children)
		{
			// Collect node data from children (for use in reset)
			Dictionary<IEnumerator, NodeData> childData = new Dictionary<IEnumerator, NodeData> ();
			foreach (IEnumerator child in children)
			{
				child.MoveNext ();
				childData[child] = child.Current as NodeData;
			}

			// Yield own node data
			yield return data;

			// Fail on no children
			if (children.Length < 1)
			{
				yield return Failure;
			}
			
			ResultType result = Success;

			// Main flow
			while (!data.ShouldReset)
			{
				result = logic ();

				if (Success.Equals (result) || Failure.Equals (result))
				{
					break;
				}

				yield return Running;
			}

			// Reset children
			foreach (KeyValuePair<IEnumerator, NodeData> pair in childData)
			{
				if (pair.Value == null)
				{
					continue;
				}

				pair.Value.Reset ();
				pair.Key.MoveNext ();
			}

			yield return result;
		}
Esempio n. 6
0
		protected IEnumerator Run (ExecutionMode mode)
		{
			WaitForSeconds frameDelay = new WaitForSeconds (1.0f / Frequency);

			do
			{
				// Start running the tree root - grabbing its node data yielded on the init frame
				IEnumerator rootRoutine = Root ();
				rootRoutine.MoveNext ();
				m_RootData = rootRoutine.Current as NodeData;

				// Keep running until we're disabled
				while (Application.isPlaying && enabled)
				{
					// Break out if the root was reset
					if (m_RootData != null && m_RootData.ShouldReset)
					{
						break;
					}

					// Break out if the tree breaks or completes with success or failure
					if (!rootRoutine.MoveNext () || Success.Equals (rootRoutine.Current) || Failure.Equals (rootRoutine.Current))
					{
						break;
					}

					yield return frameDelay;
				}

				// Reset the root
				if (m_RootData != null)
				{
					m_RootData.Reset ();
					rootRoutine.MoveNext ();
				}
			}
			while (mode == ExecutionMode.Continuous && Application.isPlaying && enabled);
		}
Esempio n. 7
0
 public static bool Equals <TFailureCode>(Failure <TFailureCode> left, Failure <TFailureCode> right)
     where TFailureCode : struct
 =>
 left.Equals(right);
Esempio n. 8
0
 public static bool Equals(Failure <TFailureCode> left, Failure <TFailureCode> right)
 =>
 left.Equals(right);