RandomGFGoStop/Assets/Scripts/SingletonManagers/Managers/TimerManager.cs

746 lines
24 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using System;
using System.Text;
using System.Threading;
using System.IO;
using Newtonsoft.Json;
using DG.Tweening.Core.Easing;
public class TimerManager : MonoBehaviour
{
public UnityEvent<int> onChangeActionTimerCount;
public UnityEvent<int> onChangeRewardActionCount;
int _actionTimerValue = 0;
public int ActionTimerValue
{
get { return _actionTimerValue; }
}
int _addActionCount;
private DateTime loadTime;
private enum TimerType
{
None,
Simple,
Hierarchy,
}
private class TimerInfo
{
public int time = 0;
public int limiteTimerCount = 0;
public DateTime saveTimeData = DateTime.Now;
public UnityAction<int> OnPassedTime;
protected TimerType timerType = TimerType.None;
public TimerType Type
{
get { return timerType; }
}
protected string ownerName = "";
public string OwnerName
{
get { return ownerName; }
}
public TimerInfo()
{
}
public TimerInfo(TimerType type, string ownerName, int time, DateTime saveTimeData)
{
timerType = type;
this.ownerName = ownerName;
this.time = time;
this.saveTimeData = saveTimeData;
}
}
private class SimpleTimerInfo : TimerInfo
{
public UnityAction<int> OnStartTimer;
public UnityAction<int> OnPauseTimer;
public UnityAction<int> OnStopTimer;
public SimpleTimerInfo()
{
}
public SimpleTimerInfo(string ownerName)
{
timerType = TimerType.Simple;
this.ownerName = ownerName;
}
public SimpleTimerInfo(string ownerName, int time, DateTime timeData, UnityAction<int> OnStartTimer, UnityAction<int> OnPauseTimer, UnityAction<int> OnStopTimer, UnityAction<int> OnPassedTime)
{
timerType = TimerType.Simple;
this.ownerName = ownerName;
this.time = time;
this.saveTimeData = timeData;
this.OnStartTimer += OnStartTimer;
this.OnPauseTimer += OnPauseTimer;
this.OnStopTimer += OnStopTimer;
this.OnPassedTime += OnPassedTime;
}
public void ResetEvent()
{
this.OnStartTimer = null;
this.OnPauseTimer = null;
this.OnStopTimer = null;
this.OnPassedTime = null;
}
}
private class HierarchyTimerInfo : TimerInfo
{
public int limiteHierarchyCount = 0;
public UnityAction<int, int> OnStartTimer;
public UnityAction<int, int> OnPauseTimer;
public UnityAction<int> OnStopTimer;
public HierarchyTimerInfo()
{
}
public HierarchyTimerInfo(string ownerName)
{
timerType = TimerType.Hierarchy;
this.ownerName = ownerName;
}
public HierarchyTimerInfo(string ownerName, int time, DateTime timeData, UnityAction<int, int> OnStartTimer, UnityAction<int, int> OnPauseTimer, UnityAction<int> OnStopTimer, UnityAction<int> OnPassedTime)
{
timerType = TimerType.Hierarchy;
this.ownerName = ownerName;
this.time = time;
this.saveTimeData = timeData;
this.OnStartTimer += OnStartTimer;
this.OnPauseTimer += OnPauseTimer;
this.OnStopTimer += OnStopTimer;
this.OnPassedTime += OnPassedTime;
}
public void ResetEvent()
{
this.OnStartTimer = null;
this.OnPauseTimer = null;
this.OnStopTimer = null;
this.OnPassedTime = null;
}
}
StringBuilder sb = new StringBuilder();
Dictionary<string, TimerInfo> timerInfoDictionary = new Dictionary<string, TimerInfo>();
private Coroutine timerCoroutine = null;
private WaitForSecondsRealtime waitForSeconds = null;
private void Awake()
{
LoadAllTimerInfo();
}
private void SaveSimpleTimerInfo()
{
foreach (KeyValuePair<string, TimerInfo> dic in timerInfoDictionary)
{
sb.Clear();
sb.Append(dic.Key).Append("TimerData");
SimpleTimerInfo info = timerInfoDictionary[dic.Key] as SimpleTimerInfo;
if (info != null)
{
info.saveTimeData = DateTime.Now;
ES3.Save<SimpleTimerInfo>(sb.ToString(), info, "TimerData.json");
}
}
}
private void SaveHierarchyTimerInfo()
{
foreach (KeyValuePair<string, TimerInfo> dic in timerInfoDictionary)
{
sb.Clear();
sb.Append(dic.Key).Append("TimerData");
HierarchyTimerInfo info = timerInfoDictionary[dic.Key] as HierarchyTimerInfo;
if (info != null)
{
info.saveTimeData = DateTime.Now;
ES3.Save<HierarchyTimerInfo>(sb.ToString(), info, "TimerData.json");
}
}
}
private void LoadAllTimerInfo()
{
if (ES3.KeyExists("TimerData.json"))
{
TimerInfo info = new TimerInfo();
info = ES3.Load<TimerInfo>("TimerData.json");
timerInfoDictionary.Add(info.OwnerName, info);
}
}
private void LoadSimpleTimerInfo(string ownerName)
{
sb.Clear();
sb.Append(ownerName).Append("TimerData");
if (ES3.KeyExists(sb.ToString(), "TimerData.json"))
{
SimpleTimerInfo info = new SimpleTimerInfo(ownerName);
info = ES3.Load<SimpleTimerInfo>(sb.ToString(), "TimerData.json");
info.ResetEvent();
if (timerInfoDictionary.ContainsKey(ownerName) == false)
{
timerInfoDictionary.Add(ownerName, info);
}
else
{
timerInfoDictionary.Remove(ownerName);
timerInfoDictionary[ownerName] = info;
}
}
}
private void LoadHierarchyTimerInfo(string ownerName)
{
sb.Clear();
sb.Append(ownerName).Append("TimerData");
if (ES3.KeyExists(sb.ToString(), "TimerData.json"))
{
HierarchyTimerInfo info = new HierarchyTimerInfo(ownerName);
info = ES3.Load<HierarchyTimerInfo>(sb.ToString(), "TimerData.json");
info.ResetEvent();
if (timerInfoDictionary.ContainsKey(ownerName) == false)
{
timerInfoDictionary.Add(ownerName, info);
}
else
{
timerInfoDictionary.Remove(ownerName);
timerInfoDictionary[ownerName] = info;
}
}
}
private void DelTimerInfo(string ownerName)
{
sb.Clear();
sb.Append(ownerName).Append("TimerData");
if (ES3.KeyExists(sb.ToString(), "TimerData.json"))
{
ES3.DeleteKey(sb.ToString(), "TimerData.json");
}
}
public void ActivateLoadSimpleTimer(string ownerName, int limiteTimerCount, UnityAction<int> OnStartTimer, UnityAction<int> OnPauseTimer, UnityAction<int> OnStopTimer, UnityAction<int> OnPassedTime)
{
int timerCount = limiteTimerCount;
LoadSimpleTimerInfo(ownerName);
if (timerInfoDictionary.ContainsKey(ownerName) == true)
{
if (timerInfoDictionary[ownerName].saveTimeData != null && timerInfoDictionary[ownerName].saveTimeData.Year != 1)
{
double passedTimeSecond = (DateTime.Now - timerInfoDictionary[ownerName].saveTimeData).TotalSeconds;
int totalPassedTimeSecond = (limiteTimerCount - timerInfoDictionary[ownerName].time) + (Int32)passedTimeSecond;
if (totalPassedTimeSecond >= 0)
{
timerCount = limiteTimerCount - totalPassedTimeSecond;
}
}
// <20><><EFBFBD><EFBFBD> Ÿ<≯Ӹ<CCB8> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>Ѵ<EFBFBD>.
if (IsStartedTimer() == false)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> Ÿ<≯Ӱ<CCB8> <20><><EFBFBD>ٸ<EFBFBD> Ÿ<≯Ӹ<CCB8> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
StartTimer();
}
SimpleTimerInfo info = timerInfoDictionary[ownerName] as SimpleTimerInfo;
if (info != null)
{
info.time = timerCount;
info.limiteTimerCount = limiteTimerCount;
if (info.OnStartTimer == null)
{
info.OnStartTimer += OnStartTimer;
}
if (info.OnPauseTimer == null)
{
info.OnPauseTimer += OnPauseTimer;
}
if (info.OnStopTimer == null)
{
info.OnStopTimer += OnStopTimer;
}
if (info.OnPassedTime == null)
{
info.OnPassedTime += OnPassedTime;
}
info.OnStartTimer?.Invoke(timerCount);
}
SaveSimpleTimerInfo();
}
}
public void ActivateSimpleTimer(string ownerName, int limiteTimerCount, UnityAction<int> OnStartTimer, UnityAction<int> OnPauseTimer, UnityAction<int> OnStopTimer, UnityAction<int> OnPassedTime)
{
int timerCount = limiteTimerCount;
LoadSimpleTimerInfo(ownerName);
if (timerInfoDictionary.ContainsKey(ownerName) == true)
{
if (timerInfoDictionary[ownerName].saveTimeData != null && timerInfoDictionary[ownerName].saveTimeData.Year != 1)
{
double passedTimeSecond = (DateTime.Now - timerInfoDictionary[ownerName].saveTimeData).TotalSeconds;
int totalPassedTimeSecond = (limiteTimerCount - timerInfoDictionary[ownerName].time) + (Int32)passedTimeSecond;
if (totalPassedTimeSecond >= 0)
{
timerCount = limiteTimerCount - totalPassedTimeSecond;
}
}
}
else
{
timerInfoDictionary.Add(ownerName, new SimpleTimerInfo(ownerName, timerCount, DateTime.Now, OnStartTimer, OnPauseTimer, OnStopTimer, OnPassedTime));
}
// <20><><EFBFBD><EFBFBD> Ÿ<≯Ӹ<CCB8> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>Ѵ<EFBFBD>.
if (IsStartedTimer() == false)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> Ÿ<≯Ӱ<CCB8> <20><><EFBFBD>ٸ<EFBFBD> Ÿ<≯Ӹ<CCB8> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
StartTimer();
}
SimpleTimerInfo info = timerInfoDictionary[ownerName] as SimpleTimerInfo;
if (info != null)
{
info.time = timerCount;
info.limiteTimerCount = limiteTimerCount;
if (info.OnStartTimer == null)
{
info.OnStartTimer += OnStartTimer;
}
if (info.OnPauseTimer == null)
{
info.OnPauseTimer += OnPauseTimer;
}
if (info.OnStopTimer == null)
{
info.OnStopTimer += OnStopTimer;
}
if (info.OnPassedTime == null)
{
info.OnPassedTime += OnPassedTime;
}
info.OnStartTimer?.Invoke(timerCount);
}
SaveSimpleTimerInfo();
}
public void ActivateHierarchyTimer(string ownerName, int limiteTimerCount, int limiteHierarchyCount, UnityAction<int, int> OnStartTimer, UnityAction<int, int> OnPauseTimer, UnityAction<int> OnStopTimer, UnityAction<int> OnPassedTime)
{
int timerCount = limiteTimerCount;
int hierarchyCount = 0;
LoadHierarchyTimerInfo(ownerName);
if (timerInfoDictionary.ContainsKey(ownerName) == true)
{
// <20>ε<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۵<EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<≯Ӱ<CCB8> <20><><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><>
// Ÿ<≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؾ<EFBFBD> <20>Ѵ<EFBFBD>.
if (timerInfoDictionary[ownerName].saveTimeData != null && timerInfoDictionary[ownerName].saveTimeData.Year != 1)
{
double passedTimeSecond = (DateTime.Now - timerInfoDictionary[ownerName].saveTimeData).TotalSeconds;
int totalPassedTimeSecond = (limiteTimerCount - timerInfoDictionary[ownerName].time) + (Int32)passedTimeSecond;
if (totalPassedTimeSecond >= 0)
{
hierarchyCount = totalPassedTimeSecond / limiteTimerCount;
timerCount = totalPassedTimeSecond - (hierarchyCount * limiteTimerCount);
timerCount = limiteTimerCount - timerCount;
//timerCount = limiteTimerCount - (totalPassedTimeSecond % limiteTimerCount);
}
}
// <20>ε<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<≯Ӱ<CCB8> <20>ٲ<EFBFBD><D9B2><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
}
else
{
// <20>ε<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۵<EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<≯Ӱ<CCB8> <20><><EFBFBD><EFBFBD> <20><>
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>Ѵ<EFBFBD>.
timerInfoDictionary.Add(ownerName, new HierarchyTimerInfo(ownerName, timerCount, DateTime.Now, OnStartTimer, OnPauseTimer, OnStopTimer, OnPassedTime));
}
// <20><><EFBFBD><EFBFBD> Ÿ<≯Ӹ<CCB8> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>Ѵ<EFBFBD>.
if (IsStartedTimer() == false)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> Ÿ<≯Ӱ<CCB8> <20><><EFBFBD>ٸ<EFBFBD> Ÿ<≯Ӹ<CCB8> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
StartTimer();
}
HierarchyTimerInfo info = timerInfoDictionary[ownerName] as HierarchyTimerInfo;
if (info != null)
{
info.time = timerCount;
info.limiteTimerCount = limiteTimerCount;
info.limiteHierarchyCount = limiteHierarchyCount;
if (info.OnStartTimer == null)
{
info.OnStartTimer += OnStartTimer;
}
if (info.OnPauseTimer == null)
{
info.OnPauseTimer += OnPauseTimer;
}
if (info.OnStopTimer == null)
{
info.OnStopTimer += OnStopTimer;
}
if (info.OnPassedTime == null)
{
info.OnPassedTime += OnPassedTime;
}
info.OnStartTimer?.Invoke(timerCount, hierarchyCount);
}
SaveHierarchyTimerInfo();
}
public void DeactivateTimer(string ownerName)
{
timerInfoDictionary.Remove(ownerName);
DelTimerInfo(ownerName);
if (timerInfoDictionary.Count <= 0)
{
EndTiemr();
}
}
public void PauseTimer(string ownerName)
{
SaveSimpleTimerInfo();
SaveHierarchyTimerInfo();
SaveTime();
/*timerInfoDictionary.Remove(ownerName);
if (timerInfoDictionary.Count <= 0)
{
EndTiemr();
}*/
}
public bool IsVaildTimer(string ownerName)
{
return timerInfoDictionary.ContainsKey(ownerName);
}
public bool IsVaildSimpleTimer(string ownerName)
{
// LoadSimpleTimerInfo(ownerName);
return timerInfoDictionary.ContainsKey(ownerName);
}
public void SetWaitForSeconds(float time)
{
waitForSeconds = new WaitForSecondsRealtime(1.0f);
}
private bool IsStartedTimer()
{
return timerCoroutine != null;
}
private void StartTimer()
{
waitForSeconds = new WaitForSecondsRealtime(1.0f);
timerCoroutine = StartCoroutine(Timer());
}
private void EndTiemr()
{
if (IsStartedTimer() == true)
{
StopCoroutine(timerCoroutine);
timerCoroutine = null;
}
}
IEnumerator Timer()
{
SimpleTimerInfo simpleTimerInfo = null;
HierarchyTimerInfo hierarchyTimerInfo = null;
while (true)
{
yield return waitForSeconds;
foreach (KeyValuePair<string, TimerInfo> keyValue in timerInfoDictionary)
{
simpleTimerInfo = timerInfoDictionary[keyValue.Key] as SimpleTimerInfo;
if (simpleTimerInfo != null)
{
if (simpleTimerInfo.time <= 0)
{
simpleTimerInfo.time = simpleTimerInfo.limiteTimerCount;
}
else
{
simpleTimerInfo.time -= 1;
}
simpleTimerInfo.OnPassedTime?.Invoke(simpleTimerInfo.time);
if (simpleTimerInfo.time <= 0)
{
simpleTimerInfo.OnStopTimer?.Invoke(0);
break;
}
}
else
{
hierarchyTimerInfo = timerInfoDictionary[keyValue.Key] as HierarchyTimerInfo;
if (hierarchyTimerInfo != null)
{
if (hierarchyTimerInfo.time <= 0)
{
hierarchyTimerInfo.time = hierarchyTimerInfo.limiteTimerCount;
}
else
{
hierarchyTimerInfo.time -= 1;
}
hierarchyTimerInfo.OnPassedTime?.Invoke(hierarchyTimerInfo.time);
if (hierarchyTimerInfo.time <= 0)
{
hierarchyTimerInfo.OnStopTimer?.Invoke(0);
break;
}
}
}
}
}
}
public void SaveTime()
{
sb.Clear();
sb.Append(Application.persistentDataPath).Append("/Time.json");
string fileName = Path.Combine(sb.ToString());
if (File.Exists(fileName))
{
File.Delete(fileName);
}
string jsonFile = JsonConvert.SerializeObject(DateTime.Now);
File.WriteAllText(fileName, jsonFile);
}
public DateTime LoadTime()
{
sb.Clear();
sb.Append(Application.persistentDataPath).Append("/Time.json");
string fileName = Path.Combine(sb.ToString());
if (File.Exists(fileName) == false)
{
SaveTime();
loadTime = DateTime.Now;
return loadTime;
}
string jsonFile = File.ReadAllText(fileName);
loadTime = JsonConvert.DeserializeObject<DateTime>(jsonFile);
return loadTime;
}
private void OnApplicationQuit()
{
SaveSimpleTimerInfo();
SaveHierarchyTimerInfo();
SaveTime();
}
#if UNITY_EDITOR
private void OnApplicationFocus(bool focusStatus)
{
if (timerInfoDictionary.Count > 0)
{
if (focusStatus)
{
SimpleTimerInfo simpleTimerInfo = null;
HierarchyTimerInfo hierarchyTimerInfo = null;
if (IsStartedTimer() == false)
{
StartTimer();
}
foreach (KeyValuePair<string, TimerInfo> dic in timerInfoDictionary)
{
simpleTimerInfo = dic.Value as SimpleTimerInfo;
if (simpleTimerInfo != null)
{
if (simpleTimerInfo.saveTimeData != null && simpleTimerInfo.saveTimeData.Year != 1)
{
double passedTimeSecond = (DateTime.Now - simpleTimerInfo.saveTimeData).TotalSeconds;
int totalPassedTimeSecond = (simpleTimerInfo.limiteTimerCount - simpleTimerInfo.time) + (Int32)passedTimeSecond;
if (totalPassedTimeSecond >= 0)
{
simpleTimerInfo.time = simpleTimerInfo.limiteTimerCount - totalPassedTimeSecond;
}
simpleTimerInfo.OnPauseTimer(simpleTimerInfo.time);
}
}
else
{
hierarchyTimerInfo = dic.Value as HierarchyTimerInfo;
if (hierarchyTimerInfo != null)
{
int hierarchyCount = 0;
if (hierarchyTimerInfo.saveTimeData != null && hierarchyTimerInfo.saveTimeData.Year != 1)
{
double passedTimeSecond = (DateTime.Now - hierarchyTimerInfo.saveTimeData).TotalSeconds;
int totalPassedTimeSecond = (hierarchyTimerInfo.limiteTimerCount - hierarchyTimerInfo.time) + (Int32)passedTimeSecond;
if (totalPassedTimeSecond >= 0)
{
hierarchyCount = totalPassedTimeSecond / hierarchyTimerInfo.limiteTimerCount;
hierarchyTimerInfo.time = totalPassedTimeSecond - (hierarchyCount * hierarchyTimerInfo.limiteTimerCount);
hierarchyTimerInfo.time = hierarchyTimerInfo.limiteTimerCount - hierarchyTimerInfo.time;
//hierarchyTimerInfo.time = hierarchyTimerInfo.limiteTimerCount - (totalPassedTimeSecond % hierarchyTimerInfo.limiteTimerCount);
}
hierarchyTimerInfo.OnPauseTimer(hierarchyTimerInfo.time, hierarchyCount);
}
}
}
}
}
else
{
SaveSimpleTimerInfo();
SaveHierarchyTimerInfo();
SaveTime();
EndTiemr();
}
}
}
#else
private void OnApplicationPause(bool pauseStatus)
{
if (timerInfoDictionary.Count > 0)
{
if (!pauseStatus)
{
SimpleTimerInfo simpleTimerInfo = null;
HierarchyTimerInfo hierarchyTimerInfo = null;
if (IsStartedTimer() == false)
{
StartTimer();
}
foreach (KeyValuePair<string, TimerInfo> dic in timerInfoDictionary)
{
simpleTimerInfo = dic.Value as SimpleTimerInfo;
if (simpleTimerInfo != null)
{
if (simpleTimerInfo.saveTimeData != null && simpleTimerInfo.saveTimeData.Year != 1)
{
double passedTimeSecond = (DateTime.Now - simpleTimerInfo.saveTimeData).TotalSeconds;
int totalPassedTimeSecond = (simpleTimerInfo.limiteTimerCount - simpleTimerInfo.time) + (Int32)passedTimeSecond;
if (totalPassedTimeSecond >= 0)
{
simpleTimerInfo.time = simpleTimerInfo.limiteTimerCount - totalPassedTimeSecond;
}
simpleTimerInfo.OnPauseTimer(simpleTimerInfo.time);
}
}
else
{
hierarchyTimerInfo = dic.Value as HierarchyTimerInfo;
if (hierarchyTimerInfo != null)
{
int hierarchyCount = 0;
if (hierarchyTimerInfo.saveTimeData != null && hierarchyTimerInfo.saveTimeData.Year != 1)
{
double passedTimeSecond = (DateTime.Now - hierarchyTimerInfo.saveTimeData).TotalSeconds;
int totalPassedTimeSecond = (hierarchyTimerInfo.limiteTimerCount - hierarchyTimerInfo.time) + (Int32)passedTimeSecond;
if (totalPassedTimeSecond >= 0)
{
hierarchyCount = totalPassedTimeSecond / hierarchyTimerInfo.limiteTimerCount;
hierarchyTimerInfo.time = totalPassedTimeSecond - (hierarchyCount * hierarchyTimerInfo.limiteTimerCount);
hierarchyTimerInfo.time = hierarchyTimerInfo.limiteTimerCount - hierarchyTimerInfo.time;
//hierarchyTimerInfo.time = hierarchyTimerInfo.limiteTimerCount - (totalPassedTimeSecond % hierarchyTimerInfo.limiteTimerCount);
}
hierarchyTimerInfo.OnPauseTimer(hierarchyTimerInfo.time, hierarchyCount);
}
}
}
}
}
else
{
SaveSimpleTimerInfo();
SaveHierarchyTimerInfo();
SaveTime();
EndTiemr();
}
}
}
#endif
}