private void CheckCollision(Sprite sprite) { if (CollisionPolygon.Intersects(sprite.CollisionPolygon)) { if (sprite is Character characerSprite) { if (characerSprite.Faction != this.Faction) { flyingSound.Stop(); hitSound.Update3DEffect(); hitSound.Play(); int actualDamage = CalculateDamage(Damage, DamageType, characerSprite, out bool isCrit, out bool isBlocked); characerSprite.Health -= actualDamage; if (isBlocked) { characerSprite.CollisionDisplaytList.Add(new CollisionToDisplay("blocked", Color.Snow)); } else if (isCrit) { characerSprite.CollisionDisplaytList.Add(new CollisionToDisplay("*" + actualDamage.ToString() + "*", Color.Red)); } else { characerSprite.CollisionDisplaytList.Add(new CollisionToDisplay(actualDamage.ToString(), Color.OrangeRed)); } ToRemove = true; } } else { flyingSound.Stop(); hitSound.Update3DEffect(); hitSound.Play(); ToRemove = true; } } }
public virtual void Initialize(Vector2 position, int damage, DamageType damageType, Vector2 direction, Faction faction , SoundEffectInstance flyingSoundInstance, SoundEffectInstance hitSoundInstance, Character parent = null) { Position = position; Damage = damage; DamageType = damageType; Direction = direction; Direction.Normalize(); Angle = Math.Atan(Direction.Y / Direction.X); Faction = faction; Parent = parent; flyingSound = new SoundEffect2D(flyingSoundInstance, this) { IsLooping = true, Volume = 0.4f }; hitSound = new SoundEffect2D(hitSoundInstance, this) { IsLooping = false, Volume = 0.5f }; flyingSound.Play(); }