예제 #1
0
        private IElement GetElement(Player player, PowerUpDefinitionValue value)
        {
            var      relations = value.RelatedValues;
            IElement result    = value.ConstantValue;

            if (relations != null)
            {
                var elements = relations
                               .Select(r => new AttributeRelationshipElement(
                                           new[] { player.Attributes.GetOrCreateAttribute(r.InputAttribute) },
                                           r.InputOperand,
                                           r.InputOperator))
                               .Cast <IElement>();
                if (value.ConstantValue != null)
                {
                    elements = elements.Concat(value.ConstantValue.GetAsEnumerable());
                }

                result = new AttributeRelationshipElement(elements.ToList(), 1.0F, InputOperator.Multiply);
            }

            if (result == null)
            {
                throw new ArgumentException();
            }

            return(result);
        }
예제 #2
0
        /// <summary>
        /// Creates a new element on this attribute system with the specified power up value.
        /// </summary>
        /// <param name="attributeSystem">The attribute system.</param>
        /// <param name="value">The value.</param>
        /// <returns>The added element.</returns>
        public static IElement CreateElement(this IAttributeSystem attributeSystem, PowerUpDefinitionValue value)
        {
            var      relations = value.RelatedValues;
            IElement result    = value.ConstantValue;

            if (relations?.Any() ?? false)
            {
                var elements = relations
                               .Select(r => new AttributeRelationshipElement(
                                           new[] { attributeSystem.GetOrCreateAttribute(r.InputAttribute) },
                                           r.InputOperand,
                                           r.InputOperator))
                               .Cast <IElement>();
                if (value.ConstantValue != null)
                {
                    elements = elements.Concat(value.ConstantValue.GetAsEnumerable());
                }

                result = new AttributeRelationshipElement(elements.ToList(), 1.0F, InputOperator.Multiply);
            }

            if (result == null)
            {
                throw new ArgumentException($"The passed {nameof(PowerUpDefinitionValue)} doesn't have a constant value or related values.", nameof(value));
            }

            return(result);
        }
    public void InputOperatorPower()
    {
        const int element1Value = 1;
        const int element2Value = 2;
        const int inputOperand  = 10;
        var       element1      = new SimpleElement {
            Value = element1Value
        };
        var element2 = new SimpleElement {
            Value = element2Value
        };
        var relationshipElement = new AttributeRelationshipElement(new[] { element1, element2 }, inputOperand, InputOperator.Exponentiate);

        Assert.That(relationshipElement.Value, Is.EqualTo(Math.Pow(element1Value + element2Value, inputOperand)));
    }
    public void InputOperatorMultiply()
    {
        const int element1Value = 1;
        const int element2Value = 2;
        const int inputOperand  = 10;
        var       element1      = new SimpleElement {
            Value = element1Value
        };
        var element2 = new SimpleElement {
            Value = element2Value
        };
        var relationshipElement = new AttributeRelationshipElement(new[] { element1, element2 }, inputOperand, InputOperator.Multiply);

        Assert.That(relationshipElement.Value, Is.EqualTo((element1Value + element2Value) * inputOperand));
    }
    public void ValueChangedEventWhenElementChanges()
    {
        const int element1Value = 1;
        const int element2Value = 2;
        const int inputOperand  = 10;
        var       element1      = new SimpleElement {
            Value = element1Value
        };
        var element2 = new SimpleElement {
            Value = element2Value
        };
        var relationshipElement = new AttributeRelationshipElement(new[] { element1, element2 }, inputOperand, InputOperator.Add);
        var eventCalled         = false;

        relationshipElement.ValueChanged += (sender, e) => eventCalled = true;
        element1.Value = 2;
        Assert.That(eventCalled, Is.True);
    }
    public void ValueChangesWhenElementChanges()
    {
        const int element1Value = 1;
        const int element2Value = 2;
        const int inputOperand  = 10;
        var       element1      = new SimpleElement {
            Value = element1Value
        };
        var element2 = new SimpleElement {
            Value = element2Value
        };
        var relationshipElement = new AttributeRelationshipElement(new[] { element1, element2 }, inputOperand, InputOperator.Add);

        Assert.That(relationshipElement.Value, Is.EqualTo(element1Value + element2Value + inputOperand));
        const int element1NewValue = 2;

        element1.Value = element1NewValue;
        Assert.That(relationshipElement.Value, Is.EqualTo(element1NewValue + element2Value + inputOperand));
    }