public BondSpreadCalculator(BondSpreadServiceModel bondSpreadServiceModel, CurveBuilder curveBuilder,
                             FutureBuilder futureBuilder, FutureEnrichment futureEnricher, ForwardBuilder forwardBuilder,
                             InterestCurves curves)
 {
     this.bondSpreadServiceModel = bondSpreadServiceModel;
     this.curveBuilder = curveBuilder;            
     this.futureBuilder = futureBuilder;
     this.futureEnricher = futureEnricher;
     this.forwardBuilder = forwardBuilder;
     this.curves = curves;
     
     carbonFieldMap = CarbonModel.GetEnumToFieldMapping(new[] { "bid", "ask", "primAct1", "secAct1" });
     dataObserver = new DataObserver(bondPriceCache, carbonFieldMap, FutureCache);
     dataObserver.Subscribe(dataObserveSubject);
 }
Beispiel #2
0
        /// <summary>The compose.</summary>
        /// <param name="skill">The skill.</param>
        public override void Compose(IAbilitySkill skill)
        {
            base.Compose(skill);

            var skillAddedObserver = new DataObserver <IAbilitySkill>(
                add =>
            {
                if (add.IsItem && add.SourceItem.Id == AbilityId.item_ultimate_scepter)
                {
                    skill.AddPart <IModifierGenerator>(
                        abilitySkill =>
                        new ModifierGenerator(skill)
                    {
                        Workers =
                            new List <ModifierGeneratorWorker>
                        {
                            new ModifierGeneratorWorker(
                                "modifier_centaur_stampede",
                                modifier =>
                                modifier.AssignModifierEffectApplier(
                                    new ModifierEffectApplier(modifier)
                            {
                                Workers =
                                    new List <IEffectApplierWorker>
                                {
                                    new DamageReductionEffectApplierWorker
                                    (
                                        modifier,
                                        false,
                                        abilityModifier => 0.6)
                                }
                            }),
                                false,
                                true,
                                true)
                        }
                    });
                }
            });

            skillAddedObserver.Subscribe(skill.Owner.SkillBook.SkillAdded);
            skill.DisposeNotifier.Subscribe(() => skillAddedObserver.Dispose());
        }
Beispiel #3
0
        protected override void RealTestOutPut()
        {
            var tracker  = new DataTracker();
            var tracker1 = new DataObserver("tracker1");
            var tracker2 = new DataObserver("tracker2");

            tracker1.Subscribe(tracker);
            tracker2.Subscribe(tracker);

            tracker.Track(new DataSource()
            {
                a = 888
            });
            tracker1.UnSubscribe();
            tracker.Track(new DataSource()
            {
                a = 233
            });
            tracker.Track(null);
        }
Beispiel #4
0
        public virtual void Initialize()
        {
            if (this.Skill.AbilityInfo.DamageString != null)
            {
                if (this.Skill.AbilityInfo.DamageScepterString != null)
                {
                    if (this.Skill.Owner.SourceUnit.HasModifier("modifier_item_ultimate_scepter_consumed"))
                    {
                        this.RawDamageWorkerAssign =
                            unit =>
                            new StringDataAghaDamageCalculatorWorker(
                                this.Skill,
                                unit,
                                this.DamageWorkerAssign(unit));
                    }
                    else if (this.Skill.Owner.SourceUnit.HasModifier("modifier_item_ultimate_scepter"))
                    {
                        this.RawDamageWorkerAssign =
                            unit =>
                            new StringDataAghaDamageCalculatorWorker(
                                this.Skill,
                                unit,
                                this.DamageWorkerAssign(unit));
                        var observer = new DataObserver <IAbilitySkill>();
                        observer.OnNextAction = remove =>
                        {
                            if (remove.IsItem && remove.SourceItem.Id == AbilityId.item_ultimate_scepter)
                            {
                                this.RawDamageWorkerAssign =
                                    unit =>
                                    new StringDataDamageCalculatorWorker(
                                        this.Skill,
                                        unit,
                                        this.DamageWorkerAssign(unit));
                                observer.Dispose();
                            }
                        };

                        observer.Subscribe(this.Skill.Owner.SkillBook.SkillRemoved);
                        this.Skill.DisposeNotifier.Subscribe(() => observer.Dispose());
                    }
                }
                else
                {
                    this.RawDamageWorkerAssign =
                        unit => new StringDataDamageCalculatorWorker(this.Skill, unit, this.DamageWorkerAssign(unit));
                }
            }
            else
            {
                this.RawDamageWorkerAssign =
                    unit => new GetDamageCalculatorWorker(this.Skill, unit, this.DamageWorkerAssign(unit));
            }

            if (this.DamageType == DamageType.Magical)
            {
                this.DamageWorkerAssign = unit => new MagicalSkillDamageCalculatorWorker(this.Skill, unit);
            }
            else if (this.DamageType == DamageType.Physical)
            {
                this.DamageWorkerAssign = unit => new PhysicalSkillDamageCalculatorWorker(this.Skill, unit);
            }
            else if (this.DamageType == DamageType.Pure)
            {
                this.DamageWorkerAssign = unit => new PureSkillDamageCalculatorWorker(this.Skill, unit);
            }
            else
            {
                this.DamageWorkerAssign = unit => new HealthRemovalSkillDamageCalculatorWorker(this.Skill, unit);
            }
        }
Beispiel #5
0
        public virtual void Initialize()
        {
            this.castPointUpdate = new LevelUpdater <IAbilitySkill, double>(
                this.Skill,
                () => Math.Max(this.Skill.SourceAbility.FindCastPoint(), 0.1));
            this.speedUpdate = new LevelUpdater <IAbilitySkill, float>(
                this.Skill,
                () => this.Skill.SourceAbility.GetProjectileSpeed());
            var manaSub = false;

            if (this.Skill.SourceAbility.ManaCost > 0)
            {
                manaSub           = true;
                this.manaObserver = new DataObserver <IMana>(
                    mana =>
                {
                    if (this.Skill.SourceAbility.IsValid)
                    {
                        this.EnoughMana = mana.Current > this.Skill.SourceAbility.ManaCost;
                    }
                    else
                    {
                        Console.WriteLine(
                            "SkillCastData: receiving mana data for invalid skill " + this.Skill.Name);
                    }
                });
                this.manaObserver.Subscribe(this.Skill.Owner.Mana);
            }
            else
            {
                DataObserver <ISkillLevel> levelObserver = null;
                levelObserver = new DataObserver <ISkillLevel>(
                    level =>
                {
                    if (manaSub)
                    {
                        return;
                    }

                    if (this.Skill.SourceAbility.ManaCost > 0)
                    {
                        manaSub           = true;
                        this.manaObserver = new DataObserver <IMana>(
                            mana =>
                        {
                            if (this.Skill.SourceAbility.IsValid)
                            {
                                this.EnoughMana = mana.Current > this.Skill.SourceAbility.ManaCost;
                            }
                            else
                            {
                                Console.WriteLine(
                                    "SkillCastData: receiving mana data for invalid skill "
                                    + this.Skill.Name);
                            }
                        });
                        this.manaObserver.Subscribe(this.Skill.Owner.Mana);
                    }
                });
                levelObserver.Subscribe(this.Skill.Level);
            }

            if (this.Skill.Cooldown != null)
            {
                this.cooldownObserver = new DataObserver <ICooldown>(
                    cooldown =>
                {
                    this.Cooldown     = cooldown.Current;
                    this.IsOnCooldown = this.Cooldown > 0;
                });
                this.cooldownObserver.Subscribe(this.Skill.Cooldown);
            }
        }