Reviewed-on: #59 Reviewed-by: 99jamin <rhwk341@naver.com> Reviewed-by: Lim0_C <dladudcks22@gmail.com>
151 lines
4.3 KiB
C#
151 lines
4.3 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class HousingCanvasController : MonoBehaviour
|
|
{
|
|
[Header("일상행동 상호작용")]
|
|
[SerializeField] private GameObject interactionButton;
|
|
public InteractionTextsContoller interactionTextsController;
|
|
|
|
[Header("돌발 이벤트")]
|
|
[SerializeField] private GameObject suddenPanel;
|
|
[SerializeField] private TMP_Text suddenText;
|
|
[SerializeField] private GameObject[] suddenEventImages;
|
|
|
|
[Header("로딩(스위칭) 패널")]
|
|
[SerializeField] private GameObject switchingPanel;
|
|
private SwitchingPanelController switchingPanelController;
|
|
|
|
private Coroutine _autoHideCoroutine;
|
|
|
|
public Action OnInteractionButtonPressed;
|
|
public Action OnSuddenButtonPressed;
|
|
|
|
void Awake()
|
|
{
|
|
interactionTextsController.InitInteractionTexts();
|
|
interactionButton.SetActive(false);
|
|
suddenPanel.SetActive(false);
|
|
}
|
|
|
|
#region NPC 상호 작용
|
|
|
|
public void ShowNpcInteractionButton(Action onInteractionButtonPressed)
|
|
{
|
|
interactionButton.SetActive(true);
|
|
OnInteractionButtonPressed = onInteractionButtonPressed;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 상호작용 일상 행동
|
|
|
|
// 상호작용 가능한 사물에 가까이 갔을 때 화면에 텍스트, 버튼 표시
|
|
public void ShowInteractionButton(string actText, string descText,Action onInteractionButtonPressed)
|
|
{
|
|
interactionTextsController.ActiveTexts(actText, descText);
|
|
interactionButton.SetActive(true);
|
|
|
|
//각 행동 별로 실행되어야 할 이벤트 구독
|
|
OnInteractionButtonPressed = onInteractionButtonPressed;
|
|
}
|
|
|
|
//범위에서 벗어나면 상호작용 버튼 off
|
|
public void HideInteractionButton()
|
|
{
|
|
interactionButton.SetActive(false);
|
|
|
|
//구독해놓은 이벤트 해제
|
|
OnInteractionButtonPressed = null;
|
|
}
|
|
|
|
//상호작용 버튼 눌렀을 때
|
|
public void OnClickInteractionButton()
|
|
{
|
|
//상호작용 별 행동 수행
|
|
OnInteractionButtonPressed?.Invoke();
|
|
OnInteractionButtonPressed = null;
|
|
|
|
//상호작용 버튼과 텍스트 숨김
|
|
HideInteractionButton();
|
|
interactionTextsController.InitInteractionTexts();
|
|
}
|
|
#endregion
|
|
|
|
#region 돌발 이벤트
|
|
public void ShowSuddenEventPanel(string actText, Action onSuddenButtonPressed)
|
|
{
|
|
suddenPanel.SetActive(true);
|
|
suddenText.text = actText;
|
|
OnSuddenButtonPressed += onSuddenButtonPressed;
|
|
}
|
|
public void HideSuddenEventPanel()
|
|
{
|
|
suddenPanel.SetActive(false);
|
|
suddenText.text = "";
|
|
OnSuddenButtonPressed = null;
|
|
}
|
|
public void OnSuddenConfirmButton()
|
|
{
|
|
suddenText.text = "";
|
|
OnSuddenButtonPressed?.Invoke();
|
|
}
|
|
|
|
public void ShowSuddenEventImage(AfterWorkEventType afterWorkEventType)
|
|
{
|
|
if (_autoHideCoroutine != null) StopCoroutine(_autoHideCoroutine);
|
|
|
|
switch (afterWorkEventType)
|
|
{
|
|
case AfterWorkEventType.OvertimeWork:
|
|
suddenEventImages[0].SetActive(true);
|
|
break;
|
|
case AfterWorkEventType.TeamGathering:
|
|
suddenEventImages[1].SetActive(true);
|
|
break;
|
|
}
|
|
//사운드 재생
|
|
|
|
_autoHideCoroutine = StartCoroutine(AutoHideSuddenImage(afterWorkEventType));
|
|
}
|
|
|
|
public void HideSuddenEventImage()
|
|
{
|
|
foreach (var image in suddenEventImages)
|
|
{
|
|
image.SetActive(false);
|
|
}
|
|
}
|
|
private IEnumerator AutoHideSuddenImage(AfterWorkEventType afterWorkEventType)
|
|
{
|
|
float startTime = Time.time;
|
|
while (Time.time - startTime < HousingConstants.SUDDENEVENT_IAMGE_SHOW_TIME)
|
|
{
|
|
if (Input.touchCount > 0 || Input.GetMouseButtonDown(0))
|
|
{
|
|
break;
|
|
}
|
|
yield return null;
|
|
}
|
|
|
|
//패널 닫고 효과음 끄기
|
|
HideSuddenEventImage();
|
|
HideSuddenEventPanel();
|
|
GameManager.Instance.StopSuddenEventSound(afterWorkEventType);
|
|
|
|
_autoHideCoroutine = null;
|
|
}
|
|
|
|
public bool IsSuddenPanelActive()
|
|
{
|
|
return suddenPanel.activeSelf;
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|