using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class PKMatchingView : MonoBehaviour { [SerializeField] Sprite[] matchHeadBGList; float waitingTime = 0; SocketPlayer socketPlayer; void Awake() { } void Start() { Sprite avatar = RoleMgr.GetAvatar(LoginMgr.myUserInfo.avatarID); string nickname = LoginMgr.myUserInfo.nickname; RenderPlayerInfo(1, avatar, nickname, true); RenderPlayerInfo(2, null, "", false); socketPlayer = new GameObject("SocketPlayer").AddComponent(); socketPlayer.onLoad_ = () => { socketPlayer.UploadPlayerInfo(); socketPlayer.RandomMatchRoom(); }; socketPlayer.onMatchSuccess = () => { int otherIndex = (GlobalData.playerIndexInRoom + 1) % 2; MatchPlayerInfo info = GlobalData.matchPlayerInfos[otherIndex]; (Sprite avatar, string nickname) = RoleMgr.GetRoleInfo(info.avatarID); nickname = info.nickname; RenderPlayerInfo(2, avatar, nickname, true); RenderTip("匹配成功,即将开始游戏!"); HideBtnBack(); PauseWaitingTime(); socketPlayer.AgreeStartGame(); }; socketPlayer.onAgreeStartGame = () => { DontDestroyOnLoad(socketPlayer); toLoadGame = true; }; socketPlayer.onDestroy_ += () => { if (this && this.gameObject) { Destroy(this.gameObject); Destroy(socketPlayer.gameObject); PopupMgr.ins.ShowTip("网络发生意外!"); } }; } //通过此方法,不需要经过匹配页面进行匹配,可以直接在游戏场景匹配,方便测试 public static void MoniMatchForTestInGameScene(Action onAgreeStartGame) { SocketPlayer socketPlayer = new GameObject("SocketPlayer").AddComponent(); socketPlayer.onLoad_ = () => { socketPlayer.UploadPlayerInfo(); socketPlayer.RandomMatchRoom(); }; socketPlayer.onMatchSuccess = () => { int otherIndex = (GlobalData.playerIndexInRoom + 1) % 2; MatchPlayerInfo info = GlobalData.matchPlayerInfos[otherIndex]; (Sprite avatar, string nickname) = RoleMgr.GetRoleInfo(info.avatarID); nickname = LoginMgr.myUserInfo.nickname; socketPlayer.AgreeStartGame(); }; socketPlayer.onAgreeStartGame = () => { DontDestroyOnLoad(socketPlayer); if (onAgreeStartGame != null) onAgreeStartGame(); }; } bool toLoadGame = false; float loadGameSceneCountdown = 1; void Update() { if (waitingTime >= 0) { waitingTime += Time.deltaTime; this.transform.Find("BoxRight/TimeBG").GetComponentInChildren().text = TimeUtil.GetTimeStr(waitingTime, false); } if (toLoadGame) { loadGameSceneCountdown -= Time.deltaTime; if (loadGameSceneCountdown <= 0) { toLoadGame = false; //loadscene if (GlobalData.matchRoomType == 0) { GameMgr.gameType = 9; SceneManager.LoadScene("Game", LoadSceneMode.Single); } } } } void PauseWaitingTime() { waitingTime = -1; } void RenderPlayerInfo(int playerID, Sprite avatar, string nickname, bool active) { this.transform.Find($"BoxRight/Player{playerID}/NameBox") .GetComponentInChildren().text = active ? nickname : "等待加入"; Transform avatarT = this.transform.Find($"BoxRight/Player{playerID}/MatchHeadBG/Avatar"); avatarT.gameObject.SetActive(active); avatarT.Find("Sprite").GetComponent().sprite = avatar; } void ChangeMatchHeadBG(int typeIndex) { Image img = this.transform.Find("BoxRight/Player2/MatchHeadBG").GetComponent(); img.sprite = matchHeadBGList[typeIndex]; img.GetComponent