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); } }