746 lines
24 KiB
C#
746 lines
24 KiB
C#
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
|
||
}
|