Exemplo n.º 1
0
    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);
            }
        });
    }