Ejemplo n.º 1
0
        private static (ICalculationGraph, ICalculationGraphPruner) CreateCalculationGraph(
            TransformableNodeFactory nodeFactory, StatRegistry statRegistry, ValueTransformer valueTransformer,
            IEventBuffer eventBuffer)
        {
            var coreGraph = new CoreCalculationGraph(
                s => CreateStatGraph(nodeFactory, valueTransformer, eventBuffer, s), nodeFactory);
            var eventGraph = new CalculationGraphWithEvents(coreGraph);

            var defaultPruningRuleSet            = new DefaultPruningRuleSet(statRegistry);
            var defaultPruner                    = new CalculationGraphPruner(eventGraph, defaultPruningRuleSet);
            var userSpecifiedValuePruningRuleSet =
                new UserSpecifiedValuePruningRuleSet(defaultPruningRuleSet, statRegistry);
            var userSpecifiedValuePruner =
                new CalculationGraphPruner(eventGraph, userSpecifiedValuePruningRuleSet);
            var pruner = new CompositeCalculationGraphPruner(defaultPruner, userSpecifiedValuePruner);

            eventGraph.StatAdded       += StatAdded;
            eventGraph.StatRemoved     += StatRemoved;
            eventGraph.ModifierAdded   += ModifierAdded;
            eventGraph.ModifierRemoved += ModifierRemoved;
            return(eventGraph, pruner);

            void StatAdded(IStat stat)
            {
                statRegistry.Add(stat);
                valueTransformer.AddBehaviors(stat.Behaviors);
                defaultPruner.StatAdded(stat);
                userSpecifiedValuePruner.StatAdded(stat);
            }

            void StatRemoved(IStat stat)
            {
                statRegistry.Remove(stat);
                valueTransformer.RemoveBehaviors(stat.Behaviors);
                defaultPruner.StatRemoved(stat);
                userSpecifiedValuePruner.StatRemoved(stat);
            }

            void ModifierAdded(Modifier modifier)
            {
                defaultPruner.ModifierAdded(modifier);
                userSpecifiedValuePruner.ModifierAdded(modifier);
            }

            void ModifierRemoved(Modifier modifier)
            {
                defaultPruner.ModifierRemoved(modifier);
                userSpecifiedValuePruner.ModifierRemoved(modifier);
            }
        }
Ejemplo n.º 2
0
        private static CalculationGraphWithEvents CreateSut(
            ICalculationGraph decoratedGraph,
            Action <IStat> statAddedAction = null, Action <IStat> statRemovedAction = null)
        {
            var sut = new CalculationGraphWithEvents(decoratedGraph);

            if (statAddedAction != null)
            {
                sut.StatAdded += statAddedAction;
            }
            if (statRemovedAction != null)
            {
                sut.StatRemoved += statRemovedAction;
            }
            return(sut);
        }
Ejemplo n.º 3
0
        private static PrunableCalculationGraph CreateCalculationGraph(
            TransformableNodeFactory nodeFactory, StatRegistry statRegistry, ValueTransformer valueTransformer)
        {
            var coreGraph =
                new CoreCalculationGraph(s => CreateStatGraph(nodeFactory, valueTransformer, s), nodeFactory);
            var eventGraph = new CalculationGraphWithEvents(coreGraph, StatAdded, StatRemoved);

            return(new PrunableCalculationGraph(eventGraph, statRegistry));

            void StatAdded(IStat stat)
            {
                statRegistry.Add(stat);
                valueTransformer.AddBehaviors(stat.Behaviors);
            }

            void StatRemoved(IStat stat)
            {
                statRegistry.Remove(stat);
                valueTransformer.RemoveBehaviors(stat.Behaviors);
            }
        }