127 lines
4.9 KiB
C#
127 lines
4.9 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Serialization;
|
|
using Random = UnityEngine.Random;
|
|
|
|
[RequireComponent(typeof(Rigidbody))]
|
|
public class InteractionController : MonoBehaviour
|
|
{
|
|
[SerializeField] PlayerStats playerStats;
|
|
[SerializeField] LayerMask interactionLayerMask;
|
|
[FormerlySerializedAs("housingCanvasManager")]
|
|
[Header("UI 연동")]
|
|
[SerializeField] HousingCanvasController housingCanvasController;
|
|
|
|
|
|
#region 돌발 이벤트
|
|
private bool SuddenEventCalculator()
|
|
{
|
|
//TODO: 돌발이벤트 Dictionary로 작성해서 숫자별 작동하기 혹은 스위치문
|
|
var rand = Random.Range(0,3);
|
|
return rand == 1;
|
|
}
|
|
|
|
public Action SuddenEventHappen()
|
|
{
|
|
if (SuddenEventCalculator())
|
|
{
|
|
housingCanvasController.ShowSuddenEventPanel("갑자기 팀 회식이 잡혔다. 참석 해야 겠지?", () => { });
|
|
Debug.Log("SuddenEventHappen");
|
|
}
|
|
Debug.Log("퇴근 이벤트 호출됨");
|
|
return null;
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
// 상호작용 가능한 사물 범위에 들어올 때
|
|
private void OnTriggerEnter(Collider other)
|
|
{
|
|
if (interactionLayerMask == (interactionLayerMask | (1 << other.gameObject.layer)))
|
|
{
|
|
ActionType interactionType = other.gameObject.GetComponent<InteractionProp>().RoutineEnter();
|
|
if( interactionType != null )
|
|
{
|
|
PopActionOnScreen(interactionType);
|
|
}
|
|
}
|
|
}
|
|
// 사물에서 벗어날 때 UI 정리
|
|
private void OnTriggerExit(Collider other)
|
|
{
|
|
if (interactionLayerMask == (interactionLayerMask | (1 << other.gameObject.layer)))
|
|
{
|
|
housingCanvasController.HideInteractionButton();
|
|
}
|
|
}
|
|
|
|
// ActionType 별로 화면에 상호작용 내용 표시, 상호작용 버튼에 이벤트 작성
|
|
private void PopActionOnScreen(ActionType interactionType)
|
|
{
|
|
switch (interactionType)
|
|
{
|
|
case ActionType.Sleep:
|
|
housingCanvasController.ShowInteractionButton("침대에서 잘까?","숙면으로 시간 당 체력 1을 회복한다.", () =>
|
|
{
|
|
playerStats.PerformAction(ActionType.Sleep);
|
|
housingCanvasController.HideInteractionButton();
|
|
//TODO: 화면 전환 효과와 UI 업데이트 작업
|
|
});
|
|
break;
|
|
case ActionType.Housework:
|
|
housingCanvasController.ShowInteractionButton("밀린 집안일을 처리할까?","체력 1을 사용하고 좋은일이 일어날지도 모른다", () =>
|
|
{
|
|
if (playerStats.CanPerformByHealth(ActionType.Housework))
|
|
{
|
|
playerStats.PerformAction(ActionType.Housework);
|
|
housingCanvasController.HideInteractionButton();
|
|
//TODO: 집안일 후 랜덤 강화 효과 적용
|
|
}
|
|
else
|
|
{
|
|
housingCanvasController.SetActionText("힘들어서 못해..");
|
|
housingCanvasController.SetDescriptionText();
|
|
}
|
|
});
|
|
break;
|
|
case ActionType.Dungeon:
|
|
housingCanvasController.ShowInteractionButton("던전에 입장할까?","체력 3을 사용하고 3시간이 흐른다.", () =>
|
|
{
|
|
if (playerStats.CanPerformByHealth(ActionType.Dungeon))
|
|
{
|
|
playerStats.PerformAction(ActionType.Dungeon);
|
|
housingCanvasController.HideInteractionButton();
|
|
}
|
|
else
|
|
{
|
|
housingCanvasController.SetActionText("던전에 갈 체력이 되지 않아..");
|
|
housingCanvasController.SetDescriptionText();
|
|
}
|
|
});
|
|
break;
|
|
case ActionType.Work:
|
|
housingCanvasController.ShowInteractionButton("출근한다.","체력 3을 사용하고 저녁 6시에나 돌아오겠지..", () =>
|
|
{
|
|
if (playerStats.CanPerformByHealth(ActionType.Work))
|
|
{
|
|
playerStats.PerformAction(ActionType.Work);
|
|
housingCanvasController.HideInteractionButton();
|
|
playerStats.OnWorked += SuddenEventHappen();
|
|
}
|
|
else
|
|
{
|
|
housingCanvasController.SetActionText("도저히 출근할 체력이 안되는걸..?");
|
|
housingCanvasController.SetDescriptionText();
|
|
}
|
|
});
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|