protected override void OnSetup(IBehaviourContext context) { ConnectionEntry <ItemSurrogate> targetInput = Target[context]; ConnectionEntry <bool> activeInput = Active[context]; ConnectionEntry <float> effectInput = Effect[context]; StatInstance.Modifier modifier = null; bool isActive = false; Action changeHandler = () => { if (targetInput.Value == null) { return; } if (activeInput.Value) { if (!isActive) { var weaponNode = targetInput.Value.Template.GetNode <D> (); var weaponStat = weaponNode.GetStat(targetInput.Value, Stat); if (Scaling == AttributeInformation.ModifierType.Additive) { modifier = weaponStat.AddFlatModifier(effectInput.Value); } else { modifier = weaponStat.AddMultiplierModifier(effectInput.Value); } isActive = true; } } else if (isActive) { var weaponNode = targetInput.Value.Template.GetNode <D> (); var weaponStat = weaponNode.GetStat(targetInput.Value, Stat); if (Scaling == AttributeInformation.ModifierType.Additive) { weaponStat.RemoveFlatModifier(modifier); } else { weaponStat.RemoveMultiplierModifier(modifier); } isActive = false; } }; targetInput.OnBeforeChanged += () => { if (targetInput.Value == null) { isActive = false; return; } if (!isActive) { return; } var weaponNode = targetInput.Value.Template.GetNode <D> (); var weaponStat = weaponNode.GetStat(targetInput.Value, Stat); if (Scaling == AttributeInformation.ModifierType.Additive) { weaponStat.RemoveFlatModifier(modifier); } else { weaponStat.RemoveMultiplierModifier(modifier); } isActive = false; }; targetInput.OnAfterChanged += changeHandler; activeInput.OnAfterChanged += changeHandler; changeHandler(); effectInput.OnAfterChanged += () => { if (modifier == null) { return; } modifier.Value = effectInput.Value; }; }
protected override void OnSetup(IBehaviourContext context) { var targetInput = Target[context]; var activeInput = Active[context]; var effectInput = Effect[context]; StatInstance.Modifier modifier = null; bool isActive = false; Action changeHandler = () => { if (targetInput.Value == null) { return; } if (activeInput.Value) { if (!isActive) { if (Scaling == AttributeInformation.ModifierType.Additive) { modifier = targetInput.Value.Stats[entry].AddFlatModifier(effectInput.Value); } else { modifier = targetInput.Value.Stats[entry].AddMultiplierModifier(effectInput.Value); } isActive = true; } } else if (isActive) { if (Scaling == AttributeInformation.ModifierType.Additive) { targetInput.Value.Stats[entry].RemoveFlatModifier(modifier); } else { targetInput.Value.Stats[entry].RemoveMultiplierModifier(modifier); } isActive = false; } }; targetInput.OnBeforeChanged += () => { if (targetInput.Value == null) { isActive = false; return; } if (!isActive) { return; } if (Scaling == AttributeInformation.ModifierType.Additive) { targetInput.Value.Stats[entry].RemoveFlatModifier(modifier); } else { targetInput.Value.Stats[entry].RemoveMultiplierModifier(modifier); } isActive = false; }; targetInput.OnAfterChanged += changeHandler; activeInput.OnAfterChanged += changeHandler; changeHandler(); effectInput.OnAfterChanged += () => { if (modifier == null) { return; } modifier.Value = effectInput.Value; }; }