Esempio n. 1
0
    void Update()
    {
        //조작키(Control)가 블록 되어있으면 동작 안함
        if (controllable == false)
        {
            return;
        }

        //인벤토리 키 입력 확인
        if (CheckInventoryKeyInput())
        {
            inventoryActive = !inventoryActive;
            ui.Control_Inventory(inventoryActive);
        }

        if (!inventoryActive)
        {
            //스킬 키를 눌렀는지 확인
            skillIndex = CheckSkillKeyInput();

            //딜레이 상태가 아니라면
            if (!isDelay)
            {
                //이동키를 눌렀는지 확인
                if (CheckMoveKeyInput())
                {
                    SetSpriteDirection();             //바라볼 방향 결정
                    playerMove.Move(moveDirection);   //플레이어 이동
                    playerAttack.StopAttack();        //공격 취소

                    //이동키 입력에 의한 플레이어 애니메이션 적용
                    playerAnimation.TurnPlayer(spriteDirection);
                    playerAnimation.StopAttack();
                    if (moveDirection == Vector2.zero)
                    {
                        playerAnimation.StopWalking();
                    }
                    else
                    {
                        playerAnimation.StartWalking();
                    }

                    //이동 중 사용 가능한 스킬을 사용했을 경우
                    if (skillIndex >= 0)
                    {
                        if (playerSkill.GetSkill(skillIndex).usableOnMove)
                        {
                            playerSkill.UseSkill(skillIndex, spriteDirection);
                        }
                    }
                }
                //이동키를 누르지 않은 경우
                else
                {
                    //대기 애니메이션 적용
                    playerAnimation.StopWalking();
                    firstDirection = Vector2.zero;

                    //공격키를 눌렀는지 확인
                    if (CheckAttackKeyInput())
                    {
                        playerAttack.Attack();
                    }
                    else
                    {
                        playerAttack.StopAttack();
                    }

                    //스킬 사용
                    if (skillIndex >= 0)
                    {
                        playerSkill.UseSkill(skillIndex, spriteDirection);
                    }
                }
            }
            //딜레이 상태인 경우
            else
            {
                playerAttack.StopAttack();
                playerAnimation.StopAttack();
                playerAnimation.StopWalking();

                if (skillIndex >= 0 && playerSkill.GetSkill(skillIndex).delayCancelable)
                {
                    playerSkill.CancelSpell();
                    playerSkill.UseSkill(skillIndex, spriteDirection);
                }
            }
        }

        //피격 시 무적 상태인 경우
        if (!isAttackable)
        {
            gracePeriodTimer -= Time.deltaTime;
            //지속시간이 지나면 해제
            if (gracePeriodTimer <= 0)
            {
                isAttackable = true;
            }
        }
    }