diff --git a/Gameton-06/Assets/Gameton/Scripts/Backend/BackendHeartDataManager.cs b/Gameton-06/Assets/Gameton/Scripts/Backend/BackendHeartDataManager.cs
new file mode 100644
index 00000000..934d7b3b
--- /dev/null
+++ b/Gameton-06/Assets/Gameton/Scripts/Backend/BackendHeartDataManager.cs
@@ -0,0 +1,97 @@
+using System.Collections;
+using System.Collections.Generic;
+using BackEnd;
+using UnityEngine;
+
+namespace TON
+{
+ ///
+ /// 뒤끝 서버 유저 입장권(하트) 데이터 관리 담당 클래스
+ ///
+ public class BackendHeartDataManager
+ {
+ private const string HEART_TABLE = "HEART_DATA";
+
+ public void LoadMyHeartData(System.Action onComplete)
+ {
+ HeartData heartData = new HeartData();
+
+ Backend.PlayerData.GetMyData(HEART_TABLE, callback =>
+ {
+ if (callback.IsSuccess() == false)
+ {
+ Debug.Log("데이터 읽기 중에 문제가 발생했습니다 : " + callback.ToString());
+ Main.Singleton.SystemQuit();
+ return;
+ }
+
+ // 불러오기에는 성공했으나 데이터가 존재하지 않는 경우
+ if (callback.IsSuccess() && callback.FlattenRows().Count <= 0)
+ {
+ Debug.Log("데이터가 존재하지 않습니다");
+ onComplete.Invoke(null);
+ return;
+ }
+
+ // 정상적으로 플레이어 데이터를 불러온 경우
+ if (callback.FlattenRows().Count > 0)
+ {
+ heartData.currentHearts = int.Parse(callback.FlattenRows()[0]["currentHearts"].ToString());
+
+ Debug.Log("test::: " + callback.FlattenRows()[0]["lastHeartTime"]);
+ heartData.lastHeartTime = callback.FlattenRows()[0]["lastHeartTime"].ToString();
+ onComplete?.Invoke(heartData); // 성공 시 데이터 반환
+ }
+ });
+ }
+
+
+ ///
+ /// 캐릭터 초기 생성 시 row 삽입
+ ///
+ public void CreateNewPlayerHeart(HeartData heartData, System.Action onComplete = null)
+ {
+ Param param = new Param();
+ param.Add("currentHearts", heartData.currentHearts);
+ param.Add("lastHeartTime");
+
+
+ Backend.PlayerData.InsertData(HEART_TABLE, param, callback =>
+ {
+ if (callback.IsSuccess())
+ {
+ Debug.Log("하트 입장권 생성 성공");
+ onComplete?.Invoke(true);
+ }
+ else
+ {
+ Debug.LogError("하트 입장권 생성 실패: " + callback.ToString());
+ onComplete?.Invoke(false);
+ }
+
+ });
+ }
+
+ public void UpdatePlayerHeartData(HeartData heartData, System.Action onComplete = null)
+ {
+ Param param = new Param();
+ param.Add("currentHearts", heartData.currentHearts);
+ param.Add("lastHeartTime", $"{heartData.lastHeartTime}");
+
+ Backend.PlayerData.UpdateMyLatestData(HEART_TABLE, param, (callback) =>
+ {
+ if (callback.IsSuccess())
+ {
+ Debug.Log("하트 입장권 업데이트 성공");
+ onComplete?.Invoke(true);
+ }
+ else
+ {
+ Debug.LogError("하트 입장권 업데이트 실패: " + callback.ToString());
+ onComplete?.Invoke(false);
+ }
+ });
+ }
+
+ }
+}
diff --git a/Gameton-06/Assets/Gameton/Scripts/Backend/BackendHeartDataManager.cs.meta b/Gameton-06/Assets/Gameton/Scripts/Backend/BackendHeartDataManager.cs.meta
new file mode 100644
index 00000000..00903293
--- /dev/null
+++ b/Gameton-06/Assets/Gameton/Scripts/Backend/BackendHeartDataManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 017508e8e83a9f24b9af7526937a4693
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ 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 7840962d..ba7b13a5 100644
--- a/Gameton-06/Assets/Gameton/Scripts/Character/Heart/HeartDataManager.cs
+++ b/Gameton-06/Assets/Gameton/Scripts/Character/Heart/HeartDataManager.cs
@@ -8,9 +8,7 @@ namespace TON
{
public class HeartDataManager : SingletonBase
{
- public List heartDatas { get; private set; }
public HeartData currentHeartData { get; private set; }
- private int characterId;
public int maxHearts = 5;
public int heartRechargeTime = 360; // 하트 충전 시간 6분
@@ -18,66 +16,80 @@ namespace TON
public int GetCurrentHearts() => currentHeartData.currentHearts;
public DateTime GetLastHeartTime() => DateTime.Parse(currentHeartData.lastHeartTime);
+ private int limitRetryCount = 0;
+ private BackendHeartDataManager heartDataManager;
- protected override void Awake()
+ private void OnEnable()
{
- base.Awake();
- LoadHeartData();
+ heartDataManager = new BackendHeartDataManager();
}
- private void LoadHeartData()
+ public void Initalize(System.Action onComplete)
{
- if (heartDatas != null)
- {
- heartDatas.Clear();
- }
+ LoadHeartData(onComplete);
+ }
- JSONLoader.SaveJsonToPersistentData("heart");
- heartDatas = JSONLoader.LoadJsonFromPersistentData>("Heart");
- if (heartDatas == null)
+ private void LoadHeartData(System.Action onComplete)
+ {
+ // * 사용자 정보 서버에서 조회
+ heartDataManager.LoadMyHeartData(heartData =>
{
- heartDatas = new List();
- }
+ SetCurrentUserHeart(heartData, onComplete);
+ });
}
// 캐릭터 생성 시 하트 초기값 생성
- public void CreateNewHeartSystem(int characterId)
+ public void CreateNewHeartSystem(System.Action onComplete = null)
{
- HeartData heartData = new HeartData(characterId);
- heartDatas.Add(heartData);
- Assert.IsTrue(JSONLoader.SaveUpdatedJsonToPersistentData(heartDatas, "heart"));
- LoadHeartData();
+ HeartData heartData = new HeartData();
+
+ heartDataManager.CreateNewPlayerHeart(heartData, isSuccess =>
+ {
+ if (isSuccess)
+ {
+ Debug.Log("캐릭터 생성 시 하트 초기값 생성 성공");
+ SetCurrentUserHeart(heartData, onComplete);
+ }
+ });
}
- public void SetCurrentUserHeart()
+ public void SetCurrentUserHeart(HeartData heartData, System.Action onComplete = null)
{
- characterId = 0;
- if (characterId > -1 && heartDatas.Count > 0)
+ currentHeartData = heartData;
+ if (currentHeartData != null)
{
- currentHeartData = heartDatas[characterId];
- if (currentHeartData != null)
- {
- RechargeHearts();
- }
- else
- {
- Debug.Log("하트 정보 불러오기 중 오류 발생 ::: 초기값으로 재정의 합니다.");
- CreateNewHeartSystem(characterId);
- }
+ RechargeHearts();
+ onComplete?.Invoke();
}
else
{
- Debug.LogError("유효하지 않은 캐릭터 정보입니다.");
- }
+ if (limitRetryCount > 3)
+ {
+ Debug.LogError($"하트 정보를 정상적으로 불러올 수 없어 초기값을 강제 적용합니다.");
+ currentHeartData = new HeartData();
+ onComplete?.Invoke();
+ }
+ limitRetryCount++;
+ Debug.LogError($"하트 불러오기 중 오류 발생 ::: 재시도 {limitRetryCount}");
+ CreateNewHeartSystem(onComplete);
+ }
}
// 하트 데이터 저장
public void SaveHeartData()
{
- heartDatas[characterId] = currentHeartData;
- Assert.IsTrue(JSONLoader.SaveUpdatedJsonToPersistentData(heartDatas, "heart"));
- LoadHeartData();
+ heartDataManager.UpdatePlayerHeartData(currentHeartData, isSuccess =>
+ {
+ if (isSuccess)
+ {
+ Debug.Log("하트 데이터 업데이트 성공");
+ }
+ else
+ {
+ Debug.LogError("하트 데이터 업데이트 성공");
+ }
+ });
}
// 게임이 다시 실행될때 마지막 하트 소모 시간과 현재 시간을 계산해서 하트 충전량을 반영
@@ -143,7 +155,6 @@ namespace TON
if (heartSystem != null)
{
heartSystem.UpdateHeartUI(); // UI 업데이트
-
}
}
diff --git a/Gameton-06/Assets/Gameton/Scripts/GameData/HeartData.cs b/Gameton-06/Assets/Gameton/Scripts/GameData/HeartData.cs
index 9de1cf3b..d410b0f9 100644
--- a/Gameton-06/Assets/Gameton/Scripts/GameData/HeartData.cs
+++ b/Gameton-06/Assets/Gameton/Scripts/GameData/HeartData.cs
@@ -8,16 +8,13 @@ namespace TON
[System.Serializable]
public class HeartData
{
- // 캐릭터 아이디
- public int characterId;
// 현재 하트 개수
public int currentHearts;
public string lastHeartTime;
// 캐릭터 생성시 하트 데이터 생성자
- public HeartData(int characterId)
+ public HeartData()
{
- this.characterId = characterId;
currentHearts = 5;
lastHeartTime = null;
}
diff --git a/Gameton-06/Assets/Gameton/Scripts/UI/CharaterCreateUI.cs b/Gameton-06/Assets/Gameton/Scripts/UI/CharaterCreateUI.cs
index 9249497e..1a22acb7 100644
--- a/Gameton-06/Assets/Gameton/Scripts/UI/CharaterCreateUI.cs
+++ b/Gameton-06/Assets/Gameton/Scripts/UI/CharaterCreateUI.cs
@@ -123,12 +123,14 @@ namespace TON
if (isSuccess)
{
// 하트 시스템을 생성한다
- HeartDataManager.Singleton.CreateNewHeartSystem(0);
- HeartDataManager.Singleton.SetCurrentUserHeart();
+ HeartDataManager.Singleton.CreateNewHeartSystem();
+ HeartDataManager.Singleton.Initalize(() =>
+ {
+ // 씬 변경
+ UIManager.Hide(UIList.CharaterCreateUI);
+ Main.Singleton.ChangeScene(SceneType.Intro);
+ });
- // 씬 변경
- UIManager.Hide(UIList.CharaterCreateUI);
- Main.Singleton.ChangeScene(SceneType.Intro);
}
});
diff --git a/Gameton-06/Assets/Gameton/Scripts/UI/TitleUI.cs b/Gameton-06/Assets/Gameton/Scripts/UI/TitleUI.cs
index 14f1bf04..ed409345 100644
--- a/Gameton-06/Assets/Gameton/Scripts/UI/TitleUI.cs
+++ b/Gameton-06/Assets/Gameton/Scripts/UI/TitleUI.cs
@@ -28,8 +28,10 @@ namespace TON
}
else
{
- HeartDataManager.Singleton.SetCurrentUserHeart();
- Main.Singleton.ChangeScene(SceneType.Lobby);
+ HeartDataManager.Singleton.Initalize(() =>
+ {
+ Main.Singleton.ChangeScene(SceneType.Lobby);
+ });
}
}