コード例 #1
0
        public void AddModifier(Attribute <T> attribute, AttributeCondition <T> modifier = null)
        {
            if (!ModApplicationCanBeAccepted(attribute, modifier))
            {
                return;
            }

            Modifiers.Add(attribute);

            OnAttributeModAdd?.Invoke(attribute);
        }
コード例 #2
0
        /// Checks whether the mod can be applied to the target entity
        public bool ModApplicationCanBeAccepted(Attribute <T> attribute, AttributeCondition <T> modifier = null)
        {
            if (modifier == null)
            {
                modifier = attribute.TargetAttributeModifier.Find(item => item.TargetAttributeID.Equals(Config.ID));
            }

            if (modifier != null)
            {
                Attribute <T> currentAttribute = null;
                for (int i = 0; i < modifier.ModApplicationConditions.Count; i++)
                {
                    currentAttribute = Parent.GetAttributeByID(modifier.ModApplicationConditions[i].AttributeName);
                    switch (modifier.ModApplicationConditions[i].Operator)
                    {
                    case AttributeModOperator.Equals:
                        if (!(currentAttribute.Value == modifier.ModApplicationConditions[i].Value))
                        {
                            return(false);
                        }

                        break;

                    case AttributeModOperator.Greater:
                        if (!(currentAttribute.Value > modifier.ModApplicationConditions[i].Value))
                        {
                            return(false);
                        }

                        break;

                    case AttributeModOperator.Less:
                        if (!(currentAttribute.Value < modifier.ModApplicationConditions[i].Value))
                        {
                            return(false);
                        }

                        break;

                    case AttributeModOperator.GreaterOrEquals:
                        if (!(currentAttribute.Value >= modifier.ModApplicationConditions[i].Value))
                        {
                            return(false);
                        }

                        break;

                    case AttributeModOperator.LessOrEquals:
                        if (!(currentAttribute.Value <= modifier.ModApplicationConditions[i].Value))
                        {
                            return(false);
                        }

                        break;

                    case AttributeModOperator.NotEquals:
                        if (!(currentAttribute.Value != modifier.ModApplicationConditions[i].Value))
                        {
                            return(false);
                        }

                        break;

                    case AttributeModOperator.ContainsFlag:
                        if (!FlagUtil.Has(currentAttribute.Value, modifier.ModApplicationConditions[i].Value))
                        {
                            return(false);
                        }

                        break;

                    case AttributeModOperator.NotContainsFlag:
                        if (FlagUtil.Has(currentAttribute.Value, modifier.ModApplicationConditions[i].Value))
                        {
                            return(false);
                        }

                        break;
                    }
                }

                return(true);
            }

            return(false);
        }