You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
165 lines
5.1 KiB
165 lines
5.1 KiB
using System; |
|
using UnityEngine; |
|
|
|
public class GlobalUpdate : MonoBehaviour |
|
{ |
|
int m_updatesToHandleGetFocus = -1; |
|
|
|
bool m_focus = true; |
|
bool m_safeAreaInited = false; |
|
|
|
//----------------------------------------------------------------------------------------- |
|
public void OnDestroy() |
|
{ |
|
OnDestroySave(); |
|
} |
|
|
|
//----------------------------------------------------------------------------------------- |
|
void OnDestroySave() |
|
{ |
|
if (GlobalsVar.gUser != null) |
|
{ |
|
GlobalsVar.gUser.SaveEquipedItems(); |
|
GlobalsVar.gUser.SaveUnlockedItems(); |
|
GlobalsVar.gUser.Save(false); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------------------- |
|
void Awake () |
|
{ |
|
DontDestroyOnLoad(this); |
|
} |
|
|
|
//------------------------------------------------------------------- |
|
void OnApplicationFocus(bool hasFocus) |
|
{ |
|
if (m_focus != hasFocus) |
|
{ |
|
if (hasFocus) |
|
{ |
|
m_updatesToHandleGetFocus = 2; |
|
} |
|
else |
|
{ |
|
DateTime nowTime = UnbiasedTime.Instance.Now(); |
|
GlobalsVar.gLostFocusTime = (nowTime.Ticks / TimeSpan.TicksPerMillisecond); |
|
m_updatesToHandleGetFocus = -1; |
|
|
|
OnDestroySave(); |
|
} |
|
|
|
m_focus = hasFocus; |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------------------- |
|
void TryInitSafeArea() |
|
{ |
|
if (m_safeAreaInited) |
|
return; |
|
|
|
if (Screen.safeArea.width != Screen.width) |
|
return; |
|
|
|
m_safeAreaInited = true; |
|
GlobalsVar.gSafeAreaHudShift = (int)Math.Abs((Screen.safeArea.height - Screen.height) / 2.0f); |
|
if (GlobalsVar.gSafeAreaHudShift > 50) // уж больно много, на баг похоже.. |
|
GlobalsVar.gSafeAreaHudShift = 50; |
|
|
|
Debug.Log("Safe area = " + GlobalsVar.gSafeAreaHudShift.ToString()); |
|
|
|
if (GlobalsVar.gBoard != null) |
|
GlobalsVar.gBoard.ApplaySafeAreaHudShift(); |
|
} |
|
|
|
//----------------------------------------------------------------------------------------- |
|
void Update () |
|
{ |
|
if (!m_focus) |
|
return; |
|
|
|
UpdateUser(); |
|
UpdateSkipClickTime(); |
|
|
|
if (m_focus && m_updatesToHandleGetFocus > 0) |
|
{ |
|
m_updatesToHandleGetFocus -= 1; |
|
if (m_updatesToHandleGetFocus <= 0) |
|
{ |
|
DateTime nowTime = UnbiasedTime.Instance.Now(); |
|
long timeNow = nowTime.Ticks / TimeSpan.TicksPerMillisecond; |
|
GlobalsVar.gDeltaTimeFromLostFocus = (timeNow - GlobalsVar.gLostFocusTime) / 1000f; |
|
if (GlobalsVar.gDeltaTimeFromLostFocus < 0.0f) |
|
GlobalsVar.gDeltaTimeFromLostFocus = 1.0f; |
|
|
|
if (GlobalsVar.gLostFocusTime > 0) |
|
{ |
|
UpdateEnergyTimer(GlobalsVar.gDeltaTimeFromLostFocus); |
|
CommonFunctions.UpdateTimeToFreeCoins(GlobalsVar.gDeltaTimeFromLostFocus); |
|
} |
|
} |
|
} |
|
|
|
TryInitSafeArea(); |
|
UpdateEnergyTimer(Time.unscaledDeltaTime); |
|
CommonFunctions.UpdateTimeToFreeCoins(Time.unscaledDeltaTime); |
|
} |
|
|
|
//------------------------------------------------------------------- |
|
void UpdateSkipClickTime() |
|
{ |
|
if (GlobalsVar.gSkipClickTime <= 0f) |
|
return; |
|
|
|
GlobalsVar.gSkipClickTime -= Time.unscaledDeltaTime; |
|
if (GlobalsVar.gSkipClickTime < 0f) |
|
GlobalsVar.gSkipClickTime = 0f; |
|
} |
|
|
|
//------------------------------------------------------------------- |
|
void UpdateEnergyTimer(float timeDelta) |
|
{ |
|
if (GlobalsVar.gUser == null) |
|
return; |
|
|
|
if (GlobalsVar.gUser.Energy >= GlobalsVar.gMaxEnergyCount) |
|
return; |
|
|
|
while (timeDelta > 0.0f) |
|
{ |
|
float valueToDec = timeDelta; |
|
if (valueToDec < GlobalsVar.gCurrentTimeToRegenerateEnergy) |
|
{ |
|
timeDelta = 0.0f; |
|
} |
|
else |
|
{ |
|
timeDelta -= GlobalsVar.gCurrentTimeToRegenerateEnergy; |
|
valueToDec = GlobalsVar.gCurrentTimeToRegenerateEnergy; |
|
} |
|
|
|
GlobalsVar.gCurrentTimeToRegenerateEnergy -= valueToDec; |
|
if (GlobalsVar.gCurrentTimeToRegenerateEnergy <= 0) |
|
{ |
|
GlobalsVar.gUser.IncEnergy(); |
|
if (GlobalsVar.gUser.Energy < GlobalsVar.gMaxEnergyCount) |
|
GlobalsVar.gCurrentTimeToRegenerateEnergy = GlobalsVar.gTimeToRegenerateEnergy; |
|
|
|
if (GlobalsVar.gUser.Energy >= GlobalsVar.gMaxEnergyCount) |
|
break; |
|
} |
|
} |
|
|
|
MainMenu mainMenu = GlobalsVar.gBoard as MainMenu; |
|
if (mainMenu) |
|
mainMenu.UpdateTimerLabel(); |
|
} |
|
|
|
//----------------------------------------------------------------------------------------- |
|
void UpdateUser() |
|
{ |
|
if (GlobalsVar.gUser != null) |
|
GlobalsVar.gUser.Update(); |
|
} |
|
}
|
|
|