public void CalcDot() { GConfig.D.EffectTicksMilliseconds = 1000; var el = DemoEffectModel(); var dMob = new MobData { Hp = 21 }; StatusCalculator.CalculateDot(dMob, el, 290, i => { Assert.True(false, "Shouldnt trigger killCallback 1"); }); Assert.Equal(21, dMob.Hp); Assert.Equal(590, el[1].TimeSinceLastTick); el = DemoEffectModel(); dMob = new MobData { Hp = 21 }; el[1].TimeSinceLastTick = 1001; StatusCalculator.CalculateDot(dMob, el, 701, i => { Assert.True(false, "Shouldnt trigger killCallback 2"); }); Assert.Equal(1, dMob.Hp); Assert.Equal(0, el[1].TimeSinceLastTick); var killtrigger = false; el = DemoEffectModel(); el[1].TimeSinceLastTick = 1001; dMob = new MobData { Hp = 20 }; StatusCalculator.CalculateDot(dMob, el, 10101, i => { Assert.Equal(2, i); killtrigger = true; }); Assert.True(killtrigger); Assert.Equal(0, dMob.Hp); Assert.Equal(0, el[1].TimeSinceLastTick); }
public void Update(double delta) { if (IsDead || IsOnGoal) { WaitBeforeRemoved -= delta; if (WaitBeforeRemoved <= 0) { RemoveMob(); } return; } StatusEffect = StatusCalculator.GetCleardEffectList(StatusEffect); StatusCalculator.CalculateLeftTime(StatusEffect, delta); StatusCalculator.CalculateHot(MobData, StatusEffect, delta); StatusCalculator.CalculateDot(MobData, StatusEffect, delta, towerInstanceId => { Killed(_session.GameTower.SingleOrDefault(x => x.InstanceId == towerInstanceId)); }); if (IsTowerCollision(delta)) { return; } var transformedSpeed = (float)StatusCalculator.GetSpeedValueByStatus(MobData, StatusEffect); if (CurrentGoal.X > TilePosX) { TilePosX += transformedSpeed / GConfig.D.GameSimulationTime * (float)delta; } if (CurrentGoal.X < TilePosX) { TilePosX -= transformedSpeed / GConfig.D.GameSimulationTime * (float)delta; } if (CurrentGoal.Y > TilePosY) { TilePosY += transformedSpeed / GConfig.D.GameSimulationTime * (float)delta; } if (CurrentGoal.Y < TilePosY) { TilePosY -= transformedSpeed / GConfig.D.GameSimulationTime * (float)delta; } if (!IsMobNearPoint(this)) { return; } X = CurrentGoal.X; Y = CurrentGoal.Y; CurrentPathPos++; if (Path == null) { return; } if (CurrentPathPos >= Path.Count) { if (VisitedWayPoint) { ReachGoal(); } else { VisitedWayPoint = true; UpdatePath(); } return; } CurrentGoal = Path[CurrentPathPos]; }