Ejemplo n.º 1
0
    /// <summary>
    /// 플레이어와 드론간 거리 계산
    /// </summary>
    void CalcDistance()
    {
        if (!IngameCanvasManager.instance.isIngameScene)
        {
            return;
        }

        // 거리 계산
        controlDistanceGauge.fillAmount = Vector3.Distance(transform.position, drone.transform.position) / currentDroneControlMaxDistance;
        distText.text = (controlDistanceGauge.fillAmount * currentDroneControlMaxDistance).ToString("000") + " M";

        // 문자 색상
        if (controlDistanceGauge.fillAmount >= 1.0f)
        {
            distText.color = Color.red;
        }
        else if (controlDistanceGauge.fillAmount > 0.7)
        {
            distText.color = new Color(1f, 0.5f, 0f);
        }
        else
        {
            distText.color = Color.white;
        }

        if ((dm.GetStatus() != DroneStatus.Recall && dm.GetStatus() != DroneStatus.Landing && dm.GetStatus() != DroneStatus.Rest) &&
            PlayerPrefsData.instance.isTutorialFinish == 1 &&
            Vector3.Distance(transform.position, drone.transform.position) > currentDroneControlMaxDistance
            )
        {
            status = PlayerStatus.Trouble;
            dm.SetStatus(DroneStatus.Trouble);

            // 메시지
            IngameCanvasManager.instance.OpenNoticeMessage("플레이어와 거리가 너무 멉니다.", 3.0f);
        }
    }
Ejemplo n.º 2
0
    /// <summary>
    /// 대화 시작 여부를 판단 및 진행
    /// </summary>
    public void TalkSystem()
    {
        // 대화 중에는 x, UI 상호작용 중이라면 X
        if (TalkManager.instance.talking || IngameCanvasManager.instance.isCanvasOn)
        {
            return;
        }

        //if (InputDeviceChecker.instance.Interact() && InteractiveTarget != null)
        if (InputDeviceChecker.instance.Interact() && !isInteractBtnDown)
        {
            isInteractBtnDown = true;

            // 대화 상대가 있다면 대화 시작
            if (InteractiveTarget != null)
            {
                if (!InteractiveTarget.CompareTag("Portal") &&
                    dm.GetStatus() == DroneStatus.Control)
                {
                    // 상태 대화중으로 변경
                    dm.SetStatus(DroneStatus.Talk);

                    // 대상 NPC에 상호작용 시작 시그널 전달
                    InteractiveTarget.GetComponent <NPCInteractiveController>().InteractiveStart(gameObject);

                    // 기체 기울어짐 등 회복
                    dm.DirectDroneRecoverMoment(transform.eulerAngles.y);
                    // 상하 움직임 초기화
                    dm.MovementUpDown(true);
                }

                // 대화 종료
                else if (dm.GetStatus() == DroneStatus.Talk)
                {
                    // 상태 조종중으로 변경
                    dm.SetStatus(DroneStatus.Control);

                    // 대상 NPC에 상호작용 종료 시그널 전달
                    InteractiveTarget.gameObject.GetComponent <NPCInteractiveController>().InteractiveStop();
                }
            }

            //  상호작용 상대가 없다면. Ingame UI 메뉴 탭 활성화
            else if (dm.GetStatus() == DroneStatus.Control ||
                     dm.GetStatus() == DroneStatus.Landing ||
                     dm.GetStatus() == DroneStatus.Rest)
            {
                // 예기치 못한 동작이 불가하도록 일괄 상태 변경
                // 탭을 닫을 때 최신 시점 정보를 토대로 시점 셋팅
                PlayerController.instance.setStatus(PlayerStatus.Talk);
                PlayerController.instance.dm.SetStatus(DroneStatus.Talk);

                // 기체 기울어짐 등 회복
                dm.DirectDroneRecoverMoment(transform.eulerAngles.y);
                // 상하 움직임 초기화
                dm.MovementUpDown(true);


                Input.ResetInputAxes(); // 버튼 입력 초기화
                IngameCanvasManager.instance.MenuTab(true);

                print("Drone Menu tab open request");
            }
        }
        //else if(Input.GetButtonUp("Interact"))
        else if (InputDeviceChecker.instance.InteractUp())
        {
            isInteractBtnDown = false;
        }
    }