CapersProject/Assets/02.Scripts/GameTimeManager.cs
Nam Tae Gun d7010a279b 타이쿤 추가 업데이트 내용
+ 화면 밖에서 손님이 요구하는 중일 때, Indicator를 통해서 Ui 표시
+ Open, Closed Ui 추가 및 기능 연결
+ 테이블 찾는 로직 변경 (전부 랜덤) - 기존에는 항상 같은 순서로 자리를 채움
+ 통계용 데이터 CustomerVisitInfo 추가 (추후에 통계Ui 생길 때 연결)
+ 대화 조건 변경
+ 일부 가구들 상호작용 조건 변경

+ Outline shader Render Face(Front -> Both 변경 - Front면 x축 뒤집는 경우 안나옴)
+ GraphicMaterialOverride를 사용하는 경우, 에디터에서 전체화면 등 특정 상황에서 material이 사라지는 버그 수정
+ InteractionFuniture Open, Closed 공통 기능으로 병합
2024-07-22 09:42:29 +09:00

127 lines
3.4 KiB
C#

using System;
using BlueWater.Tycoons;
using Sirenix.OdinInspector;
using UnityEngine;
namespace BlueWater
{
public class GameTimeManager : Singleton<GameTimeManager>
{
[SerializeField, Required]
private GameTimeDataSo _gameTimeDataSo;
[SerializeField]
private bool _isPaused;
[Title("현재 시간 정보")]
[SerializeField]
private int _currentDays = 1;
private TimeSpan _gameTime;
private TimeSpan _closeTime;
private float _timeIncrementPerMinutes;
protected override void OnAwake()
{
OnTycoonPreparing();
}
private void Start()
{
TycoonManager.Instance.OnTycoonOpenedEvent += OnTycoonOpened;
TycoonManager.Instance.OnTycoonClosedEvent += OnTycoonClosed;
_timeIncrementPerMinutes = _gameTimeDataSo.TimeIncrementPerMinutes;
}
private void Update()
{
if (_isPaused) return;
var incrementTime = _timeIncrementPerMinutes * Time.deltaTime;
_gameTime = _gameTime.Add(TimeSpan.FromMinutes(incrementTime));
if (_gameTime >= _closeTime)
{
OnTycoonClosed();
}
}
private void OnDestroy()
{
if (Quitting) return;
TycoonManager.Instance.OnTycoonOpenedEvent -= OnTycoonOpened;
TycoonManager.Instance.OnTycoonClosedEvent -= OnTycoonClosed;
}
public void PauseGameTime()
{
_isPaused = true;
}
public void ResumeGameTime()
{
_isPaused = false;
}
public void AddDays()
{
_currentDays++;
}
public void SetDays(int days)
{
if (days <= 0)
{
Debug.LogWarning("날짜 규격이 맞지않습니다.");
return;
}
_currentDays = days;
}
public void SetGameTime(int hours, int minutes = 0)
{
if (hours < 0 || hours >= 24 || minutes < 0 || minutes >= 60)
{
Debug.LogWarning("시간 규격이 맞지않습니다.");
return;
}
_gameTime = new TimeSpan(_gameTime.Days, hours, minutes, 0);
}
public int GetCurrentDays() => _currentDays;
public TimeSpan GetCurrentGameTime() => _gameTime;
public string GetFormattedGameTime()
{
return $"{_gameTime.Hours:D2}:{_gameTime.Minutes:D2}";
}
public int GetTycoonOpenTime() => _gameTimeDataSo.TycoonOpenTime;
public int GetTycoonCloseTime() => _gameTimeDataSo.TycoonCloseTime;
public TimeSpan GetTycoonOpenTimeSpan() => new(_gameTime.Days, GetTycoonOpenTime(), 0, 0);
public TimeSpan GetTycoonCloseTimeSpan() => new(_gameTime.Days, GetTycoonCloseTime(), 0, 0);
private void OnTycoonPreparing()
{
PauseGameTime();
SetGameTime(GetTycoonOpenTime());
}
private void OnTycoonOpened()
{
_closeTime = GetTycoonCloseTimeSpan();
SetGameTime(GetTycoonOpenTime());
ResumeGameTime();
}
private void OnTycoonClosed()
{
PauseGameTime();
SetGameTime(GetTycoonCloseTime());
}
}
}