예제 #1
0
    private void OnMouseEvent(Define.MouseEvent evt)
    {
        switch (State)
        {
        case Define.State.Idle:
            OnMouseEvent_IdleRun(evt);

            break;

        case Define.State.Moving:
            OnMouseEvent_IdleRun(evt);

            break;

        case Define.State.Skill:
            // 마우스를 떼면 공격 멈추기
            if (evt == Define.MouseEvent.PointerUp)
            {
                _stopSkill = true;
            }

            break;

        case Define.State.Die:
            break;

        default:
            break;
        }
    }
예제 #2
0
    //클릭 관련 이벤트가 발생하면 inputManager에서 델리게이트로 실행 하고 있음.
    void OnMouseEvent(Define.MouseEvent evt)
    {
        //캐릭터의 상태에 따른 함수 실행.
        switch (State)
        {
        case Define.State.Idle:
        case Define.State.Moving:
            OnMouseEvent_IdleRun(evt);
            break;

        case Define.State.Skill:
        {
            if (evt == Define.MouseEvent.PointerUp)
            {
                _stopSkill = true;
            }
        }
        break;

        case Define.State.SkillQ:
        case Define.State.SkillW:
        case Define.State.SkillE:
        case Define.State.SkillR:
        {
            StartCoroutine(CheckIfSkillisFinish());
        }
        break;
        }
    }
    void OnMouseEvent(Define.MouseEvent evt)
    {
        if (evt == Define.MouseEvent.OnPressed)
        {
            Ray        ray  = Camera.main.ScreenPointToRay(Input.mousePosition);
            LayerMask  mask = LayerMask.GetMask("Floor");
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit, 100.0f, mask))
            {
                DestPos = hit.point;
                // _destPos.y = transform.position.y;
                input = (DestPos - transform.position).normalized;
            }

            if (State != Define.State.Moving && State != Define.State.Idle)
            {
                State = Define.State.Moving;
            }
        }

        if (evt == Define.MouseEvent.ButtonDown)
        {
            //Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            //LayerMask mask = LayerMask.GetMask("Floor");
            //RaycastHit hit;


            //if (Physics.Raycast(ray, out hit, 100.0f, mask))
            //{
            //    DestPos = hit.point;
            //    // _destPos.y = transform.position.y;
            //    input = (DestPos - transform.position).normalized;
            //}

            //if (State != Define.State.Moving) State = Define.State.Moving;
        }

        if (evt == Define.MouseEvent.ButtonUp)
        {
        }

        if (evt == Define.MouseEvent.None)
        {
            if (DestPos == Vector3.zero)
            {
                return;
            }
            float remainDist = (DestPos - transform.position).magnitude;
            if (remainDist < 0.05f)
            {
                if (State != Define.State.Wait && State != Define.State.Idle)
                {
                    State = Define.State.Wait;
                }
            }
        }
    }
예제 #4
0
 void OnMouse(Define.MouseEvent evt)
 {
     if (evt == Define.MouseEvent.LClick)
     {
         StartCoroutine("MoveLoop");
         MoveToX();
     }
     //if (Input.GetMouseButton(0))
     //    MoveToX();
 }
예제 #5
0
    // 정지/이동 상태일때

    void OnMouseEvent_IdleRun(Define.MouseEvent evt)
    {
        RaycastHit hit;

        // 마우스 클릭시 레이 캐스팅
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        bool raycastHit = Physics.Raycast(ray, out hit, 100.0f, _layerMask); //래이케이스팅 저장 => 어떤 클릭을 햇는지

        Debug.DrawRay(Camera.main.transform.position, ray.direction * 100.0f, Color.red, 1.0f);


        switch (evt)
        {
        case Define.MouseEvent.PointerDown:
        {
            //몬스터 타겟인지 땅클릭인지 구분
            if (raycastHit)
            {
                _desPos = hit.point;
                State   = Define.State.Moving;
                Debug.Log($"레이캐스트 : {hit.collider.gameObject.tag} / {hit.collider.gameObject.name}");
                _stopSkill = false;

                if (hit.collider.gameObject.layer == (int)Define.Layer.Monster)
                {
                    Debug.Log("Monster Click!");
                    _lockTarget = hit.collider.gameObject;         //몬스터 타겟 저장
                    //TODO : 몬스터 커리시 공격처리
                }
                else
                {
                    _lockTarget = null;
                    Debug.Log("Not Monster Click! ");
                }
            }
        }
        break;

        case Define.MouseEvent.Press:
        {
            if (_lockTarget == null && raycastHit)
            {
                _desPos = hit.point;
            }
        }
        break;

        case Define.MouseEvent.PointerUp:
            _stopSkill = true;
            break;
        }
    }
예제 #6
0
    private void OnMouseEvent_IdleRun(Define.MouseEvent evt)
    {
        RaycastHit hit;
        Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        //Debug.DrawRay(Camera.main.transform.position, ray.direction * 100f, Color.red, 0.5f);
        bool raycastHit = Physics.Raycast(ray, out hit, 100f, _mask);

        switch (evt)
        {
        // 마우스를 한번 눌렀을 때
        case Define.MouseEvent.PointerDown:
            if (raycastHit)
            {
                _destPos   = hit.point;
                State      = Define.State.Moving;
                _stopSkill = false;

                if (hit.collider.gameObject.layer == (int)Define.Layer.Monster)
                {
                    _lockTarget = hit.collider.gameObject;
                }
                else
                {
                    _lockTarget = null;
                }
            }

            break;

        // 계속 누르고 있는 상태
        case Define.MouseEvent.Press:
            if (_lockTarget == null && raycastHit)
            {
                _destPos = hit.point;
            }

            break;

        // 마우스를 뗐을 때
        case Define.MouseEvent.PointerUp:
            _stopSkill = true;
            break;
            //case Define.MouseEvent.Click:
            //    break;
        }
    }
예제 #7
0
    void OnMouseEvent_IdleRun(Define.MouseEvent evt)
    {
        RaycastHit hit;
        Ray        ray        = Camera.main.ScreenPointToRay(Input.mousePosition);
        bool       raycastHit = Physics.Raycast(ray, out hit, 100.0f, _mask); //100.0f 거리를 정한다.

        // Debug.DrawRay(Camera.main.transform.position, ray.direction * 100.0f, Color.red, 1.0f); // 1.0f -> 1초만 유지

        switch (evt)
        {
        case Define.MouseEvent.PointerDown:
        {
            if (raycastHit)
            {
                State      = Define.State.Moving;
                _destPos   = hit.point;
                _stopSkill = false;
                if (hit.collider.gameObject.layer == (int)Define.Layer.Monster)
                {
                    _lockTarget = hit.collider.gameObject;
                }
                else
                {
                    _lockTarget = null;
                }
            }
        }
        break;

        case Define.MouseEvent.Press:
        {
            if (_lockTarget == null && raycastHit)
            {
                _destPos = hit.point;
            }
        }
        break;

        case Define.MouseEvent.PointerUp:
        {
            _stopSkill = true;
        }
        break;
        }
    }
예제 #8
0
    void MouseInput(Define.MouseEvent mouseEvent)
    {
        if (CameraController.camMode == Define.CamMode.QuarterView)
        {
            Camera mainCamera = Camera.main;
            Ray    ray        = mainCamera.ScreenPointToRay(Input.mousePosition);

            int mask = 1 << 9;

            Debug.DrawRay(mainCamera.transform.position, ray.direction * 100.0f, Color.magenta, 1.0f);

            if (Physics.Raycast(ray, out var hitInfo, 100.0f, mask))
            {
                destPoisition = hitInfo.point;
                currState     = PlayerState.Running;
            }
        }
    }
예제 #9
0
    void OnMouseClicked(Define.MouseEvent evt)
    {
        if (_state == PlayerState.Die)
        {
            return;
        }

        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        Debug.DrawRay(Camera.main.transform.position, ray.direction * 100.0f, Color.red, 1.0f);

        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, 100.0f, LayerMask.GetMask("Wall")))
        {
            _desPos = hit.point;
            _state  = PlayerState.Moving;
        }
    }
예제 #10
0
    void OnMouseEvent_IdleRun(Define.MouseEvent evt)
    {
        RaycastHit hit;
        Ray        ray        = Camera.main.ScreenPointToRay(Input.mousePosition);
        bool       raycastHit = (Physics.Raycast(ray, out hit, 100.0f, _mask));

        switch (evt)
        {
        case Define.MouseEvent.PointerDown:
        {
            if (raycastHit)
            {
                _destPos   = hit.point;
                State      = Define.State.Moving;
                _stopSkill = false;

                if (hit.collider.gameObject.layer == (int)Define.Layer.Monster)
                {
                    _lockTarget = hit.collider.gameObject;
                }
                else
                {
                    _lockTarget = null;
                }
            }
        }
        break;

        case Define.MouseEvent.Press:
        {
            if (_lockTarget == null && raycastHit)
            {
                _destPos = hit.point;
            }
        }
        break;

        case Define.MouseEvent.PointerUp:
            _stopSkill = true;
            break;
        }
    }
예제 #11
0
    void OnMouseEvent(Define.MouseEvent evt)
    {
        switch (State)
        {
        case PlayerState.Idle:
            OnMouseEvent_IdelRun(evt);
            break;

        case PlayerState.Moving:
            OnMouseEvent_IdelRun(evt);
            break;

        case PlayerState.Skill:
        {
            if (evt == Define.MouseEvent.PointerUp)
            {
                _stopSkill = true;
            }
        }
        break;
        }
    }
예제 #12
0
    void OnMouseClicked(Define.MouseEvent _event)
    {
        if (playerState == PlayerState.Dead)
        {
            return;
        }

        Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        Debug.DrawRay(Camera.main.transform.position, ray.direction * 100f, Color.red, 1.0f);

        LayerMask mask = LayerMask.GetMask("Monster") | LayerMask.GetMask("Wall");

        //int mask = (1 << 8) | (1 << 9);//비트플래그 방식으로 8번레이어만 사용하려면 1을8번까지 쉬프트 연산후에 레이케스트할때 마스트변수에 넣어주면된다. 그리고 | 즉 or 연산을 하게되면 8번과 9번이 동시에 켜지게되면서 두개의 레이어를 동시에사용하게 할 수 있다.

        if (Physics.Raycast(ray, out hit, 100f, mask))
        {
            desPos      = hit.point;
            playerState = PlayerState.Moving;
            Debug.Log("" + hit.collider.gameObject.name);
        }
    }
예제 #13
0
    public void ChangeColor(Define.MouseEvent mousebtn)
    {
        switch (mousebtn)
        {
        //다음 큐브 색상으로 인덱스를 변경
        case Define.MouseEvent.LClick:     //증가
        {
            m_colorIndex++;
            if (m_colorIndex > m_cubeSpawner.CubeColors.Length - 1)         // 0,1,2  0,1,2
            {
                m_colorIndex = m_cubeSpawner.CubeColors.Length - 1;
            }
        }
        break;

        case Define.MouseEvent.RClick:     //감소
        {
            m_colorIndex--;
            if (m_colorIndex <= 0)
            {
                m_colorIndex = 0;
            }
        }
        break;
        }

        //if (m_colorIndex < m_cubeSpawner.CubeColors.Length - 1)
        //{
        //    m_colorIndex++;
        //}
        //else
        //    m_colorIndex = 0;

        //실제 큐브 색상 변경
        m_meshRenderer.material.color = m_cubeSpawner.CubeColors[m_colorIndex];
    }
예제 #14
0
    //캐릭터가 땅을 클릭할때 실행되는 함수.
    void OnMouseEvent_IdleRun(Define.MouseEvent evt)
    {
        //True ->무언가를 수확중일때
        //수확중에 움직이면 수확하는 것을 멈춤.
        if (_LoadingBar != null)
        {
            Managers.UI.ClosePopupUI(_LoadingBar);
        }

        if (State == Define.State.DIe)
        {
            return;
        }

        //스크린에서 부터 Raycast를 쏴서 부딪친것을 hit에 저장시킴.
        RaycastHit hit;
        Ray        ray        = Camera.main.ScreenPointToRay(Input.mousePosition);
        bool       raycastHit = Physics.Raycast(ray, out hit, 100.0f, _mask);

        switch (evt)
        {
        //최초로 마우스를 눌렀을때 실행.
        case Define.MouseEvent.PointerDown:
        {
            if (raycastHit)
            {
                //부딪친 오브젝트의 좌표를 가져 온 후
                //공격을 하고 있었다면 멈추고 움직 임.
                _desPos    = hit.point;
                State      = Define.State.Moving;
                _stopSkill = false;

                //Raycast에 부딪친 좌표가 만약 몬스터라면 _LockTarget에 값을 넣어 줌
                if (hit.collider.gameObject.layer == (int)Define.Layer.Monster)
                {
                    _lockTarget = hit.collider.gameObject;
                }
                else
                {
                    _lockTarget = null;
                }
            }
        }
        break;

        //마우스를 누르고 있을때 실행.
        case Define.MouseEvent.Press:
        {
            //실시간으로 부딪친 위치를 바꿔 줌.
            if (_lockTarget == null && raycastHit)
            {
                _desPos = hit.point;
            }
        }
        break;

        //땠을때 실행.
        //공격하고 있었다면 공격을 멈춤
        case Define.MouseEvent.PointerUp:
            _stopSkill = true;
            break;
        }
    }