Example #1
0
        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;
            };
        }
Example #2
0
        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;
            };
        }