public static PPIDailyRewards Fix(this PPIDailyRewards @this) { PPIDailyRewards rewards = @this ?? new PPIDailyRewards(); // fix instant rewards if (rewards.Instant == null || rewards.Instant.Length != PPIDailyRewards.DAYS_PER_CYCLE) { rewards.Instant = new PPIDailyRewards.Day[PPIDailyRewards.DAYS_PER_CYCLE]; } for (int idx = 0; idx < PPIDailyRewards.DAYS_PER_CYCLE; ++idx) { rewards.Instant[idx] = rewards.Instant[idx] ?? new PPIDailyRewards.Day(); } // fix conditional rewards if (rewards.Conditional == null || rewards.Conditional.Length != PPIDailyRewards.DAYS_PER_CYCLE) { rewards.Conditional = new PPIDailyRewards.Day[PPIDailyRewards.DAYS_PER_CYCLE]; } for (int idx = 0; idx < PPIDailyRewards.DAYS_PER_CYCLE; ++idx) { rewards.Conditional[idx] = rewards.Conditional[idx] ?? new PPIDailyRewards.Day(); } return(rewards); }
IEnumerator ShowCurrentRewards_Coroutine(PPIDailyRewards rewards, bool instant, bool conditional) { int currDay = rewards.CurrentDay; DateTime date = CloudDateTime.UtcNow.Date - TimeSpan.FromDays(currDay); DayInfo[] infos = new DayInfo[PPIDailyRewards.DAYS_PER_CYCLE]; for (int idx = 0; idx < PPIDailyRewards.DAYS_PER_CYCLE; ++idx) { E_Status status = E_Status.Idle; if (idx < currDay) { status = E_Status.Gained; } else if (idx == currDay) { status = E_Status.Current; } infos[idx] = new DayInfo() { Date = date + TimeSpan.FromDays(idx), Status = status, Scale = Vector2.one, Instant = rewards.Instant[idx].DeepCopy(), Conditional = rewards.Conditional[idx].DeepCopy() }; infos[idx].Instant.Received = idx <= currDay ? true : false; } UpdateDays(infos); yield return(new WaitForSeconds(0.5f)); if (MFGuiManager.Instance != null) { MFGuiManager.Instance.PlayOneShot(m_GainedAudio); } // highlight current reward if (instant == true || conditional == true) { bool blinkInstant = instant; bool blinkConditional = conditional; for (int idx = 0; idx < 6; ++idx) { yield return(new WaitForSeconds(0.15f)); m_Days[currDay].SetHighlight(blinkInstant, blinkConditional); blinkInstant = instant ? !blinkInstant : false; blinkConditional = conditional ? !blinkConditional : false; } m_Days[currDay].SetHighlight(instant, conditional); } }
public static PPIDailyRewards.Day GetCurrentConditionalDay(this PPIDailyRewards @this) { if (@this.Conditional == null) { return(new PPIDailyRewards.Day()); } if (@this.Conditional.Length <= @this.CurrentDay) { return(new PPIDailyRewards.Day()); } return(@this.Conditional[@this.CurrentDay] ?? new PPIDailyRewards.Day()); }
public static PPIDailyRewards.Day GetCurrentInstantDay(this PPIDailyRewards @this) { if (@this.Instant == null) { return(new PPIDailyRewards.Day()); } if (@this.Instant.Length <= @this.CurrentDay) { return(new PPIDailyRewards.Day()); } return(@this.Instant[@this.CurrentDay] ?? new PPIDailyRewards.Day()); }
// PRIVATE METHODS IEnumerator ShowRewards_Coroutine(PPIDailyRewards newRewards, bool instant, bool conditional, PPIDailyRewards oldRewards, DateTime oldRewardsDate) { if (oldRewards != null) { yield return(StartCoroutine(ShowMissedRewards_Coroutine(newRewards, oldRewards, oldRewardsDate))); } yield return(StartCoroutine(ShowCurrentRewards_Coroutine(newRewards, instant, conditional))); }
public static void Store(this PPIDailyRewards @this, string primaryKey, string filename = "rewards") { DictionaryFile file = GetFile(primaryKey, filename); if (file == null) { return; } file.SetString("rewards", JsonMapper.ToJson(@this)); file.SetString("date", CloudDateTime.UtcNow.Date.ToString()); file.Save(); }
IEnumerator ShowMissedRewards_Coroutine(PPIDailyRewards newRewards, PPIDailyRewards oldRewards, DateTime oldRewardsDate) { int currDay = oldRewards.CurrentDay; int lastDay = PPIDailyRewards.DAYS_PER_CYCLE - 1; DateTime date = oldRewardsDate - TimeSpan.FromDays(currDay); DayInfo[] infos = new DayInfo[PPIDailyRewards.DAYS_PER_CYCLE]; for (int idx = 0; idx < PPIDailyRewards.DAYS_PER_CYCLE; ++idx) { infos[idx] = new DayInfo() { Date = date + TimeSpan.FromDays(idx), Status = idx <= currDay ? E_Status.Gained : E_Status.Idle, Scale = Vector2.one, Instant = oldRewards.Instant[idx].DeepCopy(), Conditional = oldRewards.Conditional[idx].DeepCopy() }; } // display current status UpdateDays(infos); yield return(new WaitForSeconds(0.5f)); // show missed days int day = currDay; while (day < lastDay) { yield return(new WaitForSeconds(0.25f * m_AnimationSpeed)); day += 1; DayInfo info = infos[day]; info.Status = E_Status.Missed; infos[day] = info; if (MFGuiManager.Instance != null) { MFGuiManager.Instance.PlayOneShot(m_MissedAudio); } UpdateDays(infos); } yield return(new WaitForSeconds(0.5f * m_AnimationSpeed)); date = CloudDateTime.UtcNow.Date - TimeSpan.FromDays(newRewards.CurrentDay); day = Mathf.Min(day, lastDay); // rollback to the first day while (true) { if (MFGuiManager.Instance != null) { MFGuiManager.Instance.PlayOneShot(m_RollbackAudio); } int frames = 3; for (int frame = 0; frame < frames; ++frame) { DayInfo info = infos[day]; info.Scale.x = 1.0f - 1.0f * (frame / (float)(frames - 1)); infos[day] = info; UpdateDays(infos); yield return(new WaitForEndOfFrame()); } infos[day] = new DayInfo() { Date = date + TimeSpan.FromDays(day), Status = E_Status.Idle, Scale = Vector2.one, Instant = newRewards.Instant[day].DeepCopy(), Conditional = newRewards.Conditional[day].DeepCopy() }; for (int frame = 0; frame < frames; ++frame) { DayInfo info = infos[day]; info.Scale.x = 1.0f * (frame / (float)(frames - 1)); infos[day] = info; UpdateDays(infos); yield return(new WaitForEndOfFrame()); } day -= 1; if (day < 0) { break; } yield return(new WaitForSeconds(0.1f * m_AnimationSpeed)); } yield return(new WaitForSeconds(0.5f * m_AnimationSpeed)); }
// PUBLIC METHODS public void SetData(PPIDailyRewards newRewards, bool instant, bool conditional, PPIDailyRewards oldRewards, DateTime oldRewardsDate) { StartCoroutine(ShowRewards_Coroutine(newRewards, instant, conditional, oldRewards, oldRewardsDate)); }
// number of days player logged in row //public long DailyRewardInRow; // the same as CurrentDay public static PPIDailyRewards Create() { PPIDailyRewards rewards = new PPIDailyRewards(); return(rewards.Fix()); }