feat: 생선 소모로 인한 하트 충전 로직 적용
This commit is contained in:
@@ -116,38 +116,52 @@ namespace TON
|
||||
if (currentHeartData.currentHearts > 0)
|
||||
{
|
||||
currentHeartData.currentHearts--;
|
||||
// lastHeartTime이 비어있거나 잘못된 경우를 대비하여 기본값 설정
|
||||
DateTime lastTime;
|
||||
bool hasValidTime = DateTime.TryParse(currentHeartData.lastHeartTime, out lastTime);
|
||||
|
||||
if (!hasValidTime)
|
||||
// 하트를 사용한 후 하트가 최대 개수보다 적을 때만 타이머 시작/업데이트
|
||||
if (currentHeartData.currentHearts < 5)
|
||||
{
|
||||
lastTime = DateTime.Now; // 기본값을 현재 시간으로 설정
|
||||
currentHeartData.lastHeartTime = lastTime.ToString();
|
||||
// lastHeartTime이 비어있거나 잘못된 경우를 대비하여 기본값 설정
|
||||
DateTime lastTime;
|
||||
bool hasValidTime = DateTime.TryParse(currentHeartData.lastHeartTime, out lastTime);
|
||||
|
||||
TimeSpan timePassed = DateTime.Now - lastTime;
|
||||
|
||||
// 재충전 시간이 지났거나, 비어있거나, 하트가 최대치였다가 감소했을 때 lastHeartTime 갱신
|
||||
if (!hasValidTime || timePassed.TotalSeconds >= heartRechargeTime || string.IsNullOrEmpty(currentHeartData.lastHeartTime))
|
||||
{
|
||||
currentHeartData.lastHeartTime = DateTime.Now.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
TimeSpan timePassed = DateTime.Now - lastTime;
|
||||
|
||||
// 재충전 시간이 지났거나, 처음 소모하여 재충전이 시작될 때만 lastHeartTime 갱신
|
||||
if (timePassed.TotalSeconds >= heartRechargeTime || currentHeartData.currentHearts == maxHearts - 1)
|
||||
{
|
||||
currentHeartData.lastHeartTime = DateTime.Now.ToString();
|
||||
}
|
||||
SaveHeartData();
|
||||
UpdateHeartSystem();
|
||||
}
|
||||
}
|
||||
|
||||
HeartSystem heartSystem = FindObjectOfType<HeartSystem>();
|
||||
if (heartSystem != null)
|
||||
{
|
||||
heartSystem.UpdateHeartUI(); // UI 업데이트
|
||||
public static void UpdateHeartSystem()
|
||||
{
|
||||
HeartSystem heartSystem = FindObjectOfType<HeartSystem>();
|
||||
if (heartSystem != null)
|
||||
{
|
||||
heartSystem.UpdateHeartUI(); // UI 업데이트
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 사용자의 광고 시청, 생선 소모 등으로 하트 충전하는 경우 호출출
|
||||
public void AddHeart(int amount)
|
||||
{
|
||||
int previousHearts = currentHeartData.currentHearts;
|
||||
currentHeartData.currentHearts += amount;
|
||||
|
||||
// 하트가 5개 미만에서 5개 이상으로 변경되었을 때 타이머 초기화
|
||||
if (previousHearts < 5 && currentHeartData.currentHearts >= 5)
|
||||
{
|
||||
// 하트가 가득 찼으므로 lastHeartTime을 빈 문자열이나 특정 값으로 설정하여 타이머 중지
|
||||
currentHeartData.lastHeartTime = "";
|
||||
}
|
||||
|
||||
SaveHeartData();
|
||||
UpdateHeartSystem();
|
||||
}
|
||||
|
||||
// 데이터 파일에 저장된 마지막 하트 사용시간과 동기화
|
||||
|
||||
@@ -65,7 +65,7 @@ namespace TON
|
||||
}
|
||||
public void UseGold(int amount)
|
||||
{
|
||||
if (goldAmount - amount < amount)
|
||||
if (goldAmount - amount < 0)
|
||||
{
|
||||
// 골드 재화 사용 불가 팝업
|
||||
UIManager.Show<GoldPopup>(UIList.GoldPopup);
|
||||
@@ -89,20 +89,18 @@ namespace TON
|
||||
// UpdateUI();
|
||||
});
|
||||
}
|
||||
public void UseFish(int amount)
|
||||
public void UseFish(int amount, System.Action<bool> callback)
|
||||
{
|
||||
if (fishAmount - amount < amount)
|
||||
if (fishAmount - amount < 0)
|
||||
{
|
||||
// 생선 재화 사용 불가 팝업
|
||||
UIManager.Show<FishPopup>(UIList.FishPopup);
|
||||
callback?.Invoke(false);
|
||||
return;
|
||||
}
|
||||
|
||||
fishAmount -= amount;
|
||||
cashDataManager.UpdateFishData(fishAmount, updatedData =>
|
||||
{
|
||||
// TODO: UI 업데이트 로직 적용
|
||||
// UpdateUI();
|
||||
callback?.Invoke(true);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -129,18 +129,37 @@ namespace TON
|
||||
|
||||
public void OnClickUseCashButton(int count)
|
||||
{
|
||||
// TODO: 보유한 생선 갯수를 소모하고 하트를 충전
|
||||
// 보유한 생선 갯수를 소모하고 하트를 충전
|
||||
Debug.Log("OnClickUseCashButton::: fish :: " + count);
|
||||
PlayerDataManager.Singleton.UseFish(count, (isSuccess) =>
|
||||
{
|
||||
if (isSuccess)
|
||||
{
|
||||
UpdateFishCount();
|
||||
// 충전을 완료하고 modal 닫기
|
||||
rechargeModal.SetActive(false);
|
||||
|
||||
AddHeart(count);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 생선 재화 사용 불가 팝업
|
||||
Debug.Log("생선 재화 사용 불가 팝업");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static void AddHeart(int count)
|
||||
{
|
||||
switch (count)
|
||||
{
|
||||
case 5:
|
||||
// 하트 1개 충전
|
||||
|
||||
HeartDataManager.Singleton.AddHeart(1);
|
||||
break;
|
||||
case 45:
|
||||
// 하트 10개 충전
|
||||
|
||||
HeartDataManager.Singleton.AddHeart(10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,10 +103,16 @@ namespace TON
|
||||
UIManager.Show<SkillSettingUI>(UIList.SkillSettingUI);
|
||||
}
|
||||
|
||||
public void OnClickRankingButton()
|
||||
{
|
||||
// TODO: 랭킹 UI 추가
|
||||
// UIManager.Show<RankingUI>(UIList.RankingUI);
|
||||
}
|
||||
|
||||
public void OnClickShopButton()
|
||||
{
|
||||
// TODO: 상점 UI 추가
|
||||
// UIManager.Show<ShopUI>(UIList.ShopUI);
|
||||
// 상점은 Scene으로 전환하자.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
@@ -13,9 +14,13 @@ namespace TON
|
||||
public GameObject retryModal;
|
||||
public GameObject homeModal;
|
||||
|
||||
[SerializeField] private TextMeshProUGUI fishAmount;
|
||||
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
InitModalActive();
|
||||
UpdateFishCount();
|
||||
// 일시정지 시 게임 일시정지
|
||||
Time.timeScale = 0f;
|
||||
}
|
||||
@@ -27,6 +32,10 @@ namespace TON
|
||||
homeModal.SetActive(false);
|
||||
}
|
||||
|
||||
public void UpdateFishCount()
|
||||
{
|
||||
fishAmount.text = string.Format("{0:#,###}", PlayerDataManager.Singleton.fishAmount);
|
||||
}
|
||||
|
||||
// 컨티뉴 버튼 선택 시
|
||||
public void OnPressContinueButton()
|
||||
@@ -58,7 +67,7 @@ namespace TON
|
||||
return;
|
||||
}
|
||||
|
||||
retryModal.SetActive(true);
|
||||
OnClickStageRetryButton();
|
||||
}
|
||||
public void OnClickStageRetryButton()
|
||||
{
|
||||
@@ -87,14 +96,47 @@ namespace TON
|
||||
|
||||
public void OnClickUseCashButton(int count)
|
||||
{
|
||||
// TODO: 보유한 생선 갯수를 소모하고 하트를 충전
|
||||
Debug.Log("OnClickUseCashButton::: fish :: " + count);
|
||||
// 보유한 생선 갯수를 소모하고 하트를 충전
|
||||
PlayerDataManager.Singleton.UseFish(count, (isSuccess) =>
|
||||
{
|
||||
if (isSuccess)
|
||||
{
|
||||
UpdateFishCount();
|
||||
// 충전을 완료하고 modal 닫기
|
||||
rechargeModal.SetActive(false);
|
||||
|
||||
AddHeart(count);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 생선 재화 사용 불가 팝업
|
||||
Debug.Log("생선 재화 사용 불가 팝업");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static void AddHeart(int count)
|
||||
{
|
||||
switch (count)
|
||||
{
|
||||
case 5:
|
||||
// 하트 1개 충전
|
||||
HeartDataManager.Singleton.AddHeart(1);
|
||||
break;
|
||||
case 45:
|
||||
// 하트 10개 충전
|
||||
HeartDataManager.Singleton.AddHeart(10);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void OnClickAdButton()
|
||||
{
|
||||
// TODO: 광고 시청 로직 추가, 광고 종료 후 하트 충전
|
||||
Debug.Log("OnClickAdButton::: ");
|
||||
|
||||
// 광고 시청 종료 후 콜백
|
||||
rechargeModal.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user