From 5bd7d6388659b88818c298f333007bf66c57bef9 Mon Sep 17 00:00:00 2001 From: Ino Date: Thu, 18 Sep 2025 07:16:44 +0900 Subject: [PATCH] =?UTF-8?q?"=EB=8B=A4=EC=9D=B4=EC=95=84=20=EC=95=A8?= =?UTF-8?q?=EB=B2=94=EC=9D=80=20=EC=88=9C=EC=B0=A8=EC=A0=81=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=97=B4=EB=A6=AC=EB=8A=94=EB=8D=B0,=20=ED=95=98?= =?UTF-8?q?=ED=8A=B8=EB=8F=84=20=EC=88=9C=EC=B0=A8=EC=A0=81=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=97=B4=EB=A6=AC=EB=8B=A4=EB=B3=B4=EB=8B=88=20?= =?UTF-8?q?=EB=8B=A4=EC=9D=B4=EC=95=84=EB=A1=9C=20=EB=AF=B8=EB=A6=AC=20?= =?UTF-8?q?=EC=95=A8=EB=B2=94=EC=9D=84=20=EC=97=B4=EA=B1=B0=EB=82=98=20?= =?UTF-8?q?=ED=95=9C=20=EA=B2=BD=EC=9A=B0,=20=ED=95=98=ED=8A=B8=20?= =?UTF-8?q?=EC=95=A8=EB=B2=94=EC=9D=B4=20=EB=84=88=EB=AC=B4=20=EC=A0=95?= =?UTF-8?q?=EC=B2=B4=EB=90=98=EB=8A=94=20=ED=98=84=EC=83=81=EC=9D=B4=20?= =?UTF-8?q?=EB=B0=9C=EC=83=9D=EB=90=A9=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 다이아 앨범이 열려있는 경우, 하트 앨범을 순서에 상관 없이 열 수 있도록 수정 가능한가요?" --- .../Easy Save 3/Types/ES3UserType_SaveData.cs | 4 + .../SingletonManagers/Managers/DBManager.cs | 16 +++ Assets/Scripts/UI/CollectionCard.cs | 58 +++++--- Assets/Scripts/UI/HuntingSlot.cs | 136 ++++++++++++------ 4 files changed, 150 insertions(+), 64 deletions(-) diff --git a/Assets/Easy Save 3/Types/ES3UserType_SaveData.cs b/Assets/Easy Save 3/Types/ES3UserType_SaveData.cs index 5e65d53..ee5c3f0 100644 --- a/Assets/Easy Save 3/Types/ES3UserType_SaveData.cs +++ b/Assets/Easy Save 3/Types/ES3UserType_SaveData.cs @@ -33,6 +33,7 @@ namespace ES3Types writer.WriteProperty("InterstitialADCount", instance.InterstitialADCount, ES3Type_int.Instance); writer.WriteProperty("ImageOpenStates_Left", instance.ImageOpenStates_Left, ES3Type_boolArray.Instance); writer.WriteProperty("ImageOpenStates_Right", instance.ImageOpenStates_Right, ES3Type_boolArray.Instance); + writer.WriteProperty("HeartImageOpen", instance.HeartImageOpen, ES3Type_boolArray.Instance); writer.WriteProperty("UnlockProgress", instance.UnlockProgress, ES3Type_longArray.Instance); writer.WriteProperty("NormalGameLevel", instance.NormalGameLevel, ES3Type_int.Instance); writer.WriteProperty("NormalGame_GetGold", instance.NormalGame_GetGold, ES3Type_long.Instance); @@ -101,6 +102,9 @@ namespace ES3Types case "ImageOpenStates_Right": instance.ImageOpenStates_Right = reader.Read(ES3Type_boolArray.Instance); break; + case "HeartImageOpen": + instance.HeartImageOpen = reader.Read(ES3Type_boolArray.Instance); + break; case "UnlockProgress": instance.UnlockProgress = reader.Read(ES3Type_longArray.Instance); break; diff --git a/Assets/Scripts/SingletonManagers/Managers/DBManager.cs b/Assets/Scripts/SingletonManagers/Managers/DBManager.cs index c5e177e..a9289bd 100644 --- a/Assets/Scripts/SingletonManagers/Managers/DBManager.cs +++ b/Assets/Scripts/SingletonManagers/Managers/DBManager.cs @@ -37,6 +37,7 @@ namespace CodeJay public int InterstitialADCount; public bool[] ImageOpenStates_Left, ImageOpenStates_Right; + public bool[] HeartImageOpen; public long[] UnlockProgress; public int NormalGameLevel; @@ -72,10 +73,12 @@ namespace CodeJay if (ImageOpenStates_Left == null) ImageOpenStates_Left = new bool[DB_HuntingData.CountEntities >> 1]; if (ImageOpenStates_Right == null) ImageOpenStates_Right = new bool[DB_HuntingData.CountEntities >> 1]; + if (HeartImageOpen == null) HeartImageOpen = new bool[DB_HuntingData.CountEntities >> 1]; for (int i = 0; i < ImageOpenStates_Left.Length; i++) ImageOpenStates_Left[i] = false; ImageOpenStates_Left[0] = true; // 최초 앨범 오픈 for (int i = 0; i < ImageOpenStates_Right.Length; i++) ImageOpenStates_Right[i] = false; + for (int i = 0; i < HeartImageOpen.Length; i++) HeartImageOpen[i] = false; if (this.UnlockProgress == null) this.UnlockProgress = new long[Defines.Constants.AI_IMAGE_NUMBER]; @@ -123,6 +126,10 @@ namespace CodeJay for (int i = 0; i < ImageOpenStates_Right.Length; i++) if (data.ImageOpenStates_Right.Length > i) ImageOpenStates_Right[i] = data.ImageOpenStates_Right[i]; + if (data.HeartImageOpen != null) + for (int i = 0; i < HeartImageOpen.Length; i++) + if (data.HeartImageOpen.Length > i) + HeartImageOpen[i] = data.HeartImageOpen[i]; if (data.UnlockProgress != null) { @@ -536,6 +543,15 @@ public partial class DBManager : MonoBehaviour return saveData.ImageOpenStates_Left.Length - 1; } + public bool CanBuyHeartImage(int group) + { + return saveData.HeartImageOpen[group] == false; + } + public void UnlockHeartImage(int group) + { + saveData.HeartImageOpen[group] = true; + } + public int GetUnlockHuntingCount() { for (int i = 0; i < saveData.ImageOpenStates_Left.Length; i++) diff --git a/Assets/Scripts/UI/CollectionCard.cs b/Assets/Scripts/UI/CollectionCard.cs index 08fbc73..ae7d743 100644 --- a/Assets/Scripts/UI/CollectionCard.cs +++ b/Assets/Scripts/UI/CollectionCard.cs @@ -22,27 +22,51 @@ public class CollectionCard : CardBase t_price.text = left ? m_Data.NeedKey.ToString() : m_Data.NeedHeart.ToString(); if (left) { go_pricedia.SetActive(true); go_priceheart.SetActive(false); } else { go_pricedia.SetActive(false); go_priceheart.SetActive(true); } - var unlockTargetIndex = GameManager.DB.GetUnlockTargetIndex(left); - i_face.color = Color.white; i_face.material = null; + i_face.color = Color.white; go_buybtn.SetActive(false); - if (m_Data.n_Group == unlockTargetIndex) - { // 구매 가능 - go_buybtn.SetActive(true); - i_face.material = mat_blur; - go_lock.SetActive(true); - Heart_Right.SetActive(!left); - } - else if (m_Data.n_Group > unlockTargetIndex) - { // 잠김 - go_lock.SetActive(true); - i_face.color = Color.black; - Heart_Right.SetActive(false); + if (left) + { + var unlockTargetIndex = GameManager.DB.GetUnlockTargetIndex(left); + if (m_Data.n_Group == unlockTargetIndex) + { // 구매 가능 + go_buybtn.SetActive(true); + i_face.material = mat_blur; + go_lock.SetActive(true); + Heart_Right.SetActive(!left); + } + else if (m_Data.n_Group > unlockTargetIndex) + { // 잠김 + go_lock.SetActive(true); + i_face.color = Color.black; + Heart_Right.SetActive(false); + } + else + { // 열림 + go_lock.SetActive(false); + Heart_Right.SetActive(!left); + } } else - { // 열림 - go_lock.SetActive(false); - Heart_Right.SetActive(!left); + { + if (m_Data.n_Group < GameManager.DB.GetUnlockTargetIndex(true) && GameManager.DB.CanBuyHeartImage(m_Data.n_Group)) + { // 구매 가능 + go_buybtn.SetActive(true); + i_face.material = mat_blur; + go_lock.SetActive(true); + Heart_Right.SetActive(true); + } + else if (!GameManager.DB.CanBuyHeartImage(m_Data.n_Group)) + { // 열림 + go_lock.SetActive(false); + Heart_Right.SetActive(true); + } + else + { // 잠김 + go_lock.SetActive(true); + i_face.color = Color.black; + Heart_Right.SetActive(false); + } } } diff --git a/Assets/Scripts/UI/HuntingSlot.cs b/Assets/Scripts/UI/HuntingSlot.cs index c081e39..64b1499 100644 --- a/Assets/Scripts/UI/HuntingSlot.cs +++ b/Assets/Scripts/UI/HuntingSlot.cs @@ -120,24 +120,42 @@ public class HuntingSlot : CardBase AI_Right.material = null; if (_data_right != null) { - if (_data_right.n_Group == unlockTargetIndex_right) + if (_data_right.n_Group < unlockTargetIndex_left && GameManager.DB.CanBuyHeartImage(_data_right.n_Group)) { // 구매 가능 gos_openbutton[1].SetActive(true); AI_Right.material = mat_blur; Block_Right.SetActive(true); Heart_Right.SetActive(true); } - else if (_data_right.n_Group > unlockTargetIndex_right) - { // 잠김 - Block_Right.SetActive(true); - AI_Right.color = Color.black; - Heart_Right.SetActive(false); - } - else + else if (!GameManager.DB.CanBuyHeartImage(_data_right.n_Group)) { // 열림 Block_Right.SetActive(false); Heart_Right.SetActive(true); } + else + { // 잠김 (순차적이 아니라 원하는 곳을 열 수 있으므로 데이터 구조 변경 필요) + Block_Right.SetActive(true); + AI_Right.color = Color.black; + Heart_Right.SetActive(false); + } + //if (_data_right.n_Group == unlockTargetIndex_right) + //{ // 구매 가능 + // gos_openbutton[1].SetActive(true); + // AI_Right.material = mat_blur; + // Block_Right.SetActive(true); + // Heart_Right.SetActive(true); + //} + //else if (_data_right.n_Group > unlockTargetIndex_right) + //{ // 잠김 + // Block_Right.SetActive(true); + // AI_Right.color = Color.black; + // Heart_Right.SetActive(false); + //} + //else + //{ // 열림 + // Block_Right.SetActive(false); + // Heart_Right.SetActive(true); + //} } } @@ -176,45 +194,62 @@ public class HuntingSlot : CardBase { GameManager.Sound.PlaySFX(ESFXType.Button_Hit); - if (GameManager.DB.IsAllUnlocked(left) == false) + if (left) { - var bCondition = false; - if (left) + if (GameManager.DB.IsAllUnlocked(left) == false) { - if (GameManager.DB.Key >= _data_left.NeedKey) + var bCondition = false; + if (left) { - GameManager.DB.SubKey(_data_left.NeedKey, this.name); - bCondition = true; + if (GameManager.DB.Key >= _data_left.NeedKey) + { + GameManager.DB.SubKey(_data_left.NeedKey, this.name); + bCondition = true; + } + else + { + GameManager.UI.ShowNStackPopup(EPopupType.KeyChargePopup); + } } else { - GameManager.UI.ShowNStackPopup(EPopupType.KeyChargePopup); + if (GameManager.DB.Heart >= _data_right.NeedHeart) + { + GameManager.DB.SubHeart(_data_right.NeedHeart, this.name); + bCondition = true; + } + else + { + GameManager.UI.ShowNStackPopup(EPopupType.HeartChargePopup); + } } + if (bCondition) + { + GameManager.DB.UnlockLastAIImage(left); + GameManager.DB.SaveDatas(); + GameManager.Event.InvokeEvent(EEventType.OnSynchronizeAIChllengeModeAIData); + + //BGId huntingDataID = GameManager.BGDatabase.GetLastUnolockHuntingDataID(); + //BGId huntingListDataID = GameManager.BGDatabase.GetLastUnolockHuntingListDataID(); + //if (huntingDataID != BGId.Empty && huntingListDataID != BGId.Empty) + //{ + // GameManager.Event.InvokeEvent(EEventType.OnClickFullView, huntingDataID, huntingListDataID); + //} + } + } + } + else + { + if (GameManager.DB.Heart >= _data_right.NeedHeart) + { + GameManager.DB.SubHeart(_data_right.NeedHeart, this.name); + GameManager.DB.UnlockHeartImage(_data_right.n_Group); + GameManager.DB.SaveDatas(); + GameManager.Event.InvokeEvent(EEventType.OnSynchronizeAIChllengeModeAIData); } else { - if (GameManager.DB.Heart >= _data_right.NeedHeart) - { - GameManager.DB.SubHeart(_data_right.NeedHeart, this.name); - bCondition = true; - } - else - { - GameManager.UI.ShowNStackPopup(EPopupType.HeartChargePopup); - } - } - if (bCondition) - { - GameManager.DB.UnlockLastAIImage(left); - GameManager.DB.SaveDatas(); - GameManager.Event.InvokeEvent(EEventType.OnSynchronizeAIChllengeModeAIData); - - //BGId huntingDataID = GameManager.BGDatabase.GetLastUnolockHuntingDataID(); - //BGId huntingListDataID = GameManager.BGDatabase.GetLastUnolockHuntingListDataID(); - //if (huntingDataID != BGId.Empty && huntingListDataID != BGId.Empty) - //{ - // GameManager.Event.InvokeEvent(EEventType.OnClickFullView, huntingDataID, huntingListDataID); - //} + GameManager.UI.ShowNStackPopup(EPopupType.HeartChargePopup); } } } @@ -223,18 +258,25 @@ public class HuntingSlot : CardBase { GameManager.Sound.PlaySFX(ESFXType.Button_Hit); - var unlockTargetIndex = GameManager.DB.GetUnlockTargetIndex(left); - var group = left ? _data_left.n_Group : _data_right.n_Group; + if (left) + { + var unlockTargetIndex = GameManager.DB.GetUnlockTargetIndex(left); + var group = left ? _data_left.n_Group : _data_right.n_Group; - if (group == unlockTargetIndex) - { // 구매 가능 + if (group == unlockTargetIndex) + { // 구매 가능 + } + else if (group > unlockTargetIndex) + { // 잠김 + } + else + { // 열림 + GameObject.Find("AlbumPanel").GetComponent().ShowPanel(left ? _data_left : _data_right); + } } - else if (group > unlockTargetIndex) - { // 잠김 - } - else - { // 열림 - GameObject.Find("AlbumPanel").GetComponent().ShowPanel(left ? _data_left : _data_right); + else if (!GameManager.DB.CanBuyHeartImage(_data_right.n_Group)) + { + GameObject.Find("AlbumPanel").GetComponent().ShowPanel(_data_right); } } } \ No newline at end of file