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 { [Header("人机")] public bool enableBot = true; // 人机开关 public GameConfig gameConfig; public Dictionary dic_fishTypeConfigs=new Dictionary(); public UserData user; public GameData gameData = new GameData(); public Scene scene; /// /// 头像更新事件(换了头像后触发,所有头像控件统一刷新) /// public event Action OnAvatarChanged; /// 头像字典(name → sprite),从 Resources/Avatar 加载 private Dictionary avatarSpriteDict = new Dictionary(); /// 触发头像更新事件 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 // } /// /// 初始化头像缓存(从 Resources/Avatar 加载所有Sprite) /// public void InitAvatarCache() { avatarSpriteDict.Clear(); var sprites = Resources.LoadAll("Avatar"); foreach (var s in sprites) avatarSpriteDict[s.name] = s; } /// /// 根据名称获取头像 Sprite /// public Sprite GetAvatarSprite(string avatarName) { if (avatarSpriteDict.Count == 0) InitAvatarCache(); avatarSpriteDict.TryGetValue(avatarName, out var sprite); return sprite; } /// /// 更换头像:上传服务端 → 更新本地 → 触发全局刷新 /// 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; var a = UIManager.Instance.Get(UIPanel.HomeMainPanel); if (a!=null) { a.UpdateUserData(); } } 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(); gameData.currUser = "123"; //string json = Resources.Load("Config/GameConfig").text; //gameConfig = JsonConvert.DeserializeObject>(json).data; APIManager.Response(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 } }