Untitled
unknown
plain_text
2 years ago
6.6 kB
10
Indexable
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
}
}
Editor is loading...