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