diff --git a/Gameton-06/Assets/Gameton/Resources/GameData/heart.json b/Gameton-06/Assets/Gameton/Resources/GameData/heart.json deleted file mode 100644 index 01c771e8..00000000 --- a/Gameton-06/Assets/Gameton/Resources/GameData/heart.json +++ /dev/null @@ -1,8 +0,0 @@ -[ - { - "characterId": 0, - "currentHearts": 3, - "heartRechargeTime": 0, - "lastHeartTime": "" - } -] \ No newline at end of file diff --git a/Gameton-06/Assets/Gameton/Resources/GameData/heart.json.meta b/Gameton-06/Assets/Gameton/Resources/GameData/heart.json.meta deleted file mode 100644 index 9dcdcd67..00000000 --- a/Gameton-06/Assets/Gameton/Resources/GameData/heart.json.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: e8666d47c97d4d347aa8687892718f69 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Gameton-06/Assets/Gameton/Resources/GameData/player.json b/Gameton-06/Assets/Gameton/Resources/GameData/player.json deleted file mode 100644 index ff157e35..00000000 --- a/Gameton-06/Assets/Gameton/Resources/GameData/player.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "id": 0, - "type": "w", - "name": "lulu", - "level": 3, - "experience": 0, - "hp": 1000, - "mp": 1000, - "attackPower": 50, - "defensivePower": 30, - "critical": 30 - } -] \ No newline at end of file diff --git a/Gameton-06/Assets/Gameton/Resources/GameData/player.json.meta b/Gameton-06/Assets/Gameton/Resources/GameData/player.json.meta deleted file mode 100644 index 263e553e..00000000 --- a/Gameton-06/Assets/Gameton/Resources/GameData/player.json.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: a4dee2e685350b1458b15992a0fdfc34 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Gameton-06/Assets/Gameton/Scripts/Character/Heart/HeartDataManager.cs b/Gameton-06/Assets/Gameton/Scripts/Character/Heart/HeartDataManager.cs index 67a4798f..31864951 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Character/Heart/HeartDataManager.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Character/Heart/HeartDataManager.cs @@ -52,7 +52,7 @@ namespace TON public void SetCurrentUserHeart() { characterId = PlayerPrefs.GetInt("SelectedPlayerIndex", -1); - if (characterId > -1) + if (characterId > -1 && heartDatas.Count > 0) { currentHeartData = heartDatas[characterId]; if (currentHeartData != null) @@ -85,9 +85,16 @@ namespace TON { if (currentHeartData.currentHearts >= maxHearts) return; - DateTime lastTime = DateTime.Parse(currentHeartData.lastHeartTime); - TimeSpan timePassed = DateTime.Now - lastTime; + DateTime lastTime; + bool hasValidTime = DateTime.TryParse(currentHeartData.lastHeartTime, out lastTime); + if (!hasValidTime) + { + lastTime = DateTime.Now; // 기본값 설정 + currentHeartData.lastHeartTime = lastTime.ToString(); + } + + TimeSpan timePassed = DateTime.Now - lastTime; int heartsToRecover = (int)(timePassed.TotalSeconds / heartRechargeTime); if (heartsToRecover > 0) @@ -109,16 +116,23 @@ namespace TON if (currentHeartData.currentHearts > 0) { currentHeartData.currentHearts--; + // lastHeartTime이 비어있거나 잘못된 경우를 대비하여 기본값 설정 + DateTime lastTime; + bool hasValidTime = DateTime.TryParse(currentHeartData.lastHeartTime, out lastTime); + + if (!hasValidTime) + { + lastTime = DateTime.Now; // 기본값을 현재 시간으로 설정 + currentHeartData.lastHeartTime = lastTime.ToString(); + } - // 재충전 중일 경우 lastHeartTime을 유지 - DateTime lastTime = DateTime.Parse(currentHeartData.lastHeartTime); TimeSpan timePassed = DateTime.Now - lastTime; + // 재충전 시간이 지났거나, 처음 소모하여 재충전이 시작될 때만 lastHeartTime 갱신 if (timePassed.TotalSeconds >= heartRechargeTime || currentHeartData.currentHearts == maxHearts - 1) { currentHeartData.lastHeartTime = DateTime.Now.ToString(); } - SaveHeartData(); FindObjectOfType().UpdateHeartUI(); // UI 업데이트 } @@ -129,7 +143,15 @@ namespace TON { if (currentHeartData.currentHearts >= maxHearts) return 0; - DateTime lastTime = DateTime.Parse(currentHeartData.lastHeartTime); + DateTime lastTime; + bool hasValidTime = DateTime.TryParse(currentHeartData.lastHeartTime, out lastTime); + + if (!hasValidTime) + { + lastTime = DateTime.Now; // 기본값 설정 + currentHeartData.lastHeartTime = lastTime.ToString(); + } + TimeSpan timePassed = DateTime.Now - lastTime; int timeLeft = heartRechargeTime - (int)timePassed.TotalSeconds; diff --git a/Gameton-06/Assets/Gameton/Scripts/Character/PlayerDataManager.cs b/Gameton-06/Assets/Gameton/Scripts/Character/PlayerDataManager.cs index 0aef4e7c..d2bc600f 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Character/PlayerDataManager.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Character/PlayerDataManager.cs @@ -23,8 +23,7 @@ namespace TON public void Initalize() { LoadPlayerData(); - // 현재 플레이어 1개만 사용하므로 0번째 인덱스의 플레이어 데이터를 사용 - PlayerPrefs.SetInt("SelectedPlayerIndex", 0); + // PlayerPrefs.SetInt("SelectedPlayerIndex", 0); } private void LoadPlayerData() @@ -88,12 +87,13 @@ namespace TON public void SetCurrentUserData() { - int characterId = PlayerPrefs.GetInt("SelectedPlayerIndex", -1); - if (characterId > -1) + if (playersData.Count > 0) { - player = playersData[characterId]; + // 현재 플레이어 1개만 사용하므로 0번째 인덱스의 플레이어 데이터를 사용 + PlayerPrefs.SetInt("SelectedPlayerIndex", 0); + player = playersData[0]; // FIXME: 테스트를 위해 캐릭터 레벨 강제 적용함 - player.level = 15; + // player.level = 15; } else { diff --git a/Gameton-06/Assets/Gameton/Scripts/Common/JSONLoader.cs b/Gameton-06/Assets/Gameton/Scripts/Common/JSONLoader.cs index d7367d19..704b5d03 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Common/JSONLoader.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Common/JSONLoader.cs @@ -121,7 +121,8 @@ namespace TON } else { - Debug.LogError($"❌ Resources에서 JSON 파일을 찾을 s수 없음: {path}"); + Debug.LogError($"❌ Resources에서 JSON 파일을 찾을 수 없음: {path}"); + File.WriteAllText(persistentPath, "[]"); } } diff --git a/Gameton-06/Assets/Gameton/Scripts/Common/Main.cs b/Gameton-06/Assets/Gameton/Scripts/Common/Main.cs index 2ecfa81e..4c6ac6aa 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Common/Main.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Common/Main.cs @@ -28,10 +28,6 @@ namespace TON // TODO : GameDataModel.Singleton.Initalize(); PlayerDataManager.Singleton.Initalize(); - PlayerDataManager.Singleton.SetCurrentUserData(); - - StageManager.Singleton.Initialize(); - SkillDataManager.Singleton.Initalize(); isIniaialized = true; } diff --git a/Gameton-06/Assets/Gameton/Scripts/GameData/HeartData.cs b/Gameton-06/Assets/Gameton/Scripts/GameData/HeartData.cs index c6d182ef..23338ab0 100644 --- a/Gameton-06/Assets/Gameton/Scripts/GameData/HeartData.cs +++ b/Gameton-06/Assets/Gameton/Scripts/GameData/HeartData.cs @@ -18,7 +18,8 @@ namespace TON public HeartData(int characterId) { this.characterId = characterId; - // currentHearts = maxHearts; + currentHearts = 3; + lastHeartTime = null; } } diff --git a/Gameton-06/Assets/Gameton/Scripts/Scenes/LobbyScene.cs b/Gameton-06/Assets/Gameton/Scripts/Scenes/LobbyScene.cs index d2a40e50..5fb2451c 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Scenes/LobbyScene.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Scenes/LobbyScene.cs @@ -21,6 +21,12 @@ namespace TON yield return null; } + PlayerDataManager.Singleton.SetCurrentUserData(); + + StageManager.Singleton.Initialize(); + SkillDataManager.Singleton.Initalize(); + + UIManager.Show(UIList.LobbyUI); UIManager.Show(UIList.OptionUI); }