private static void AffectToOwner(Entity entity, InteractTemplate.Effect effect) { switch (effect.Type) { case InteractTemplate.Effect.Types.Attribute: AffectToOwnerAttribute(entity, effect); break; } }
private static void AffectToTargetAttribute(Entity entity, IEnumerable <Entity> targets, InteractTemplate.Effect effect) { var attributeType = AttributeHelper.TypeMap[AttributeHelper.GetTypeName(effect.Attribute)]; targets.Gather(attributeType, result => { Logger.Write("Interact {0} -> {1}", entity.Id, string.Join(", ", (from e in result select e.Id).ToArray())); if (result.Count == 0) { return; } var effectValue = (float)effect.Value / result.Count; result.PostEach(attributeType, target => target.ChangeAttributeValue( effect.Attribute, effect.Field, effectValue, (operand, oldValue) => CalculateAffectedValue(effect.Function, operand, oldValue))); }); }
private static void AffectToOwnerAttribute(Entity entity, InteractTemplate.Effect effect) { entity.ChangeAttributeValue( effect.Attribute, effect.Field, effect.Value, (operand, oldValue) => CalculateAffectedValue(effect.Function, operand, oldValue)); }
private static void AffectToTarget(Entity entity, IEnumerable <Entity> targets, InteractTemplate.Effect effect) { switch (effect.Type) { case InteractTemplate.Effect.Types.Attribute: AffectToTargetAttribute(entity, targets, effect); break; } }