Files
5.24BuYu/Assets/MyGame/aa/UI/Home/Sub/UIHome_BY_SelectRoomLevelPanel.cs
T
2026-09-09 15:22:03 +08:00

356 lines
14 KiB
C#

using Assets.MyGame.Scripts.Net;
using Assets.MyGame.Scripts.Net.WebResponses;
using System;
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using TMPro;
using UnityEngine;
using UnityEngine.Rendering.Universal;
using UnityEngine.UI;
public enum GameType
{
JQQD = 0,
defaultPanel =999,
FLZY = 1,
YYSC = 2,
ZGXQ = 3,
XJMH = 4,
HHWK = 5,
}
public class UIHome_BY_SelectRoomLevelPanel : SubUIBase
{
[Header("DefaultGame")]
[Header("快速进入")]
public Button SelectRoom1;
public Button SelectRoom2;
public Button SelectRoom3;
[Header("手动选择")]
public Button MySelectRoom1;
public Button MySelectRoom2;
public Button MySelectRoom3;
public GameObject ui_Default;
SelectGameLeave_DefaultUIItem currUIDefault;
public UIHome_BY_MySelectRoomPanel panel_UIHome_BY_MySelectRoomPenel;
public GameType currGameType;
public int leave = 1;
public bool isMySelectRoom=false;
public List<Camera> subCameras;
[Header("提示")]
public GameObject tiShi;
public TextMeshProUGUI tmpText_Label;
public Button btn_CloseTiShi;
public Button btn_QuXiao;
public Button btn_ChongZhi;
private Vector3 _tiShiStandardSize;
/// <summary>检查当前用户是否有手动选座权限</summary>
private bool CanSelectRoom()
{
var limit = GameManager.Instance?.gameConfig?.fishRoomConfig?.seatSelectLimit;
if (limit == null || limit.Count == 0) return true; // 没配限制,默认允许
// 用户身份:vipLevel > 0 → 1(VIP),否则 3(普通)
int userType = GameManager.Instance.user.assets.vipLevel > 0 ? 1 : 3;
return limit.Contains(userType);
}
public override void Awake()
{
base.Awake();
//foreach (var item in subCameras)
//{
// UniversalAdditionalCameraData mainCameraData = GameManager.Instance.ZhuCam.GetUniversalAdditionalCameraData();
// //mainCameraData.renderType = CameraRenderType.Overlay;
// mainCameraData.cameraStack.Add(item);
//}
WebSocketManager.Instance.Connect(SocketType.room);
// 提示窗口:确认/关闭效果一致(关闭提示),充值跳转商城
if (tiShi != null)
{
tiShi.SetActive(false);
_tiShiStandardSize = tiShi.transform.GetChild(0).localScale;
}
if (btn_CloseTiShi != null)
btn_CloseTiShi.onClick.AddListener(HideTiShi);
if (btn_QuXiao != null)
btn_QuXiao.onClick.AddListener(HideTiShi);
if (btn_ChongZhi != null)
btn_ChongZhi.onClick.AddListener(() =>
{
HideTiShi();
UIManager.Instance.Get<UIHomeMain>(UIPanel.HomeMainPanel)
.subUIManager.ShowAsync(UIPanel.ShopPanel, ShopTab.VipExp);
});
}
/// <summary>显示提示窗口(弹窗出现动画)</summary>
private void ShowTiShi(string msg)
{
if (tiShi == null) return;
if (tmpText_Label != null) tmpText_Label.text = msg;
tiShi.SetActive(true);
var t = tiShi.transform.GetChild(0);
t.localScale = Vector3.zero;
t.DOKill();
t.DOScale(_tiShiStandardSize, 0.55f).SetEase(Ease.OutElastic, 0.7f, 0.35f);
}
/// <summary>隐藏提示窗口(缩放消失动画)</summary>
private void HideTiShi()
{
if (tiShi == null || !tiShi.activeSelf) return;
var t = tiShi.transform.GetChild(0);
t.DOKill();
t.DOScale(0, 0.3f).SetEase(Ease.InBack).onComplete += () =>
{
if (tiShi != null) tiShi.SetActive(false);
};
}
public void OnSelectRoom(int leave)
{
if (isMySelectRoom)
{
// 手动选座:走原 WebSocket 流程(GetRoomList → MySelectRoomPanel 显示列表)
WebSocketSendList.GetRoomListFish(leave, 1);
}
else
{
// ⭐ 快速加入:调 /api/Room/QuickJoin 拿 roomId + webSocketUrl → 连 socket → JoinRoom(-1)
// leave: 1=初级场 / 2=中级场 / 3=高级场 (-1=全场次快速进入,暂未实现)
int gameType = (int)GameManager.Instance.gameData.currGameType;
APIRequestList.RoomQuickJoin(gameType, leave, (resp) =>
{
if (resp == null || string.IsNullOrEmpty(resp.roomId))
{
UIManager.Instance.ShowBoardError("快速加入失败,请稍后重试");
return;
}
// 用 QuickJoin 返回的 webSocketUrl 直接连接 game socket,然后 JoinRoom(-1) 让服务器分配座位
GameManager.Instance.StartGameQuickJoin(resp.webSocketUrl, () =>
{
WebSocketSendList.JoinRoom(resp.roomId, GameManager.Instance.user.id, -1);
});
});
}
}
/// <summary>快速开始:按金币从高级场到低级场匹配,能进高级场就不进低级场,都不满足进初级场</summary>
private int GetQuickStartLeaveByGold()
{
long gold = GameManager.Instance.user.assets.gold;
var roomConfigs = GameManager.Instance?.gameConfig?.roomConfigs;
if (roomConfigs == null || roomConfigs.Count == 0) return 1;
string gameTypeStr = ((int)currGameType).ToString();
for (int level = 3; level >= 2; level--)
{
var cfg = roomConfigs.Find(r => r.gameType.ToString() == gameTypeStr && r.roomLevel == level);
if (cfg != null && (cfg.roomGoldLimit <= 0 || gold >= cfg.roomGoldLimit))
return level;
}
return 1;
}
public static void StartGame(RoomChangeResponse o)
{
Dictionary<int,bool> keyValuePairs = new Dictionary<int,bool>();
for (int i = 0; i < o.maxPlayerCount; i++)
{
keyValuePairs.Add(i, true);
}
foreach (var item in o.players)
{
keyValuePairs[item.position] = false;
}
foreach(var item in keyValuePairs)
{
if (item.Value)
{
GameManager.Instance.StartGame(() =>
{
WebSocketSendList.JoinRoom(o.roomId, GameManager.Instance.user.id, item.Key);
});
break;
}
}
//这里写判断条件
}
public AudioClip audioClipHHWK;
public override void Show(object args = null)
{
base.Show(args);
if (args != null && args is GameType)
{
currGameType = (GameType)args;
GameManager.Instance.gameData.currGameType = currGameType;
switch (currGameType)
{
case GameType.JQQD:
break;
case GameType.defaultPanel:
break;
case GameType.FLZY:
AudioManager.Instance.ChangeBG(62025);
break;
case GameType.YYSC:
break;
case GameType.ZGXQ:
break;
case GameType.XJMH:
break;
case GameType.HHWK:
AudioManager.Instance.ChangeBG(61001);
AudioManager.Instance.ChangeBG(audioClipHHWK);
break;
default:
break;
}
if (currGameType!= GameType.JQQD)
{
GameObject LV1 = SelectRoom1.transform.GetChild(((int)currGameType)).gameObject;
LV1.SetActive(true);
var Lv1Item = LV1.GetComponent<SeccionItem>();
if (Lv1Item.txt_VenueInfo != null) Lv1Item.txt_VenueInfo.text = "初级场";
MySelectRoom1 = Lv1Item.btn_SelectGameRoom;
MySelectRoom1.onClick.RemoveAllListeners();
GameObject LV2 = SelectRoom2.transform.GetChild(((int)currGameType) ).gameObject;
LV2.SetActive(true);
var Lv2Item = LV2.GetComponent<SeccionItem>();
if (Lv2Item.txt_VenueInfo != null) Lv2Item.txt_VenueInfo.text = "中级场";
MySelectRoom2 = Lv2Item.btn_SelectGameRoom;
MySelectRoom2.onClick.RemoveAllListeners();
GameObject LV3 = SelectRoom3.transform.GetChild(((int)currGameType)).gameObject;
LV3.SetActive(true);
var Lv3Item = LV3.GetComponent<SeccionItem>();
if (Lv3Item.txt_VenueInfo != null) Lv3Item.txt_VenueInfo.text = "高级场";
MySelectRoom3 = Lv3Item.btn_SelectGameRoom;
// 入场条件:从 RoomConfig 读取 roomGoldLimit
var gameConfig = GameManager.Instance?.gameConfig;
var roomConfigs = gameConfig?.roomConfigs;
if (roomConfigs != null && roomConfigs.Count > 0)
{
string gameTypeStr = ((int)currGameType).ToString();
var lv1Cfg = roomConfigs.Find(r => r.gameType.ToString() == gameTypeStr && r.roomLevel == 1);
var lv2Cfg = roomConfigs.Find(r => r.gameType.ToString() == gameTypeStr && r.roomLevel == 2);
var lv3Cfg = roomConfigs.Find(r => r.gameType.ToString() == gameTypeStr && r.roomLevel == 3);
if (lv1Cfg != null && Lv1Item.txt_EntryCondition != null)
Lv1Item.txt_EntryCondition.text = string.Format("入场: {0:N0} 金币", lv1Cfg.roomGoldLimit);
if (lv2Cfg != null && Lv2Item.txt_EntryCondition != null)
Lv2Item.txt_EntryCondition.text = string.Format("入场: {0:N0} 金币", lv2Cfg.roomGoldLimit);
if (lv3Cfg != null && Lv3Item.txt_EntryCondition != null)
Lv3Item.txt_EntryCondition.text = string.Format("入场: {0:N0} 金币", lv3Cfg.roomGoldLimit);
}
MySelectRoom1.onClick.AddListener(() =>
{
if (!CanSelectRoom()) { ShowTiShi("手动选座需要充值VIP"); return; }
isMySelectRoom = true;
leave = 1;
OnSelectRoom(leave);
});
MySelectRoom2.onClick.AddListener(() =>
{
if (!CanSelectRoom()) { ShowTiShi("手动选座需要充值VIP"); return; }
isMySelectRoom = true;
leave = 2;
OnSelectRoom(leave);
});
MySelectRoom3.onClick.AddListener(() =>
{
if (!CanSelectRoom()) { ShowTiShi("手动选座需要充值VIP"); return; }
isMySelectRoom = true;
leave = 3;
OnSelectRoom(leave);
});
Lv1Item.btn_JoinGame.onClick.RemoveAllListeners();
Lv2Item.btn_JoinGame.onClick.RemoveAllListeners();
Lv3Item.btn_JoinGame.onClick.RemoveAllListeners();
Lv1Item.btn_JoinGame.onClick.AddListener(() =>
{
//StartGame(currGameType);
isMySelectRoom = false;
leave = 1;
OnSelectRoom(leave);
});
Lv2Item.btn_JoinGame.onClick.AddListener(() =>
{
isMySelectRoom = false;
leave = 2;
OnSelectRoom(leave);
});
Lv3Item.btn_JoinGame.onClick.AddListener(() =>
{
isMySelectRoom = false;
leave = 3;
OnSelectRoom(leave);
});
currUIDefault = ui_Default.transform.GetChild(((int)currGameType)).GetComponent<SelectGameLeave_DefaultUIItem>();
currUIDefault.gameObject.SetActive(true);
btn_Close = currUIDefault.btn_FanHui;
btn_Close.onClick.RemoveAllListeners();
btn_Close.onClick.AddListener(() =>
{
uIManager.Hide(this);
});
currUIDefault.btn_SheZhi.onClick.RemoveAllListeners();
currUIDefault.btn_SheZhi.onClick.AddListener(() =>
{
UIManager.Instance.Get<UIHomeMain>(UIPanel.HomeMainPanel).subUIManager.ShowAsync(UIPanel.SettingPanel);
});
currUIDefault.btn_StartQuickly.onClick.RemoveAllListeners();
currUIDefault.btn_StartQuickly.onClick.AddListener(() =>
{
isMySelectRoom = false;
leave = GetQuickStartLeaveByGold();
OnSelectRoom(leave);
});
currUIDefault.UpdateData(GameManager.Instance.user.BaseInfo.userName, GameManager.Instance.user.assets.gold.ToString(), GameManager.Instance.user.assets.diamond.ToString());
// 头像/头像框:初始加载 + 之后由事件自动刷新
GameManager.Instance.user.BaseInfo.UpdateAvatar((a) => { if (a != null) currUIDefault.sprite_Avatar.sprite = a; });
var frameSprite = GameManager.Instance.GetAvatarFrameSprite(GameManager.Instance.user.BaseInfo.avatarFrame);
if (currUIDefault.sprite_AvatarFrame != null && frameSprite != null)
currUIDefault.sprite_AvatarFrame.sprite = frameSprite;
}
}
}
public override void Hide()
{
base.Hide();
AudioManager.Instance.ChangeBG(69001);
//img_BG.color = new Color(1,1,1,0);
if (currGameType != GameType.JQQD)
{
SelectRoom1.transform.GetChild((int)currGameType).gameObject.SetActive(false);
SelectRoom2.transform.GetChild((int)currGameType).gameObject.SetActive(false);
SelectRoom3.transform.GetChild((int)currGameType).gameObject.SetActive(false);
ui_Default.transform.GetChild((int)currGameType).gameObject.SetActive(false);
currGameType = GameType.JQQD;
}
}
}