Files
5.24BuYu/Assets/MyGame/Scripts/Manager/GameManager.cs
T
2026-06-26 17:26:10 +08:00

233 lines
7.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}
}