public override void Update(GameTime gameTime) { // TBD: is just using one hitbox fine? if (Globals.Map.CollidesWithWall(WallCollisionHitbox)) { if (Creator is Zerd) { ((Zerd)Creator).Stats.Missed(); } Speed = 0; Distance = 0; // Treat this missile as expired (gone past it's max distance) IsAlive = false; HitWall = true; } if (IsAlive) { CheckHit(); if (Origin.DistanceBetween(Position) > Distance && IsAlive) { Speed *= 0.75f; IsAlive = false; if (Creator is Zerd) { ((Zerd)Creator).Stats.Missed(); } } } base.Update(gameTime); }
public override void Update(GameTime gameTime) { if (IsAlive) { foreach (var enemy in Creator.Enemies().Where(e => e.IsAlive && !TargetsHit.Contains(e))) { if (enemy.Hitbox().Any(hitbox => Hitbox().Any(hitbox.Intersects))) { OnHit(enemy); } } } if (Origin.DistanceBetween(Position) > Distance && IsAlive) { Speed *= 0.75f; IsAlive = false; if (!TargetsHit.Any()) { ((Zerd)Creator).Stats.Missed(); } else { ((Zerd)Creator).Stats.IncreaseCombo(); } } base.Update(gameTime); }
public override void OnHit(Being target) { var zerd = (Zerd)Creator; Damage.Damage += Origin.DistanceBetween(Position) * zerd.SkillValue(SkillType.Sniper, true) / 100f; Damage.DamageBeing(target); IsActive = false; }
public override Animation GetCurrentAnimation() { if (!_spawned) { return(Animations.Get(AnimationTypes.Spawn)); } return(Animations.Get(Origin.DistanceBetween(Position) > Distance || HitWall ? AnimationTypes.Death : AnimationTypes.Move)); }
public override void Update(GameTime gameTime) { if (Origin.DistanceBetween(Position) > Distance && IsAlive) { IsActive = false; } base.Update(gameTime); }
public override void OnHit(Being target) { if (TargetsHit.Contains(target)) { return; } Distance -= AbilityConstants.LavaBlastDistanceLossPerHit; TargetsHit.Add(target); var oldDamage = Damage.Damage; Damage.Damage += Origin.DistanceBetween(Position) * ((Zerd)Creator).SkillValue(SkillType.Sniper, true) / 100f; Damage.DamageBeing(target); target.AddBuff(new BurnBuff(Creator, target, TimeSpan.FromMilliseconds(AbilityConstants.LavaBlastBurnLength), Damage.Damage * AbilityConstants.LavaBlastBurnDamagePercentage, AbilityTypes.LavaBlast)); Damage.Damage = oldDamage; }
public override void OnHit(Being target) { var zerd = (Zerd)Creator; Damage.Damage += Origin.DistanceBetween(Position) * zerd.SkillValue(SkillType.Sniper, true) / 100f; Damage.DamageBeing(target); IsAlive = false; Speed *= 0.15f; var burnDamage = Damage.Damage * AbilityConstants.FireballBurnDamagePercentage; target.AddBuff(new BurnBuff(Creator, target, AbilityConstants.FireballBurnLength, burnDamage, AbilityTypes.Fireball)); if (zerd.SkillPoints(SkillType.FireballExplosion) > 0) { var explosionBurnLevel = zerd.SkillValue(SkillType.FireballExplosion, false) * burnDamage / 100f; Damage.Damage *= zerd.SkillValue(SkillType.FireballExplosion, false) / 100f; foreach (var e in Creator.Enemies().Where(e => target.Position.DistanceBetween(e.Position) < AbilityConstants.FireballExplosionDistance && e != target)) { e.AddBuff(new BurnBuff(zerd, target, AbilityConstants.FireballBurnLength, explosionBurnLevel, AbilityTypes.Fireball)); Damage.DamageBeing(e); } } }
public override Animation GetCurrentAnimation() { return(!_spawned ? Animations.Get(AnimationTypes.Spawn) : Animations.Get(Origin.DistanceBetween(Position) > Distance || !IsAlive ? AnimationTypes.Death : AnimationTypes.Move)); }