using System; using System.Collections; using UnityEngine; public class HorseRushManager : MonoBehaviour { [SerializeField] HorseRushPanel _horseRushPanel; public MiniGameResult m_MiniGameResult; int _horseRushEntryCount; public int HorseRushEntryCount => _horseRushEntryCount; int _horseRushFreeEntryCount; public int HorseRushFreeEntryCount => _horseRushFreeEntryCount; DateTime _horseRushResetTime; public DateTime HorseRushResetTime => _horseRushResetTime; long _maxScore; public long MaxScore => _maxScore; int _maxFever; public int MaxFever => _maxFever; int _playCount; public int PlayCount => _playCount; int _missionFeverCount = 5; public int MissionFeverCount => _missionFeverCount; #region LifeCycle //override protected void Start() void Start() { StartCoroutine(Init()); } IEnumerator Init() { _horseRushEntryCount = 1; _horseRushFreeEntryCount = 1; _horseRushResetTime = DateTime.MinValue; //_maxScore = AuthManager.Instance.Me.User.MaxScore; //_maxFever = AuthManager.Instance.Me.User.MaxFever; //_playCount = AuthManager.Instance.Me.User.GamePlayCount; SetMissionFeverCount(); yield break; } #endregion #region Entry Management Method // 입장 초기화 public void ResetEntry() { DateTime now = DateTime.Now.Date; // 만약 오늘의 날짜가 초기화 시간보다 크다면 if (now > _horseRushResetTime.Date) { _horseRushEntryCount = 2; _horseRushFreeEntryCount = 2; _horseRushResetTime = now; } } public bool CanEnterHorseRush(bool isFree, bool isPay) { if (isFree) { return _horseRushFreeEntryCount > 0; } else { if (isPay) { return true; } else { return _horseRushEntryCount > 0; } } } public void SetMissionFeverCount() { //int missionFeverCount = DataManager.Instance.GlobalValue("MISSION_FEVER_COUNT"); //if (GameManager.Instance.IsPackageCPurchased()) //{ // _missionFeverCount = missionFeverCount - 2; //} //else //{ // _missionFeverCount = missionFeverCount; //} } public void GameStart(bool isFreeSweep, bool isPay) { SetMissionFeverCount(); _horseRushPanel.gameObject.SetActive(true); _horseRushPanel.GameStart(isFreeSweep); } public void GameOver(bool isFreeSweep, long score, int normalDoubleScoreCount, int maxCombo, int maxFeverStreak, int missionSuccessPhotoID) { if (isFreeSweep) { _horseRushFreeEntryCount--; } else { _horseRushEntryCount--; } if (score > _maxScore) { _maxScore = score; } // _horseRushPanel.gameObject.SetActive(false); GetReward(score, normalDoubleScoreCount, maxCombo, maxFeverStreak, missionSuccessPhotoID); } public void GetReward(long coinAmount, int rubyAmount, int maxCombo, int maxFeverStreak, int missionSuccessPhotoID) { // 갑자기 하트 관련 보상 기획이 변경되어서 임시 주석 언제 다시 추가할지 모르겠음 // int heartAmount = GetHeartAmount(maxFeverStreak); _playCount++; _maxFever = maxFeverStreak > _maxFever ? maxFeverStreak : _maxFever; _maxScore = coinAmount > _maxScore ? coinAmount : _maxScore; var addcoinrate = maxCombo / 1000f; var bonuscoin = 0; if (addcoinrate > 0f) { bonuscoin = (int)(coinAmount * addcoinrate); coinAmount += bonuscoin; } //bool isPackage = GameManager.Instance.IsPackageBPurchased(); //CurrencyManager.Instance.AddGoods(101, coinAmount * (isPackage ? 2 : 1)); //CurrencyManager.Instance.AddGoods(102, rubyAmount); // CurrencyManager.Instance.AddGoods(103, heartAmount); SaveMgr.Ins.Add_Money(eMoney.Gacha, (int)coinAmount); SaveMgr.Ins.Add_Money(eMoney.AlbumOpen, rubyAmount); SaveMgr.Ins.Save(); m_MiniGameResult.Set(coinAmount, bonuscoin, rubyAmount, maxCombo, maxFeverStreak, missionSuccessPhotoID, () => { _horseRushPanel.gameObject.SetActive(false); }); if (maxFeverStreak >= _missionFeverCount && missionSuccessPhotoID != -1) { //DataManager.Instance.PhotoBoost.IncreaseQuantity(missionSuccessPhotoID, 1); //int albumID = DataManager.Instance.GetPhotoData(missionSuccessPhotoID).AlbumID; //bool isFullCollection = true; //int fullCollectionPhotoId = -1; //var photos = DataManager.Instance.GetPhotoDatasByAlbumID(albumID); //foreach (var photo in photos.Values) //{ // if (photo.CollectionMethod == CollectionMethod.FullCollection) // { // fullCollectionPhotoId = photo.ID; // continue; // } // if (DataManager.Instance.PhotoBoost.GetQuantity(photo.ID) == 0) // { // isFullCollection = false; // } //} //if (isFullCollection && DataManager.Instance.PhotoBoost.GetLevel(fullCollectionPhotoId) == 0) //{ // DataManager.Instance.PhotoBoost.IncreaseQuantity(fullCollectionPhotoId, 1); // UIEvents.ShowToast(Local.GetLocalizedUIString("COLLECTION_REWARD_RECEIVED")); //} } //GameManager.Instance.Save(); //UIEvents.OnOpenMiniGameResultModal(coinAmount, rubyAmount, maxFeverStreak, missionSuccessPhotoID); } int GetHeartAmount(int maxFeverStreak) { if (maxFeverStreak == 0) { return 0; } // 각 피버 스트릭 단계별 꽝 확률 float failureChance = maxFeverStreak switch { 1 => 0.5f, // 50% 2 => 0.3f, // 30% 3 => 0.25f, // 25% 4 => 0.2f, // 20% 5 => 0.1666f, // 16.66% _ => 1f // 기본값 }; // 꽝 확률 체크 if (UnityEngine.Random.value < failureChance) { return 0; } // 꽝이 아닌 경우, 1부터 maxFeverStreak까지의 랜덤한 개수 반환 return UnityEngine.Random.Range(1, maxFeverStreak + 1); } #endregion }