Beispiel #1
0
    public void StartCoolTimer(SkillType _skillType, float _coolTime)
    {
        skillCheckInfo[(int)_skillType].state     = SkillState.End;
        skillCheckInfo[(int)_skillType].coolTimer = _coolTime;

        fsmPlyer.SetState(CharacterBasicState.Idle, CharacterAnimationState.Idle);
    }
    public override bool Execute(GameObject target)
    {
        FSMPlayer player = target.GetComponent <FSMPlayer>();

        if (player != null)
        {
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit HitInfo;

            if (Physics.Raycast(ray, out HitInfo, 100f, player.Layer))
            {
                int layer = HitInfo.transform.gameObject.layer;        //클릭한 레이어의 값

                if (layer == LayerMask.NameToLayer(player.clickLayer)) //땅을 클릭했을 때
                {
                    Vector3 dest = HitInfo.point;                      //마우스로 찍은 위치

                    player.Point.transform.position = dest;

                    if (!player.IsWhirlwind())
                    {
                        player.SetState(CH_STATE.Run);                        //휠윈드 상태가 아닐 때는 달리자
                    }
                    return(true);
                }

                else if (layer == LayerMask.NameToLayer(player.enemyLayer))    //적을 클릭 했을 때
                {
                    player.Enemy = HitInfo.collider.GetComponent <FSMEnemy>(); //적의 컴퍼넌트를 가져온다.

                    player.Point.SetParent(player.Enemy.transform);
                    player.Point.transform.localPosition = Vector3.zero;

                    if (!player.IsWhirlwind() && !player.Enemy.IsDead())
                    {
                        if (Vector3.Distance(player.transform.position, player.Point.transform.position) <= player.State.AttackRange)
                        {
                            player.SetState(CH_STATE.Attack);
                        }
                        else
                        {
                            player.SetState(CH_STATE.AttackRun);
                        }
                    }

                    return(false);
                }
            }
        }

        return(true);
    }
Beispiel #3
0
    public void PlayWhirlwind()
    {
        if (CommonSkill(0, false, true))
        {
            SoundManager.Instance.PlaySFX("Whirlwind_start", 0.3f);

            player.SetState(CH_STATE.Whirlwind);
        }
    }
Beispiel #4
0
    private void UpdateMoving()
    {
        // Check This character able to move
        if (fsmPlyer.IsAbleToMove() == false)
        {
            return;
        }


        float h = Input.GetAxisRaw("Horizontal");
        float v = Input.GetAxisRaw("Vertical");

        if (h == 0.0f && v == 0.0f)
        {
            fsmPlyer.SetState(CharacterBasicState.Idle, CharacterAnimationState.Idle);
            return;
        }


        Vector3 movement = (transform.forward * v) + (transform.right * h);

        CharacterAnimationState animState
            = CharacterAnimationState.Moving_F;

        bool  isFrondSide = (Input.GetKey(KeyCode.W)) ? true : false;
        float moveAngle   = Vector3.Angle(movement, transform.right);

        float moveSpeed = (Input.GetKey(KeyCode.W)) ? moveSpeed_forward : moveSpeed_side;

        //Debug.Log(moveAngle);
        if (180.0f <= moveAngle)
        {
            animState = CharacterAnimationState.Moving_L;
        }
        else if (135.0f <= moveAngle)
        {
            if (isFrondSide)
            {
                animState = CharacterAnimationState.Moving_FL;
            }
            else
            {
                animState = CharacterAnimationState.Moving_BL;
            }
        }
        else if (90.0f <= moveAngle)
        {
            if (isFrondSide)
            {
                animState = CharacterAnimationState.Moving_F;
            }
            else
            {
                animState = CharacterAnimationState.Moving_B;
            }
        }
        else if (45.0f <= moveAngle)
        {
            if (isFrondSide)
            {
                animState = CharacterAnimationState.Moving_FR;
            }
            else
            {
                animState = CharacterAnimationState.Moving_BR;
            }
        }
        else if (0.0f <= moveAngle)
        {
            animState = CharacterAnimationState.Moving_R;
        }


        movement            = movement.normalized * moveSpeed * Time.fixedDeltaTime;
        transform.position += movement;

        fsmPlyer.SetState(CharacterBasicState.Moving, animState);
    }