Ejemplo n.º 1
0
    public override void TakeAction()
    {
        if (Input.GetKeyDown(KeyCode.W))
        {
            if (!UnitState.HasFlag(Enums.UnitStateEnum.DoubleJumping))
            {
                UnitState = UnitState.NAND(Enums.UnitStateEnum.Grounded);

                rigidBody.velocity = new Vector2(rigidBody.velocity.x, JumpHeight);

                if (UnitState.HasFlag(Enums.UnitStateEnum.Jumping) || UnitState.HasFlag(Enums.UnitStateEnum.Falling))
                {
                    UnitState |= Enums.UnitStateEnum.DoubleJumping;
                }
                else
                {
                    UnitState |= Enums.UnitStateEnum.Jumping;
                }
            }
        }
        else if (Input.GetKey(KeyCode.D))
        {
            if (UnitState.HasFlag(Enums.UnitStateEnum.FacingLeft))
            {
                SpawnDashPuff();
            }

            UnitState         |= Enums.UnitStateEnum.Moving;
            rigidBody.velocity = new Vector2(RunSpeed, rigidBody.velocity.y);

            attackTrigger.ClearAttackQueue();
        }
        else if (Input.GetKey(KeyCode.A))
        {
            if (UnitState.HasFlag(Enums.UnitStateEnum.FacingRight))
            {
                SpawnDashPuff();
            }

            UnitState         |= Enums.UnitStateEnum.Moving;
            rigidBody.velocity = new Vector2(-RunSpeed, rigidBody.velocity.y);

            attackTrigger.ClearAttackQueue();
        }

        if (Input.GetKeyDown((KeyCode)Enums.AttackKeyCode.LightAttack))
        {
            //when animation is finished, but cooldown is still active,
            // we dont want to try a root attack
            if (CurrentAttack == null && AttackQueue.Count == 0 && !attackTrigger.PreviousAttackInCooldown())
            {
                var attack = AttackGraph.RootAttacks.FirstOrDefault(a => a.Type == Enums.AttackKeyCode.LightAttack);
                if (attack != null)
                {
                    attackTrigger.TryAttack = attack;
                }
            }
            else if (CurrentAttack != null)
            {
                var attack = CurrentAttack.FollowupAttacks.FirstOrDefault(a => a.Type == Enums.AttackKeyCode.LightAttack);
                if (attack != null)
                {
                    attackTrigger.TryAttack = attack;
                }
            }
        }
    }