248 lines
8.0 KiB
C#
248 lines
8.0 KiB
C#
using Assets.MyGame.Scripts.Net;
|
||
using Assets.MyGame.Scripts.Net.API;
|
||
using Assets.MyGame.Scripts.Net.API.GameConfig_SubClass;
|
||
using CameraShake;
|
||
using Newtonsoft.Json;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Threading.Tasks;
|
||
using UnityEngine;
|
||
using UnityEngine.InputSystem;
|
||
using UnityEngine.Rendering;
|
||
using UnityEngine.SceneManagement;
|
||
using UnityEngine.UI;
|
||
using UnityEngine.Video;
|
||
|
||
public class GameManager : MonoSingleton<GameManager>
|
||
{
|
||
[Header("人机")]
|
||
public bool enableBot = true; // 人机开关
|
||
|
||
public GameConfig gameConfig;
|
||
public Dictionary<string, FishTypeConfig> dic_fishTypeConfigs=new Dictionary<string, FishTypeConfig>();
|
||
public UserData user;
|
||
public GameData gameData = new GameData();
|
||
public Scene scene;
|
||
|
||
/// <summary>
|
||
/// 头像更新事件(换了头像后触发,所有头像控件统一刷新)
|
||
/// </summary>
|
||
/// <summary>头像更新事件</summary>
|
||
public event Action<Sprite> OnAvatarChanged;
|
||
/// <summary>用户数据更新事件(金币/钻石/等级等发生变化时触发)</summary>
|
||
public event Action OnUserDataChanged;
|
||
|
||
/// <summary>头像字典(name → sprite),从 Resources/Avatar 加载</summary>
|
||
private Dictionary<string, Sprite> avatarSpriteDict = new Dictionary<string, Sprite>();
|
||
|
||
/// <summary>默认头像(新账号无头像时使用)</summary>
|
||
private Sprite defaultAvatar;
|
||
|
||
/// <summary>触发头像更新事件</summary>
|
||
public void TriggerAvatarChanged(Sprite sprite)
|
||
{
|
||
OnAvatarChanged?.Invoke(sprite);
|
||
}
|
||
public CameraShaker cameraShake;
|
||
public Camera ZhuCam;
|
||
|
||
// // 指定此方法在加载时立即调用,在显示启动动画前之前执行
|
||
// [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)]
|
||
// private static void BeforeSplashScreen()
|
||
// {
|
||
// //平台适配
|
||
//#if UNITY_WEBGL
|
||
// // 如果在 WebGL 平台上运行,立即停止启动动画
|
||
// SplashScreen.Stop(SplashScreen.StopBehavior.StopImmediate);
|
||
//#else
|
||
// // 如果不是在 WebGL 平台上,启动一个异步任务来停止启动动画
|
||
// System.Threading.Tasks.Task.Run(() =>
|
||
// {
|
||
// SplashScreen.Stop(SplashScreen.StopBehavior.StopImmediate);
|
||
// });
|
||
//#endif
|
||
// }
|
||
|
||
/// <summary>
|
||
/// 初始化头像缓存(从 Resources/Avatar 加载所有Sprite)
|
||
/// </summary>
|
||
public void InitAvatarCache()
|
||
{
|
||
avatarSpriteDict.Clear();
|
||
var sprites = Resources.LoadAll<Sprite>("Avatar");
|
||
foreach (var s in sprites)
|
||
avatarSpriteDict[s.name] = s;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据名称获取头像 Sprite
|
||
/// </summary>
|
||
public Sprite GetAvatarSprite(string avatarName)
|
||
{
|
||
if (avatarSpriteDict.Count == 0) InitAvatarCache();
|
||
if (string.IsNullOrEmpty(avatarName) || !avatarSpriteDict.TryGetValue(avatarName, out var sprite))
|
||
sprite = GetDefaultAvatar();
|
||
return sprite;
|
||
}
|
||
|
||
private Sprite GetDefaultAvatar()
|
||
{
|
||
if (defaultAvatar == null && avatarSpriteDict.Count > 0)
|
||
{
|
||
// 取缓存中第一个头像作为默认
|
||
foreach (var kv in avatarSpriteDict)
|
||
{
|
||
defaultAvatar = kv.Value;
|
||
break;
|
||
}
|
||
}
|
||
return defaultAvatar;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 更换头像:上传服务端 → 更新本地 → 触发全局刷新
|
||
/// </summary>
|
||
public void ApplyAvatar(string avatarUrl)
|
||
{
|
||
APIRequestList.UpdateAvatar(avatarUrl, (result) =>
|
||
{
|
||
user.BaseInfo.avatarUrl = avatarUrl;
|
||
user.BaseInfo.avatarSprite = null;
|
||
|
||
var sprite = GetAvatarSprite(avatarUrl);
|
||
TriggerAvatarChanged(sprite);
|
||
});
|
||
}
|
||
|
||
public void UpdataUserData(UserData user)
|
||
{
|
||
this.user = user;
|
||
OnUserDataChanged?.Invoke();
|
||
}
|
||
protected override void Awake()
|
||
{
|
||
// ⭐ 游戏启动时加载已保存的画质和帧率设置
|
||
int quality = PlayerPrefs.GetInt("GraphicsQuality", 1);
|
||
QualitySettings.SetQualityLevel(quality, true);
|
||
|
||
int fps = PlayerPrefs.GetInt("TargetFps", 1);
|
||
Application.targetFrameRate = fps switch
|
||
{
|
||
0 => 30,
|
||
1 => 60,
|
||
2 => -1,
|
||
_ => 60
|
||
};
|
||
|
||
AudioResourcesData audioResourcesData=new AudioResourcesData();
|
||
InItLoad();
|
||
//TurretResourcesData turretResourcesData = new TurretResourcesData();
|
||
Application.runInBackground = true;
|
||
|
||
base.Awake();
|
||
cameraShake = Camera.main.GetComponent<CameraShaker>();
|
||
gameData.currUser = "123";
|
||
//string json = Resources.Load<TextAsset>("Config/GameConfig").text;
|
||
//gameConfig = JsonConvert.DeserializeObject<APIResponse<GameConfig>>(json).data;
|
||
APIManager.Response<GameConfig>(APIType.GameConfig_Get, res => { gameConfig = res; var v = CreateFishManager.Instance.CreateDic;
|
||
foreach (var item in gameConfig.fishTypeConfigs)
|
||
{
|
||
dic_fishTypeConfigs[item.fishNumber]=item;
|
||
}
|
||
});
|
||
|
||
}
|
||
public async Task InItLoad()
|
||
{
|
||
await TurretResourcesData.LoadTurretAssetsData();
|
||
}
|
||
public void StartGame(Action action)
|
||
{
|
||
|
||
switch (gameData.currGameType)
|
||
{
|
||
case GameType.JQQD:
|
||
break;
|
||
case GameType.defaultPanel:
|
||
UIManager.Instance.ShowAsync(UIPanel.MainGamePanelDefault);
|
||
break;
|
||
case GameType.FLZY:
|
||
if (action != null)
|
||
WebSocketManager.Instance.Connect(SocketType.game, action);
|
||
//UIManager.Instance.ShowAsync(UIPanel.MainGamePanelFLZY);
|
||
break;
|
||
case GameType.YYSC:
|
||
if (action != null)
|
||
{
|
||
WebSocketManager.Instance.Connect(SocketType.game, action);
|
||
}
|
||
break;
|
||
case GameType.ZGXQ:
|
||
//UIManager.Instance.ShowAsync(UIPanel.MainGamePanelZGXQ);
|
||
//这里设置触发棋盘的初始化
|
||
|
||
break;
|
||
case GameType.XJMH:
|
||
if (action != null)
|
||
{
|
||
WebSocketManager.Instance.Connect(SocketType.game, action);
|
||
}
|
||
else
|
||
WebSocketManager.Instance.Connect(SocketType.game);
|
||
break;
|
||
case GameType.HHWK:
|
||
//UIManager.Instance.ShowAsync(UIPanel.MainGamePanelDefault);
|
||
if (action != null)
|
||
WebSocketManager.Instance.Connect(SocketType.game, action);
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
}
|
||
// Start is called before the first frame update
|
||
public Button btn_Skip;
|
||
public VideoClip startVideoClip;
|
||
void Start()
|
||
{
|
||
var v = UIManager.Instance.ShowLoadPanel(startVideoClip);
|
||
UIManager.Instance.ShowAsync(UIPanel.LoginPanel, null, (a) =>
|
||
{
|
||
v.LoadBar(100);
|
||
}, 28);
|
||
btn_Skip.onClick.AddListener(() =>
|
||
{
|
||
UIManager.Instance.StopShowPanel();
|
||
UIManager.Instance.ShowAsync(UIPanel.LoginPanel, null, null, 0);
|
||
v.LoadBar(100);
|
||
});
|
||
}
|
||
|
||
// Update is called once per frame
|
||
void Update()
|
||
{
|
||
#if UNITY_EDITOR
|
||
if (Keyboard.current.qKey.wasPressedThisFrame)
|
||
{
|
||
UIManager.Instance.ShowBoardGongGao("太有实力了dadadadwawafdsdrgdfghdsufhkjghjksdfdgdffghgjhgykhjkhjghjfg");
|
||
}
|
||
#endif
|
||
|
||
}
|
||
|
||
public void Logout(Action onDone = null)
|
||
{
|
||
// 关闭所有 WebSocket 连接
|
||
WebSocketManager.Instance.CloseAll();
|
||
// 清空用户数据
|
||
user = null;
|
||
// 关闭所有 UI
|
||
UIManager.Instance.CloseAll();
|
||
// 切换到登录界面
|
||
UIManager.Instance.ShowAsync(UIPanel.LoginPanel, null, (panel) =>
|
||
{
|
||
onDone?.Invoke();
|
||
});
|
||
}
|
||
}
|