diff --git a/Gameton-06/Assets/Gameton/Scripts/Backend/BackendCashDataManager.cs b/Gameton-06/Assets/Gameton/Scripts/Backend/BackendCashDataManager.cs new file mode 100644 index 00000000..b449392f --- /dev/null +++ b/Gameton-06/Assets/Gameton/Scripts/Backend/BackendCashDataManager.cs @@ -0,0 +1,119 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using BackEnd; +using LitJson; + +namespace TON +{ + /// + /// 뒤끝 서버 데이터 관리 담당 클래스 + /// + public class BackendCashDataManager + { + // 테이블 이름 상수 + private const string CASH_TABLE = "CASH_DATA"; + + + // PlayerDataManager에서 재화 데이터 로드 + public void LoadMyCashData(System.Action onComplete) + { + CashData cashData = new CashData(); + + Backend.PlayerData.GetMyData(CASH_TABLE, callback => + { + if (callback.IsSuccess() == false) + { + Debug.Log("데이터 읽기 중에 문제가 발생했습니다 : " + callback.ToString()); + onComplete?.Invoke(cashData); // 에러 상황에서도 기본 데이터 반환 + return; + } + + // 불러오기에는 성공했으나 데이터가 존재하지 않는 경우 + if (callback.IsSuccess() && callback.FlattenRows().Count <= 0) + { + Debug.Log("데이터가 존재하지 않습니다"); + InsertInitData(() => + { + // 초기 데이터 삽입 후 다시 데이터를 불러옴 + LoadDataAfterInsert(onComplete); + }); + return; + } + + // 1개 이상 데이터를 불러온 경우 + if (callback.FlattenRows().Count > 0) + { + cashData.fish = int.Parse(callback.FlattenRows()[0]["fish"].ToString()); + cashData.gold = int.Parse(callback.FlattenRows()[0]["gold"].ToString()); + onComplete?.Invoke(cashData); // 성공 시 데이터 반환 + } + }); + } + + // 데이터 삽입 후 다시 불러오는 메소드 + private void LoadDataAfterInsert(System.Action onComplete) + { + Backend.PlayerData.GetMyData(CASH_TABLE, callback => + { + CashData cashData = new CashData(); + + if (callback.IsSuccess() && callback.FlattenRows().Count > 0) + { + cashData.fish = int.Parse(callback.FlattenRows()[0]["fish"].ToString()); + cashData.gold = int.Parse(callback.FlattenRows()[0]["gold"].ToString()); + } + + onComplete?.Invoke(cashData); + }); + } + + /// + /// 캐릭터 초기 생성 시 row 삽입 + /// + public void InsertInitData(System.Action onComplete = null) + { + Param param = new Param(); + param.Add("gold", 0); + param.Add("fish", 0); + + Backend.PlayerData.InsertData(CASH_TABLE, param, callback => + { + if (callback.IsSuccess()) + { + Debug.Log("초기 데이터 삽입 성공"); + } + else + { + Debug.LogError("초기 데이터 삽입 실패: " + callback.ToString()); + } + + onComplete?.Invoke(); + }); + } + + public void UpdateFishData(int fish, System.Action onComplete = null) + { + Param param = new Param(); + param.Add("fish", fish); + + Backend.PlayerData.UpdateMyLatestData(CASH_TABLE, param, callback => + { + CashData updatedData = new CashData { fish = fish }; + onComplete?.Invoke(updatedData); + }); + } + + public void UpdateGoldData(int gold, System.Action onComplete = null) + { + Param param = new Param(); + param.Add("gold", gold); + + Backend.PlayerData.UpdateMyLatestData(CASH_TABLE, param, callback => + { + CashData updatedData = new CashData { gold = gold }; + onComplete?.Invoke(updatedData); + }); + } + } +} \ No newline at end of file diff --git a/Gameton-06/Assets/Gameton/Scripts/Backend/BackendCashDataManager.cs.meta b/Gameton-06/Assets/Gameton/Scripts/Backend/BackendCashDataManager.cs.meta new file mode 100644 index 00000000..d4f38126 --- /dev/null +++ b/Gameton-06/Assets/Gameton/Scripts/Backend/BackendCashDataManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7af50547bf0c623478090ca1a2a45822 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Gameton-06/Assets/Gameton/Scripts/Backend/BackendManager.cs b/Gameton-06/Assets/Gameton/Scripts/Backend/BackendManager.cs index 4ad75974..c9a3b24b 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Backend/BackendManager.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Backend/BackendManager.cs @@ -62,7 +62,8 @@ namespace TON if (isSuccess) { Debug.Log("로그인 성공!"); - // 게임 시작 로직은 Main.cs에서 처리 + + PlayerDataManager.Singleton.Initalize(); } else { diff --git a/Gameton-06/Assets/Gameton/Scripts/Character/PlayerDataManager.cs b/Gameton-06/Assets/Gameton/Scripts/Character/PlayerDataManager.cs index 589d1436..fbb59d8e 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Character/PlayerDataManager.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Character/PlayerDataManager.cs @@ -9,21 +9,23 @@ namespace TON { // 사용자가 생성해둔 플레이어 데이터를 싱글톤으로 전역 사용하기 위함 public List playersData { get; private set; } - public PlayerData player { get; private set; } - - [SerializeField] - private int expVariable = 50; // 경험치 변수 (조정 가능) - [SerializeField] - private int attackGrowthFactor = 50; // 공격력 성장 변수 (조정 가능) + public int goldAmount { get; private set; } + public int fishAmount { get; private set; } public int defensiveIntention { get; private set; } = 200; // 방어력 변수 (조정 가능) + [SerializeField] private int expVariable = 50; // 경험치 변수 (조정 가능) + [SerializeField] private int attackGrowthFactor = 50; // 공격력 성장 변수 (조정 가능) + + private BackendCashDataManager cashDataManager; public void Initalize() { + cashDataManager = new BackendCashDataManager(); + LoadPlayerData(); - // PlayerPrefs.SetInt("SelectedPlayerIndex", 0); + LoadPlayerCashData(); } private void LoadPlayerData() @@ -41,6 +43,35 @@ namespace TON } } + private void LoadPlayerCashData() + { + cashDataManager.LoadMyCashData(cashData => + { + // 데이터 로드 완료 후 실행될 코드 + goldAmount = cashData.gold; + fishAmount = cashData.fish; + Debug.Log($"로드된 골드: {cashData.gold}, 물고기: {cashData.fish}"); + }); + } + + public void AddGold(int amount) + { + goldAmount += amount; + cashDataManager.UpdateGoldData(goldAmount, updatedData => + { + // TODO: UI 업데이트 로직 적용 + // UpdateUI(); + }); + } + public void AddFish(int amount) + { + fishAmount += amount; + cashDataManager.UpdateFishData(fishAmount, updatedData => + { + // TODO: UI 업데이트 로직 적용 + // UpdateUI(); + }); + } // 공격력과 방어력 업데이트 private void UpdateStats(int currentLevel) { diff --git a/Gameton-06/Assets/Gameton/Scripts/Common/Main.cs b/Gameton-06/Assets/Gameton/Scripts/Common/Main.cs index eb03d921..fcc006d2 100644 --- a/Gameton-06/Assets/Gameton/Scripts/Common/Main.cs +++ b/Gameton-06/Assets/Gameton/Scripts/Common/Main.cs @@ -28,9 +28,6 @@ namespace TON BackendManager.Singleton.Initalize(); UIManager.Singleton.Initalize(); - // TODO : GameDataModel.Singleton.Initalize(); - PlayerDataManager.Singleton.Initalize(); - isIniaialized = true; } diff --git a/Gameton-06/Assets/Gameton/Scripts/GameData/CashData.cs b/Gameton-06/Assets/Gameton/Scripts/GameData/CashData.cs new file mode 100644 index 00000000..6db70254 --- /dev/null +++ b/Gameton-06/Assets/Gameton/Scripts/GameData/CashData.cs @@ -0,0 +1,19 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace TON +{ + [System.Serializable] + public class CashData + { + public int gold; + public int fish; + + public CashData() + { + gold = 0; + fish = 0; + } + } +} diff --git a/Gameton-06/Assets/Gameton/Scripts/GameData/CashData.cs.meta b/Gameton-06/Assets/Gameton/Scripts/GameData/CashData.cs.meta new file mode 100644 index 00000000..5b9c444a --- /dev/null +++ b/Gameton-06/Assets/Gameton/Scripts/GameData/CashData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c5faca4862c71c94ab30d84b1ec35872 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Gameton-06/Assets/Gameton/Scripts/UI/OptionUI.cs b/Gameton-06/Assets/Gameton/Scripts/UI/OptionUI.cs index e6977ca7..50ad3b98 100644 --- a/Gameton-06/Assets/Gameton/Scripts/UI/OptionUI.cs +++ b/Gameton-06/Assets/Gameton/Scripts/UI/OptionUI.cs @@ -1,7 +1,7 @@ using System.Collections; using System.Collections.Generic; +using TMPro; using UnityEngine; -using UnityEngine.SceneManagement; namespace TON { @@ -18,7 +18,18 @@ namespace TON // 상점 : 골드/생선 private void OnEnable() { - // Scene activeScene = UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene(); + SetCashAmount(); + SetObjectActive(); + } + + private void SetCashAmount() + { + goldObject.GetComponentInChildren().text = $"{PlayerDataManager.Singleton.goldAmount}"; + fishObject.GetComponentInChildren().text = $"{PlayerDataManager.Singleton.fishAmount}"; + } + + private void SetObjectActive() + { SceneType activeScene = Main.Singleton.currentSceneType; if (activeScene == SceneType.Lobby) @@ -42,7 +53,6 @@ namespace TON settingObject.SetActive(false); parseObject.SetActive(false); } - } public void OnClickSettingButton()