362 lines
8.7 KiB
C#
362 lines
8.7 KiB
C#
![]() |
// ***********************************************************************
|
|||
|
// Assembly : Unity
|
|||
|
// Author : Kimch
|
|||
|
// Created :
|
|||
|
//
|
|||
|
// Last Modified By : Kimch
|
|||
|
// Last Modified On :
|
|||
|
// ***********************************************************************
|
|||
|
// <copyright file= "Launch" company=""></copyright>
|
|||
|
// <summary></summary>
|
|||
|
// ***********************************************************************
|
|||
|
//#define LIMITTIME
|
|||
|
namespace G
|
|||
|
{
|
|||
|
using System;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 游戏启动类
|
|||
|
/// </summary>
|
|||
|
public class Launch : MonoBehaviour
|
|||
|
{
|
|||
|
#region Static
|
|||
|
|
|||
|
private static int _Timestamp;
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
public static int Timestamp
|
|||
|
{
|
|||
|
get { return _Timestamp; }
|
|||
|
}
|
|||
|
|
|||
|
private static int _LocalTimestamp;
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
public static int LocalTimestamp
|
|||
|
{
|
|||
|
get { return _LocalTimestamp; }
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
public static int TodaySeconds
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
var now = ServerNow;
|
|||
|
return (int)((now - now.Date).TotalSeconds);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
public static int TodayRemainSeconds
|
|||
|
{
|
|||
|
get { return 86400 - TodaySeconds; }
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
public static DateTime ServerUtcNow
|
|||
|
{
|
|||
|
get { return F.Utils.Time.ToDataTime(_Timestamp); }
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
public static DateTime ServerNow
|
|||
|
{
|
|||
|
get { return ServerUtcNow.ToLocalTime(); }
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
/// <param name="timestamp"></param>
|
|||
|
public static void SetServerTimestamp(int timestamp)
|
|||
|
{
|
|||
|
_ServerTimestamp = timestamp;
|
|||
|
|
|||
|
SetCalibrationSeconds();
|
|||
|
UpdateTimestamp();
|
|||
|
}
|
|||
|
|
|||
|
static int _ServerTimestamp;
|
|||
|
static DateTime _CalibrationDateTime;
|
|||
|
static DateTime _LastCalibrationDateTime;
|
|||
|
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
public static bool IsCalibration()
|
|||
|
{
|
|||
|
return GetCalibrationSeconds() > 0;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
/// <returns></returns>
|
|||
|
static int GetCalibrationSeconds()
|
|||
|
{
|
|||
|
var totalSeconds = (DateTime.UtcNow - _LastCalibrationDateTime).TotalSeconds;
|
|||
|
if (totalSeconds > 0 && totalSeconds < 600)
|
|||
|
{
|
|||
|
_LastCalibrationDateTime = DateTime.UtcNow;
|
|||
|
return (int)(_LastCalibrationDateTime - _CalibrationDateTime).TotalSeconds;
|
|||
|
}
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
static void SetCalibrationSeconds()
|
|||
|
{
|
|||
|
_CalibrationDateTime = DateTime.UtcNow;
|
|||
|
_LastCalibrationDateTime = _CalibrationDateTime;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
public static void UpdateTimestamp()
|
|||
|
{
|
|||
|
#if !UNITY_EDITOR && !DEBUG_MY
|
|||
|
if (_ServerTimestamp > 0)
|
|||
|
_Timestamp = _ServerTimestamp + GetCalibrationSeconds();
|
|||
|
else
|
|||
|
#endif
|
|||
|
_Timestamp = F.Utils.Time.ToUnixTime(DateTime.UtcNow);
|
|||
|
|
|||
|
_LocalTimestamp = F.Utils.Time.ToUnixTime(DateTime.UtcNow);
|
|||
|
}
|
|||
|
|
|||
|
private static int _InstallTimestamp;
|
|||
|
/// <summary>
|
|||
|
/// 安装
|
|||
|
/// </summary>
|
|||
|
public static int InstallTimestamp
|
|||
|
{
|
|||
|
get { return _InstallTimestamp; }
|
|||
|
set
|
|||
|
{
|
|||
|
var key = "it_";// + KConfig.appVersion;
|
|||
|
_InstallTimestamp = PlayerPrefs.GetInt(key, 0);
|
|||
|
if (_InstallTimestamp == 0)
|
|||
|
{
|
|||
|
_InstallTimestamp = value;
|
|||
|
PlayerPrefs.SetInt(key, _InstallTimestamp);
|
|||
|
PlayerPrefs.Save();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
///
|
|||
|
/// </summary>
|
|||
|
public static float RunningTime
|
|||
|
{
|
|||
|
get;
|
|||
|
private set;
|
|||
|
}
|
|||
|
|
|||
|
public static string CurrLevelName
|
|||
|
{
|
|||
|
get;
|
|||
|
private set;
|
|||
|
}
|
|||
|
|
|||
|
public static string LastLevelName
|
|||
|
{
|
|||
|
get;
|
|||
|
private set;
|
|||
|
}
|
|||
|
|
|||
|
public static void LoadLevel(string levelName)
|
|||
|
{
|
|||
|
LastLevelName = CurrLevelName;
|
|||
|
CurrLevelName = levelName;
|
|||
|
#if UNITY_5_3_OR_NEWER
|
|||
|
UnityEngine.SceneManagement.SceneManager.LoadScene(levelName, UnityEngine.SceneManagement.LoadSceneMode.Single);
|
|||
|
#else
|
|||
|
Application.LoadLevel(levelName);
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
public static AsyncOperation LoadLevelAsync(string levelName)
|
|||
|
{
|
|||
|
LastLevelName = CurrLevelName;
|
|||
|
CurrLevelName = levelName;
|
|||
|
Camera.main.clearFlags = CameraClearFlags.SolidColor;
|
|||
|
Camera.main.backgroundColor = Color.black;
|
|||
|
#if UNITY_5_3_OR_NEWER
|
|||
|
var asynOp = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync(levelName, UnityEngine.SceneManagement.LoadSceneMode.Single);
|
|||
|
#else
|
|||
|
var asynOp = Application.LoadLevelAsync(levelName);
|
|||
|
#endif
|
|||
|
return asynOp;
|
|||
|
}
|
|||
|
|
|||
|
private static float _TimeScale;
|
|||
|
public static void PauseGame(bool pause)
|
|||
|
{
|
|||
|
AudioListener.pause = pause;
|
|||
|
if (pause)
|
|||
|
{
|
|||
|
_TimeScale = Time.timeScale;
|
|||
|
Time.timeScale = 0f;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Time.timeScale = 1f;
|
|||
|
_TimeScale = 0f;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static bool IsPause()
|
|||
|
{
|
|||
|
return _TimeScale == 0f;
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region Field
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region Method
|
|||
|
|
|||
|
private void InitGame()
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region Unity
|
|||
|
|
|||
|
private void Awake()
|
|||
|
{
|
|||
|
#if DEBUG_MY || LIMITTIME
|
|||
|
if (System.DateTime.Now > new System.DateTime(2022, 7, 1))
|
|||
|
{
|
|||
|
Application.Quit();
|
|||
|
}
|
|||
|
#endif
|
|||
|
DontDestroyOnLoad(gameObject);
|
|||
|
|
|||
|
#if UNITY_STANDALONE_WIN
|
|||
|
Screen.SetResolution(1280, 720, false);
|
|||
|
#else
|
|||
|
//SetDesignContentScale();
|
|||
|
#endif
|
|||
|
UnityEngine.Random.InitState((int)System.DateTime.UtcNow.Ticks);
|
|||
|
UpdateTimestamp();
|
|||
|
//InstallTimestamp = Timestamp;
|
|||
|
|
|||
|
Application.targetFrameRate = 60;
|
|||
|
//Time.fixedDeltaTime = 0.02f;
|
|||
|
Screen.sleepTimeout = SleepTimeout.NeverSleep;
|
|||
|
#if !UNITY_EDITOR
|
|||
|
//Application.logMessageReceived += KLog.LogCallback;
|
|||
|
#endif
|
|||
|
//add Game Base
|
|||
|
InitGame();
|
|||
|
}
|
|||
|
|
|||
|
private void LateUpdate()
|
|||
|
{
|
|||
|
UpdateTimestamp();
|
|||
|
RunningTime += Time.unscaledDeltaTime;
|
|||
|
}
|
|||
|
|
|||
|
private void OnApplicationQuit()
|
|||
|
{
|
|||
|
//KLog.Save();
|
|||
|
//KPlatform.SessionChange(false);
|
|||
|
//KPlatform.ProfileSign(false);
|
|||
|
}
|
|||
|
|
|||
|
private void OnApplicationFocus(bool focusStatus)
|
|||
|
{
|
|||
|
if (!focusStatus)
|
|||
|
{
|
|||
|
//PlayerPrefs.Save();
|
|||
|
//KLog.Save();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void OnApplicationPause(bool pauseStatus)
|
|||
|
{
|
|||
|
//KPlatform.SessionChange(!pauseStatus);
|
|||
|
//KPlatform.ProfileSign(!pauseStatus);
|
|||
|
if (pauseStatus)
|
|||
|
{
|
|||
|
//KLog.Save();
|
|||
|
//PlayerPrefs.Save();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//SetDesignContentScale();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#if UNITY_ANDROID
|
|||
|
private int _scaleWidth = 0;
|
|||
|
private int _scaleHeight = 0;
|
|||
|
public void SetDesignContentScale()
|
|||
|
{
|
|||
|
if (_scaleWidth + _scaleHeight == 0)
|
|||
|
{
|
|||
|
int designWidth = 1334;
|
|||
|
int designHeight = 750;
|
|||
|
|
|||
|
int screenWidth = Screen.width;
|
|||
|
int screenHeight = Screen.height;
|
|||
|
|
|||
|
float s1 = designWidth / (float)designHeight;
|
|||
|
float s2 = screenWidth / (float)screenHeight;
|
|||
|
|
|||
|
if (s1 < s2)
|
|||
|
{
|
|||
|
designWidth = Mathf.RoundToInt(designHeight * s2);
|
|||
|
}
|
|||
|
else if (s1 > s2)
|
|||
|
{
|
|||
|
designHeight = Mathf.RoundToInt(designWidth / s2);
|
|||
|
}
|
|||
|
|
|||
|
float contentScale = designWidth / (float)screenWidth;
|
|||
|
if (contentScale < 1.0f)
|
|||
|
{
|
|||
|
_scaleWidth = designWidth;
|
|||
|
_scaleHeight = designHeight;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (_scaleWidth + _scaleHeight > 0)
|
|||
|
{
|
|||
|
//if (_scaleWidth % 2 == 0)
|
|||
|
//{
|
|||
|
// _scaleWidth += 1;
|
|||
|
//}
|
|||
|
//else
|
|||
|
//{
|
|||
|
// _scaleWidth -= 1;
|
|||
|
//}
|
|||
|
Screen.SetResolution(_scaleWidth, _scaleHeight, true);
|
|||
|
}
|
|||
|
}
|
|||
|
#endif
|
|||
|
#endregion
|
|||
|
}
|
|||
|
}
|