private static float DealSwordDamageToEnemy(GameActor owner, GameActor targetEnemy, Vector2 arcOrigin, Vector2 contact, float angle, SlashData slashParameters) { if (targetEnemy.healthHaver) { float damageToDeal = slashParameters.damage; if (targetEnemy.healthHaver && targetEnemy.healthHaver.IsBoss) { damageToDeal *= slashParameters.bossDamageMult; } if ((targetEnemy is AIActor) && (targetEnemy as AIActor).IsBlackPhantom) { damageToDeal *= slashParameters.jammedDamageMult; } DamageCategory category = DamageCategory.Normal; if ((owner is AIActor) && (owner as AIActor).IsBlackPhantom) { category = DamageCategory.BlackBullet; } bool wasAlivePreviously = targetEnemy.healthHaver.IsAlive; //VFX if (slashParameters.doHitVFX && slashParameters.hitVFX != null) { slashParameters.hitVFX.SpawnAtPosition(new Vector3(contact.x, contact.y), 0, targetEnemy.transform); } targetEnemy.healthHaver.ApplyDamage(damageToDeal, contact - arcOrigin, owner.ActorName, CoreDamageTypes.None, category, false, null, false); bool fatal = false; if (wasAlivePreviously && targetEnemy.healthHaver.IsDead) { fatal = true; } if (slashParameters.OnHitTarget != null) { slashParameters.OnHitTarget(targetEnemy, fatal); } } if (targetEnemy.knockbackDoer) { targetEnemy.knockbackDoer.ApplyKnockback(contact - arcOrigin, slashParameters.enemyKnockbackForce, false); } if (slashParameters.statusEffects != null && slashParameters.statusEffects.Count > 0) { foreach (GameActorEffect effect in slashParameters.statusEffects) { targetEnemy.ApplyEffect(effect); } } return(slashParameters.damage); }