public void PerformAttackAnimation(LivingEntityBehaviour target, int damage) { var atkSpeedDelay = Formulas.GetTimeBetweenAttacks(Entity.AtkSpeed); SpriteSheets.ForEach(e => e.SetDirection(Entity.Position.GetDirection(target.Entity.Position))); SpriteSheets.ForEach(e => { e.SetAnimation(SpriteAnimations.ATTACKING, atkSpeedDelay); }); // Make a animation callback to display the hit in a cool moment SpriteSheets[0].SetAnimationFrameCallback(AttackAnimation.HIT_FRAME, () => { Debug.Log("TARGET: " + target.name); Debug.Log("ATKER:" + this.name); AnimationFactory.BuildAndInstantiate(new AnimationOpts() { AnimationImageName = DefaultAssets.ANM_BLOOD, MapPosition = target.Entity.Position }); var unityPosition = target.Entity.Position.ToUnityPosition(); TextFactory.BuildAndInstantiate <DamageText>(new TextOptions() { UnityX = unityPosition.x + 8, UnityY = unityPosition.y + 18, Text = damage.ToString(), TextColor = Color.red, Size = 7 }); target.Entity.HP -= damage; if (target.Entity.HP <= 0 || WilLDie) { target.Die(); } else { target.HealthBar?.SetLife(target.Entity.HP, target.Entity.MAXHP); } }); }