예제 #1
0
        internal Reaction ObserveVerb(ushort verbID, VerbTargetInfo target, TraitsVector reactorTraits, float verbIntensity)
        {
            IVerb verbTraits = null;

            if (ObservedActions.TryGetValue(verbID, out ObservedVerb verb))
            {
                verbTraits = verb.GetTraits();
                ObservedActions[verbID] = verb;
            }
            else
            {
                verb       = new ObservedVerb(verbID);
                verbTraits = verb.GetTraits();
                ObservedActions.Add(verbID, verb);
            }

            if (!verb.HitLimit)
            {
                ++TotalPerceptions;
                // could also be used to represent desensitization to violence
                float magnitude = (1.0f / verb.NumberOfTimes) * (1 - verbIntensity);
                //TraitsVector thisTraits = this;
                AddVector(verbTraits.ApplyMagnitude(magnitude));


                if (verbTraits.VerbType == VerbType.None)
                {
                    AddVector(verbTraits.ApplyMagnitude(magnitude));
                }
                else if (verb)
                {
                }

                return(new Reaction(
                           (reactorTraits - verbTraits).SumToBounded().Suppress(1 - magnitude),
                           ((TraitsVector)this - verbTraits).SumToBounded().Suppress(1 - magnitude),
                           verbTraits,
                           magnitude,
                           verbIntensity
                           ));
            }
            else
            {
                return(null);
            }
        }
 public void Reset()
 {
     ActionsObserved = ObservedActions.None;
 }
 public void FailedWithException(Exception exception)
 {
     ActionsObserved |= ObservedActions.FailedWithException;
 }
 public void Completed(TimeSpan elapsedTimeFromStart)
 {
     ActionsObserved |= ObservedActions.Completed;
 }
 public void Succeeded()
 {
     ActionsObserved |= ObservedActions.Succeeded;
 }
 public void Started()
 {
     ActionsObserved |= ObservedActions.Started;
 }