Untitled
plain_text
a month ago
6.6 kB
1
Indexable
Never
using UnityEngine; using NovemberGames.Utils; using UISystem; using InputSystem; using DG.Tweening; using System; using AudioSystem; using System.Collections.Generic; using TMPro; #if UNITY_EDITOR using UnityEditor; #endif namespace Pinata.Builder { #region GLOBAL MEMBERS public enum UIScreen { LoadingScreen, MainMenu, GameHUD, LoadMenu, SaveMenu } #endregion public class GameManager : Singleton<GameManager> { #region MEMBER FIELDS public const int GameID = 1; public Camera MainCamera; public CameraOffset OffScreenCameraOffset; [NonSerialized] public SkinnedCharacter Pinata; [NonSerialized] public PlayerDataResponse PlayerData; public delegate void OnCameraReady(); [Serializable] public class CameraOffset { public Vector2 Offset; public float Zoom; public float Speed; public float RotateSpeed; public void Apply(OnCameraReady onCameraReady = null) { Instance.OffsetCamera(this, onCameraReady); } } private Material _playerSkinMaterial; public Material PlayerSkinMaterial { get { return _playerSkinMaterial; } } private IEnumerator<float> _launchDataCheckerRoutine; private string _lastLaunchDataId; #endregion #region INIT private void Awake() { Misc.EnableLogCategory("dev"); Debug.Log(AudioManager.Instance.name); UIManager.Instance.DefineStates(new UIScreen()); InputManager.Instance.Instantiate(); DataManager.Instance.Init(); //DataManager.Instance.SetPlayerSkinTest("Pegasus"); } private void Start() { //start on loading screen UIManager.Instance.SetState(UIScreen.LoadingScreen); } public void InitGame(PlayerDataResponse playerData, Material skinMaterial, bool showPopper = false) { Popper.PopperManager.Instance.SetupCandy(playerData.candy); if (Pinata != null) Destroy(Pinata.gameObject); OffScreenCameraOffset.Apply();//make sure our camera is offscreen PlayerData = playerData; _playerSkinMaterial = skinMaterial; if (showPopper) { Popper.PopperManager.Instance.InitializeGame(); return; } Pinata = SkinManager.Instance.InstantiatePrefab(this.PlayerData.skin, _playerSkinMaterial); RotatorManager.Instance.Target = Pinata.transform; Pinata.transform.localScale = Vector3.one * 15f; WorldCloud.Speed = 1.2f;//animate in the clouds at a 1.2 speed //wait just a tad to bring in the main menu Chronos.WaitForSeconds(0.5f, () => { //display MainMenuUI UIManager.Instance.SetState(UIScreen.MainMenu); //start the piñata rotator RotatorManager.Instance.AutoRotate.Enabled = true; Chronos.Kill(_launchDataCheckerRoutine); _launchDataCheckerRoutine = Chronos.InvokeRepeating(1f, CheckForLaunchData); }); } private bool CheckForLaunchData() { AndroidJavaClass UnityPlayer = null; AndroidJavaObject currentActivity = null; AndroidJavaObject intent = null; try { UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); currentActivity = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); intent = currentActivity.Call<AndroidJavaObject>("getIntent"); } catch (Exception e) { return true; } if (!intent.Call<bool>("hasExtra", "id")) return true; if (!intent.Call<bool>("hasExtra", "skin")) return true; AndroidJavaObject extras = intent.Call<AndroidJavaObject>("getExtras"); string skinName = extras.Call<string>("getString", "skin"); string intentId = extras.Call<string>("getString", "id"); //only trigger if we received new data if (intentId.Equals(_lastLaunchDataId)) return true; _lastLaunchDataId = intentId; if (string.IsNullOrEmpty(skinName)) return true; DataManager.Instance.GetPlayerData(skinName, (player) => { if (!player.success) { Misc.Log("No data found for player " + skinName, "dev"); player.skin = new SkinManager.SkinConfiguration();//set the default skin player.name = skinName; //since the player didnt exist, save it... WWWForm data = new WWWForm(); data.AddField("skin", JsonUtility.ToJson(player.skin)); DataManager.Instance.SetPlayerData(skinName, data, true, null); } //create the combined material, remove our current screen and init the game again Material skinMaterial = SkinManager.Instance.CreateCombinedMaterial(player.skin); UIManager.Instance.RemoveCurrentState(); InitGame(player, skinMaterial, true); }); return true; } #endregion #region CAMERA public void OffsetCamera(CameraOffset targetOffset, OnCameraReady onCameraReady = null) { MainCamera.transform.DOLocalMoveX(targetOffset.Offset.x, targetOffset.Speed).SetEase(Ease.OutCubic); MainCamera.transform.DOLocalMoveY(targetOffset.Offset.y, targetOffset.Speed).SetEase(Ease.OutCubic); MainCamera.transform.DOLocalMoveZ(targetOffset.Zoom, targetOffset.Speed).SetEase(Ease.OutCubic).OnComplete(() => { RotatorManager.Instance.AutoRotate.Speed = targetOffset.RotateSpeed; onCameraReady?.Invoke(); }); } #endregion #region DESTROY public void QuitApplication() { //If we are running in a standalone build of the game #if UNITY_STANDALONE //Quit the application Application.Quit(); #endif //If we are running in the editor #if UNITY_EDITOR //Stop playing the scene EditorApplication.isPlaying = false; #endif } #endregion } }