Esempio n. 1
0
 public void Detonate()
 {
     item.Destroy();
     item.World.AddEffect(new ExplosionSource(item.World, item.Position, 6));
     foreach (var offset in Main.GetWithin(type.explosionRadius))
     {
         var pos          = item.Position + offset;
         var displacement = pos - item.Position;
         var dist2        = displacement.Magnitude2;
         var radius2      = type.explosionRadius * type.explosionRadius;
         if (dist2 > radius2)
         {
             continue;
         }
         foreach (var hit in item.World.entities[pos])
         {
             if (hit is ICharacter d && hit != item)
             {
                 var             multiplier = (radius2 - displacement.Magnitude2) / radius2;
                 ExplosionDamage damage     = new ExplosionDamage()
                 {
                     damage    = (int)(type.explosionDamage * multiplier),
                     knockback = displacement.Normal * type.explosionForce * multiplier
                 };
                 d.OnDamaged(damage);
             }
         }
     }
 }