DEG-124 [Feat] 씬 이동 구현
This commit is contained in:
parent
e198af6c19
commit
c3a7814c94
@ -90,7 +90,10 @@ public class DungeonLogic : MonoBehaviour
|
|||||||
_dungeonPanelController.SetBossHealthBar(0.0f); // 보스 체력 0 재설정
|
_dungeonPanelController.SetBossHealthBar(0.0f); // 보스 체력 0 재설정
|
||||||
|
|
||||||
_player.SetState(PlayerState.Win);
|
_player.SetState(PlayerState.Win);
|
||||||
|
|
||||||
// TODO: 강화 시스템으로 넘어가고 일상 맵으로 이동
|
// TODO: 강화 시스템으로 넘어가고 일상 맵으로 이동
|
||||||
|
|
||||||
|
StartCoroutine(DelayedSceneChange()); // 3초 대기 후 전환
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BIN
Assets/KSH/DungeonTestScene.unity
(Stored with Git LFS)
BIN
Assets/KSH/DungeonTestScene.unity
(Stored with Git LFS)
Binary file not shown.
@ -36,16 +36,30 @@ public class PlayerStats : MonoBehaviour
|
|||||||
|
|
||||||
private float previousAddHealth = 0f;
|
private float previousAddHealth = 0f;
|
||||||
|
|
||||||
private void Start()
|
public static PlayerStats Instance;
|
||||||
|
private void Awake()
|
||||||
{
|
{
|
||||||
_gameConstants = new GameConstants();
|
if (Instance == null)
|
||||||
_valueByAction = new ValueByAction();
|
{
|
||||||
_valueByAction.Initialize(); // 값 초기화
|
Instance = this;
|
||||||
|
DontDestroyOnLoad(gameObject); // 데이터값 유지용
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Destroy(gameObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
_gameConstants = new GameConstants();
|
||||||
HealthStat = _gameConstants.baseHealth;
|
HealthStat = _gameConstants.baseHealth;
|
||||||
TimeStat = _gameConstants.baseTime;
|
TimeStat = _gameConstants.baseTime;
|
||||||
ReputationStat = _gameConstants.baseReputation;
|
ReputationStat = _gameConstants.baseReputation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
_valueByAction = new ValueByAction();
|
||||||
|
_valueByAction.Initialize(); // 값 초기화
|
||||||
|
}
|
||||||
|
|
||||||
// 현재 체력으로 해당 행동이 가능한 지 확인
|
// 현재 체력으로 해당 행동이 가능한 지 확인
|
||||||
public bool CanPerformByHealth(ActionType actionType)
|
public bool CanPerformByHealth(ActionType actionType)
|
||||||
|
BIN
Assets/KSH/ReHousing.unity
(Stored with Git LFS)
BIN
Assets/KSH/ReHousing.unity
(Stored with Git LFS)
Binary file not shown.
@ -22,59 +22,57 @@ public class StatPanelController : MonoBehaviour
|
|||||||
[Header("Day")]
|
[Header("Day")]
|
||||||
[SerializeField] private TMP_Text dayCountText;
|
[SerializeField] private TMP_Text dayCountText;
|
||||||
|
|
||||||
[Header("Player Stat Class")]
|
|
||||||
[SerializeField] private PlayerStats playerStats;
|
|
||||||
|
|
||||||
private GameConstants _gameConstants = new GameConstants();
|
private GameConstants _gameConstants = new GameConstants();
|
||||||
|
|
||||||
private void Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
if (playerStats == null)
|
PlayerStats.Instance.OnStatsChanged += UpdateStat;
|
||||||
{
|
|
||||||
playerStats = FindObjectOfType<PlayerStats>();
|
|
||||||
}
|
|
||||||
|
|
||||||
playerStats.OnStatsChanged += UpdateStat;
|
|
||||||
GameManager.Instance.OnDayChanged += UpdateDay;
|
GameManager.Instance.OnDayChanged += UpdateDay;
|
||||||
InitStats();
|
InitStats();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnDisable()
|
||||||
|
{
|
||||||
|
// 이벤트 구독 해제
|
||||||
|
PlayerStats.Instance.OnStatsChanged -= UpdateStat;
|
||||||
|
GameManager.Instance.OnDayChanged -= UpdateDay;
|
||||||
|
}
|
||||||
|
|
||||||
private void InitStats()
|
private void InitStats()
|
||||||
{
|
{
|
||||||
healthBarImage.fillAmount = _gameConstants.baseHealth / _gameConstants.maxHealth;
|
var nowHealth = PlayerStats.Instance.HealthStat;
|
||||||
healthText.text = $"{_gameConstants.baseHealth}/{_gameConstants.maxHealth}";
|
var nowReputation = PlayerStats.Instance.ReputationStat;
|
||||||
|
var nowTime = PlayerStats.Instance.TimeStat;
|
||||||
|
|
||||||
reputationBarImage.fillAmount = _gameConstants.baseReputation / _gameConstants.maxReputation;
|
SetStat(nowTime, nowReputation, nowHealth);
|
||||||
reputationText.text = $"{_gameConstants.baseReputation}/{_gameConstants.maxReputation}";
|
|
||||||
|
|
||||||
clockTimeText.text = $"{_gameConstants.baseTime}:00";
|
|
||||||
ampmText.text = "AM";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateStat(PlayerStats.StatsChangeData statData)
|
private void UpdateStat(PlayerStats.StatsChangeData statData)
|
||||||
{
|
{
|
||||||
var timeVlaue = statData.Time;
|
SetStat(statData.Time, statData.Reputation, statData.Health);
|
||||||
var reputationVlaue = statData.Reputation;
|
}
|
||||||
var heathVlaue = statData.Health;
|
|
||||||
|
|
||||||
healthBarImage.fillAmount = heathVlaue / _gameConstants.maxHealth;
|
|
||||||
healthText.text = $"{heathVlaue}/{_gameConstants.maxHealth}";
|
|
||||||
|
|
||||||
reputationBarImage.fillAmount = reputationVlaue / _gameConstants.maxReputation;
|
|
||||||
reputationText.text = $"{reputationVlaue}/{_gameConstants.maxReputation}";
|
|
||||||
|
|
||||||
if (timeVlaue > 12) // 오후, 13부터
|
private void SetStat(float time, float reputation, float health)
|
||||||
|
{
|
||||||
|
healthBarImage.fillAmount = health / _gameConstants.maxHealth;
|
||||||
|
healthText.text = $"{health}/{_gameConstants.maxHealth}";
|
||||||
|
|
||||||
|
reputationBarImage.fillAmount = reputation / _gameConstants.maxReputation;
|
||||||
|
reputationText.text = $"{reputation}/{_gameConstants.maxReputation}";
|
||||||
|
|
||||||
|
if (time > 12) // 오후, 13부터
|
||||||
{
|
{
|
||||||
timeVlaue -= 12;
|
time -= 12;
|
||||||
clockTimeText.text = $"{timeVlaue}:00";
|
clockTimeText.text = $"{time}:00";
|
||||||
ampmText.text = "PM";
|
ampmText.text = "PM";
|
||||||
}
|
}
|
||||||
else // 오전
|
else // 오전
|
||||||
{
|
{
|
||||||
clockTimeText.text = $"{timeVlaue}:00";
|
clockTimeText.text = $"{time}:00";
|
||||||
ampmText.text = "AM";
|
ampmText.text = "AM";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dayCountText.text = GameManager.Instance.CurrentDay.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateDay(int day)
|
private void UpdateDay(int day)
|
||||||
|
@ -7,7 +7,6 @@ using UnityEngine.Serialization;
|
|||||||
[RequireComponent(typeof(Rigidbody))]
|
[RequireComponent(typeof(Rigidbody))]
|
||||||
public class InteractionController : MonoBehaviour
|
public class InteractionController : MonoBehaviour
|
||||||
{
|
{
|
||||||
[SerializeField] PlayerStats playerStats;
|
|
||||||
[SerializeField] LayerMask interactionLayerMask;
|
[SerializeField] LayerMask interactionLayerMask;
|
||||||
[FormerlySerializedAs("housingCanvasManager")]
|
[FormerlySerializedAs("housingCanvasManager")]
|
||||||
[Header("UI 연동")]
|
[Header("UI 연동")]
|
||||||
@ -18,7 +17,7 @@ public class InteractionController : MonoBehaviour
|
|||||||
|
|
||||||
private void Start()
|
private void Start()
|
||||||
{
|
{
|
||||||
playerStats.OnWorked += SuddenAfterWorkEventHappen;
|
PlayerStats.Instance.OnWorked += SuddenAfterWorkEventHappen;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 상호작용 가능한 사물 범위에 들어올 때
|
// 상호작용 가능한 사물 범위에 들어올 때
|
||||||
@ -60,10 +59,18 @@ public class InteractionController : MonoBehaviour
|
|||||||
|
|
||||||
housingCanvasController.ShowInteractionButton(interactionTexts.ActionText,interactionTexts.DescriptionText,()=>
|
housingCanvasController.ShowInteractionButton(interactionTexts.ActionText,interactionTexts.DescriptionText,()=>
|
||||||
{
|
{
|
||||||
if (playerStats.CanPerformByHealth(interactionType))
|
if (PlayerStats.Instance.CanPerformByHealth(interactionType))
|
||||||
{
|
{
|
||||||
playerStats.PerformAction(interactionType);
|
PlayerStats.Instance.PerformAction(interactionType);
|
||||||
interactionAnimationPanelController.ShowAnimationPanel(interactionType,interactionTexts.AnimationText);
|
|
||||||
|
if (interactionType == ActionType.Dungeon)
|
||||||
|
{
|
||||||
|
GameManager.Instance.ChangeToGameScene();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
interactionAnimationPanelController.ShowAnimationPanel(interactionType,interactionTexts.AnimationText);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -6,8 +6,6 @@ using UnityEngine.SceneManagement;
|
|||||||
|
|
||||||
public partial class GameManager : Singleton<GameManager>
|
public partial class GameManager : Singleton<GameManager>
|
||||||
{
|
{
|
||||||
[SerializeField] private PlayerStats playerStats;
|
|
||||||
|
|
||||||
private Canvas _canvas;
|
private Canvas _canvas;
|
||||||
|
|
||||||
// 게임 진행 상태
|
// 게임 진행 상태
|
||||||
@ -27,19 +25,7 @@ public partial class GameManager : Singleton<GameManager>
|
|||||||
{
|
{
|
||||||
// 오디오 초기화
|
// 오디오 초기화
|
||||||
InitializeAudio();
|
InitializeAudio();
|
||||||
|
PlayerStats.Instance.OnDayEnded += AdvanceDay;
|
||||||
// PlayerStats의 하루 종료 이벤트 구독
|
|
||||||
if (playerStats == null)
|
|
||||||
{
|
|
||||||
playerStats = FindObjectOfType<PlayerStats>();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (playerStats == null)
|
|
||||||
{
|
|
||||||
Debug.LogError("PlayerStats 컴포넌트를 찾을 수 없습니다.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
playerStats.OnDayEnded += AdvanceDay;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#region 대화 관련
|
#region 대화 관련
|
||||||
@ -74,12 +60,12 @@ public partial class GameManager : Singleton<GameManager>
|
|||||||
|
|
||||||
public void ChangeToGameScene()
|
public void ChangeToGameScene()
|
||||||
{
|
{
|
||||||
SceneManager.LoadScene("Game"); // 던전 Scene
|
SceneManager.LoadScene("DungeonTestScene"); // 던전 Scene
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ChangeToHomeScene()
|
public void ChangeToHomeScene()
|
||||||
{
|
{
|
||||||
SceneManager.LoadScene("Housing"); // Home Scene
|
SceneManager.LoadScene("ReHousing"); // Home Scene
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Open Setting Panel 등 Panel 처리
|
// TODO: Open Setting Panel 등 Panel 처리
|
||||||
@ -94,10 +80,7 @@ public partial class GameManager : Singleton<GameManager>
|
|||||||
|
|
||||||
private void OnDestroy()
|
private void OnDestroy()
|
||||||
{
|
{
|
||||||
if (playerStats != null)
|
PlayerStats.Instance.OnDayEnded -= AdvanceDay; // 이벤트 구독 해제
|
||||||
{
|
|
||||||
playerStats.OnDayEnded -= AdvanceDay; // 이벤트 구독 해제
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnApplicationQuit()
|
private void OnApplicationQuit()
|
||||||
|
@ -53,7 +53,7 @@ public partial class GameManager
|
|||||||
if (stageLevel < GameConstants.maxStage) // 현재 스테이지 1 혹은 2
|
if (stageLevel < GameConstants.maxStage) // 현재 스테이지 1 혹은 2
|
||||||
return EndingType.Bad;
|
return EndingType.Bad;
|
||||||
|
|
||||||
if (playerStats.ReputationStat >= happyEndReputation) // 평판이 일정 수치 이상
|
if (PlayerStats.Instance.ReputationStat >= happyEndReputation) // 평판이 일정 수치 이상
|
||||||
return EndingType.Happy;
|
return EndingType.Happy;
|
||||||
|
|
||||||
return EndingType.Normal;
|
return EndingType.Normal;
|
||||||
|
@ -6,9 +6,9 @@ EditorBuildSettings:
|
|||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
m_Scenes:
|
m_Scenes:
|
||||||
- enabled: 1
|
- enabled: 1
|
||||||
path: Assets/Scenes/Main.unity
|
path: Assets/KSH/ReHousing.unity
|
||||||
guid: 99c9720ab356a0642a771bea13969a05
|
guid: b748e35b920bde64cbd6ffe5fdb43e23
|
||||||
- enabled: 1
|
- enabled: 1
|
||||||
path: Assets/Scenes/Housing.unity
|
path: Assets/KSH/DungeonTestScene.unity
|
||||||
guid: 02daaec42d605494180038d387d4a776
|
guid: 4563b107911b0e54cbdf659694a6f17a
|
||||||
m_configObjects: {}
|
m_configObjects: {}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user