440 lines
16 KiB
C#
Raw Normal View History

2025-04-18 19:18:15 +08:00
using UnityEngine;
using UnityEngine.UI;
using TEngine;
using System.Collections.Generic;
using GameConfig.giftConfig;
using System.Threading.Tasks;
using Cysharp.Threading.Tasks;
2025-04-24 16:50:21 +08:00
using TMPro;
2025-05-07 15:16:19 +08:00
using Coffee.UIExtensions;
2025-05-17 15:34:51 +08:00
using UnityEngine.Video;
2025-04-18 19:18:15 +08:00
namespace GameLogic
{
2025-04-24 16:50:21 +08:00
[Window(UILayer.UI)]
class UIGameBattle : UIWindow
{
#region
2025-05-19 17:28:34 +08:00
private RectTransform m_rectSdx;
private RectTransform m_rectSceneFx;
private RectTransform m_rectSpeed;
private RectTransform m_rectBgList;
2025-05-09 16:53:47 +08:00
private Image m_img_BT;
2025-04-24 16:50:21 +08:00
private TextMeshProUGUI m_tmpTimer;
private TextMeshProUGUI m_tmpWinPoint;
private TextMeshProUGUI m_tmpScoreAll;
private Button m_btnSetting;
private Button m_btnRank;
private RectTransform m_rectHPanel;
private GameObject m_itemActorHItem;
2025-05-08 23:23:31 +08:00
private RectTransform m_rect_GiftPanel;
private RawImage m_rimgHeadIcon;
private TextMeshProUGUI m_tmpPlayName;
private TextMeshProUGUI m_tmpTeamName;
private TextMeshProUGUI m_tmpGiftMsg;
private Image m_imgGiftImg;
private TextMeshProUGUI m_tmpCount;
2025-05-17 15:34:51 +08:00
private RawImage m_rimg_ViewTexture;
private VideoPlayer m_video_Video;
2025-05-26 23:23:18 +08:00
private Button m_btn_StartBtn;
2025-04-24 16:50:21 +08:00
protected override void ScriptGenerator()
{
2025-05-19 17:28:34 +08:00
m_rectSdx = FindChildComponent<RectTransform>("Bg/m_rectSdx");
m_rectSceneFx = FindChildComponent<RectTransform>("Bg/m_rectSceneFx");
m_rectSpeed = FindChildComponent<RectTransform>("Bg/m_rectSpeed");
m_rectBgList = FindChildComponent<RectTransform>("Bg/m_rectBgList");
2025-05-09 16:53:47 +08:00
m_img_BT = FindChildComponent<Image>("Bg/Top/m_img_BT");
m_tmpTimer = FindChildComponent<TextMeshProUGUI>("Bg/Top/m_img_BT/m_tmpTimer");
m_tmpWinPoint = FindChildComponent<TextMeshProUGUI>("Bg/Top/m_img_BT/m_tmpWinPoint");
m_tmpScoreAll = FindChildComponent<TextMeshProUGUI>("Bg/Top/m_img_BT/m_tmpScoreAll");
2025-04-24 16:50:21 +08:00
m_btnSetting = FindChildComponent<Button>("Bg/Top/m_btnSetting");
m_btnRank = FindChildComponent<Button>("Bg/Top/m_btnRank");
m_rectHPanel = FindChildComponent<RectTransform>("Bg/Main/m_rectHPanel");
m_itemActorHItem = FindChild("Bg/Main/m_rectHPanel/m_itemActorHItem").gameObject;
2025-05-08 23:23:31 +08:00
m_rect_GiftPanel = FindChildComponent<RectTransform>("Bg/m_rect_GiftPanel");
m_rimgHeadIcon = FindChildComponent<RawImage>("Bg/m_rect_GiftPanel/GiftItem/Item/Mask/m_rimgHeadIcon");
m_tmpPlayName = FindChildComponent<TextMeshProUGUI>("Bg/m_rect_GiftPanel/GiftItem/Item/m_tmpPlayName");
m_tmpTeamName = FindChildComponent<TextMeshProUGUI>("Bg/m_rect_GiftPanel/GiftItem/Item/m_tmpTeamName");
m_tmpGiftMsg = FindChildComponent<TextMeshProUGUI>("Bg/m_rect_GiftPanel/GiftItem/Item/m_tmpGiftMsg");
m_imgGiftImg = FindChildComponent<Image>("Bg/m_rect_GiftPanel/GiftItem/Item/m_imgGiftImg");
m_tmpCount = FindChildComponent<TextMeshProUGUI>("Bg/m_rect_GiftPanel/GiftItem/Item/m_tmpCount");
2025-05-17 15:34:51 +08:00
m_rimg_ViewTexture = FindChildComponent<RawImage>("Bg/BattleBg/m_rimg_ViewTexture");
m_video_Video = FindChildComponent<VideoPlayer>("Bg/BattleBg/m_video_Video");
2025-05-26 23:23:18 +08:00
m_btn_StartBtn = FindChildComponent<Button>("Bg/m_btn_StartBtn");
2025-04-24 16:50:21 +08:00
m_btnSetting.onClick.AddListener(OnClickSettingBtn);
m_btnRank.onClick.AddListener(OnClickRankBtn);
2025-05-26 23:23:18 +08:00
m_btn_StartBtn.onClick.AddListener(OnClick_StartBtnBtn);
2025-04-24 16:50:21 +08:00
}
#endregion
#region
2025-05-26 23:23:18 +08:00
private void OnClick_StartBtnBtn()
{
// 游戏状态
DataGameSceneManager.Instance.SetGameState(true);
m_btn_StartBtn.gameObject.SetActive(false);
}
2025-04-24 16:50:21 +08:00
private void OnClickSettingBtn()
{
GameModule.UI.ShowUI<UISettingForm>();
}
private async void OnClickRankBtn()
{
2025-05-19 17:28:34 +08:00
GameModule.UI.ShowUI<UIGameWorldRankForm>();
2025-04-24 16:50:21 +08:00
}
#endregion
private Dictionary<RectTransform, Vector2> targetPositions = new Dictionary<RectTransform, Vector2>();
private float animationSpeed = 150f; // Adjust this value to control the speed of the animation
protected override void OnCreate()
{
base.OnCreate();
2025-05-26 23:23:18 +08:00
// 游戏状态
//DataGameSceneManager.Instance.SetGameState(true);
2025-04-24 16:50:21 +08:00
// 刷新
UpdateGameTiemr();
UpdateGameScoreValue();
2025-04-24 16:50:21 +08:00
//RestHItemFunc();
2025-05-26 23:27:19 +08:00
2025-04-24 16:50:21 +08:00
// 创建横板列表
for (int i = 0; i < DataGameSceneManager.Instance.m_Strs.Count; i++)
{
ActorHItem actorHItem = CreateWidgetByPrefab<ActorHItem>(m_itemActorHItem, m_rectHPanel);
var r = actorHItem.gameObject.GetComponent<RectTransform>();
// 计算位置
r.anchorMin = new Vector2(0.5f, 0.5f);
r.anchorMax = new Vector2(0.5f, 0.5f);
2025-05-20 03:01:37 +08:00
r.anchoredPosition = new Vector2(0, 435 - 65 - i * (109 - 5f));
r.localPosition = new Vector3(r.localPosition.x, r.localPosition.y, 0);
actorHItem.OnInit(i);
2025-04-25 14:37:15 +08:00
DataGameSceneManager.Instance.m_DicTeamList.Add((i + 1).ToString(), actorHItem);
DataGameSceneManager.Instance.m_TeamSortList.Add(actorHItem);
}
2025-04-24 16:50:21 +08:00
}
protected override void OnUpdate()
{
base.OnUpdate();
2025-05-26 23:23:18 +08:00
if (!DataGameSceneManager.Instance.GetGameState())
{
return;
}
2025-04-24 16:50:21 +08:00
UpdateGameTiemr();
UpdateGameScoreValue();
UpdateHItem();
// Move each HItemActor towards its target position
foreach (var kvp in targetPositions)
{
if (kvp.Key == null)
{
continue;
}
var rectTransform = kvp.Key;
var targetPosition = kvp.Value;
float distance = Vector2.Distance(rectTransform.localPosition, targetPosition);
float speed = distance / 0.2f; // Calculate speed to ensure movement completes in 1 second
rectTransform.localPosition = Vector2.MoveTowards(rectTransform.localPosition, targetPosition, speed * Time.deltaTime);
}
2025-04-28 15:07:13 +08:00
DataGameSceneManager.Instance.m_TeamSortList.Sort((a, b) =>
{
if (a.GetAllPower() > b.GetAllPower())
{
return -1;
}
else
{
return 1;
}
});
2025-05-04 21:26:33 +08:00
2025-04-24 16:50:21 +08:00
}
protected override void RegisterEvent()
{
base.RegisterEvent();
GameEvent.AddEventListener(EventConts.RestGameBattle, RestGameBattleFunc);
2025-05-07 15:16:19 +08:00
GameEvent.AddEventListener<GiftConfig>(EventConts.TtqEffectCreate, TtqEffectCreateFunc);
2025-04-24 16:50:21 +08:00
GameEvent.AddEventListener<UnitPlayerData>(EventConts.AddPlayer, AddPlayerFunc);
GameEvent.AddEventListener(EventConts.SwitchTeamId, SwitchTeamIdFunc);
2025-06-03 21:54:52 +08:00
GameEvent.AddEventListener(EventConts.HuangJinGameEnd, HuangJinGameEndFunc);
2025-04-24 16:50:21 +08:00
GameEvent.AddEventListener<UnitPlayerData, GiftConfig, int>(EventConts.AddGiftMessage, AddGiftMessageFunc);
}
protected override void OnDestroy()
{
base.OnDestroy();
GameEvent.RemoveEventListener(EventConts.RestGameBattle, RestGameBattleFunc);
2025-05-07 15:16:19 +08:00
GameEvent.RemoveEventListener<GiftConfig>(EventConts.TtqEffectCreate, TtqEffectCreateFunc);
2025-04-24 16:50:21 +08:00
GameEvent.RemoveEventListener<UnitPlayerData>(EventConts.AddPlayer, AddPlayerFunc);
GameEvent.RemoveEventListener(EventConts.SwitchTeamId, SwitchTeamIdFunc);
2025-06-03 21:54:52 +08:00
GameEvent.RemoveEventListener(EventConts.HuangJinGameEnd, HuangJinGameEndFunc);
2025-04-24 16:50:21 +08:00
GameEvent.RemoveEventListener<UnitPlayerData, GiftConfig, int>(EventConts.AddGiftMessage, AddGiftMessageFunc);
}
2025-06-03 21:54:52 +08:00
/// <summary>
/// 黄金时代结束
/// </summary>
private void HuangJinGameEndFunc()
{
int teamId = DataGameSceneManager.Instance.m_TeamId;
// 先播放视频
string videoName = ConfigSystem.Instance.Tables.TbTeamConfig.Get(teamId).VideoName;
m_video_Video.loopPointReached += (v) =>
{
// 弹个UI窗口
// 创建itme 实时更新进度条显示
};
}
private void SwitchTeamIdFunc()
{
2025-05-17 15:34:51 +08:00
int teamId = DataGameSceneManager.Instance.m_TeamId;
2025-05-17 15:34:51 +08:00
2025-05-20 02:11:32 +08:00
if (teamId != 1)
{
// 先播放视频
string videoName = "Scene_" + (teamId + 1);
m_video_Video.loopPointReached += (v) =>
{
for (int i = 0; i < m_rectBgList.childCount; i++)
{
m_rectBgList.GetChild(i).gameObject.SetActive(false);
}
for (int i = 0; i < m_rectSdx.childCount; i++)
{
m_rectSdx.GetChild(i).gameObject.SetActive(false);
}
for (int i = 0; i < m_rectSceneFx.childCount; i++)
{
m_rectSceneFx.GetChild(i).gameObject.SetActive(false);
}
for (int i = 0; i < m_rectSpeed.childCount; i++)
{
m_rectSpeed.GetChild(i).gameObject.SetActive(false);
}
if (teamId > m_rectBgList.childCount)
{
Log.Error("背景Id错误" + teamId);
return;
}
m_rectBgList.GetChild(teamId).gameObject.SetActive(true);
m_rectSdx.GetChild(teamId).gameObject.SetActive(true);
m_rectSceneFx.GetChild(teamId).gameObject.SetActive(true);
m_rectSpeed.GetChild(teamId).gameObject.SetActive(true);
// 替换UI图
SwitchUIResource();
};
// 播放音频
var videoAudioName = "csm_audios";
GameModule.Audio.Play(TEngine.AudioType.Sound, videoAudioName, false, 0.5f, true);
var videoClip = GameModule.Resource.LoadAsset<VideoClip>(videoName);
m_video_Video.clip = videoClip;
m_video_Video.Play();
}
else
{
2025-05-17 15:34:51 +08:00
for (int i = 0; i < m_rectBgList.childCount; i++)
{
m_rectBgList.GetChild(i).gameObject.SetActive(false);
}
for (int i = 0; i < m_rectSdx.childCount; i++)
{
m_rectSdx.GetChild(i).gameObject.SetActive(false);
}
for (int i = 0; i < m_rectSceneFx.childCount; i++)
{
m_rectSceneFx.GetChild(i).gameObject.SetActive(false);
}
for (int i = 0; i < m_rectSpeed.childCount; i++)
{
m_rectSpeed.GetChild(i).gameObject.SetActive(false);
}
2025-05-17 15:34:51 +08:00
if (teamId > m_rectBgList.childCount)
{
Log.Error("背景Id错误" + teamId);
return;
}
m_rectBgList.GetChild(teamId).gameObject.SetActive(true);
m_rectSdx.GetChild(teamId).gameObject.SetActive(true);
m_rectSceneFx.GetChild(teamId).gameObject.SetActive(true);
m_rectSpeed.GetChild(teamId).gameObject.SetActive(true);
2025-05-17 15:34:51 +08:00
// 替换UI图
SwitchUIResource();
2025-05-20 02:11:32 +08:00
}
2025-05-17 15:34:51 +08:00
2025-05-17 16:10:26 +08:00
2025-05-09 16:41:00 +08:00
}
2025-04-24 16:50:21 +08:00
private void AddPlayerFunc(UnitPlayerData unitPlayerData)
{
2025-05-09 00:35:25 +08:00
// 显示加入UI
var jiaRuItem = GameObject.Instantiate(m_rect_GiftPanel.transform.GetChild(1));
jiaRuItem.transform.SetParent(m_rect_GiftPanel);
jiaRuItem.transform.localScale = Vector3.one;
jiaRuItem.transform.localPosition = Vector3.zero;
2025-05-09 00:35:25 +08:00
jiaRuItem.gameObject.SetActive(true);
jiaRuItem.GetComponent<UIJiaRuItem>().OnInit(unitPlayerData);
2025-04-24 16:50:21 +08:00
}
2025-05-30 17:11:34 +08:00
public GameObject m_TestEgo = null;
2025-05-07 15:16:19 +08:00
/// <summary>
/// 甜甜圈特效
/// </summary>
2025-05-27 20:31:55 +08:00
private async void TtqEffectCreateFunc(GiftConfig giftConfig)
2025-05-07 15:16:19 +08:00
{
2025-05-27 20:31:55 +08:00
2025-05-30 17:11:34 +08:00
// 判断场景是否存在这个资源
if (m_TestEgo != null)
{
return;
}
else
{
var m_Ego = GameModule.Resource.LoadGameObject("TTQ01");
m_TestEgo = m_Ego;
m_Ego.transform.SetParent(this.transform);
m_Ego.transform.localPosition = Vector3.zero;
m_Ego.transform.localScale = Vector3.one;
// 设置时间消失
await UniTask.Delay(giftConfig.TimerLen * 1000);
GameObject.Destroy(m_Ego);
m_TestEgo = null;
}
2025-05-27 20:31:55 +08:00
2025-05-07 15:16:19 +08:00
}
2025-04-24 16:50:21 +08:00
private async void AddGiftMessageFunc(UnitPlayerData unitPlayerData, GiftConfig giftConfig, int num)
{
2025-05-08 23:23:31 +08:00
var giftItem = GameObject.Instantiate(m_rect_GiftPanel.transform.GetChild(0));
giftItem.transform.SetParent(m_rect_GiftPanel);
giftItem.transform.localScale = Vector3.one;
giftItem.transform.localPosition = Vector3.zero;
giftItem.gameObject.SetActive(true);
giftItem.GetComponent<UIGiftItem>().OnInit(unitPlayerData, giftConfig, num);
2025-04-24 16:50:21 +08:00
}
/// <summary>
/// 收到游戏重开的消息
/// </summary>
private void RestGameBattleFunc()
{
}
2025-05-09 16:53:47 +08:00
/// <summary>
/// 基于朝代切换资源
/// </summary>
private void SwitchUIResource()
{
2025-05-17 15:34:51 +08:00
m_img_BT.sprite = GameModule.Resource.LoadAsset<Sprite>(string.Format("zjm_{0}_BT", DataGameSceneManager.Instance.m_TeamId + 1));
2025-05-09 19:19:17 +08:00
m_img_BT.SetNativeSize();
2025-05-09 16:53:47 +08:00
}
2025-04-24 16:50:21 +08:00
/// <summary>
/// 更新游戏时间
/// </summary>
private void UpdateGameTiemr()
{
// 计算分钟和剩余秒数
int minutes = (int)DataGameSceneManager.Instance.m_GameTimerLen / 60;
int remainingSeconds = (int)DataGameSceneManager.Instance.m_GameTimerLen % 60;
// 返回格式化的字符串
m_tmpTimer.text = $"{minutes}:{remainingSeconds:D2}";
}
/// <summary>
/// 更新游戏公用数据
/// </summary>
private void UpdateGameScoreValue()
{
// 积分池更新
m_tmpScoreAll.text = UITool.ConvertToString(DataGameSceneManager.Instance.ScoreAllValue);
// 胜点池
m_tmpWinPoint.text = UITool.ConvertToString(DataGameSceneManager.Instance.WinAllValue);
}
/// <summary>
/// 更新横版排版移动
/// </summary>
private void UpdateHItem()
{
// Create a list to hold the HItemActors and their scores
2025-05-07 20:54:39 +08:00
List<(ActorHItem actor, double score)> hItemActors = new List<(ActorHItem, double)>();
2025-04-24 16:50:21 +08:00
// Populate the list with HItemActors and their scores
for (int i = 0; i < m_rectHPanel.childCount; i++)
{
if (i < DataGameSceneManager.Instance.m_TeamSortList.Count)
{
2025-04-28 15:07:13 +08:00
var hItemActor = DataGameSceneManager.Instance.m_DicTeamList[(i + 1).ToString()];
2025-05-07 20:54:39 +08:00
double score = hItemActor.GetAllPower(); // Assume GetScore() returns the score of the actor
hItemActors.Add((hItemActor, score));
}
}
2025-04-24 16:50:21 +08:00
// Sort the list based on scores in descending order
hItemActors.Sort((a, b) => b.score.CompareTo(a.score));
// Set the target positions for the HItemActors based on their new order
for (int i = 0; i < hItemActors.Count; i++)
{
2025-05-27 20:31:55 +08:00
var hItemActor = hItemActors[i].actor;
2025-05-28 23:08:14 +08:00
//hItemActor.m_Index = i;
var rectTransform = hItemActor.gameObject.GetComponent<RectTransform>();
2025-05-20 03:01:37 +08:00
Vector2 targetPosition = new Vector2(0, 435 - i * (109 - 5f));
targetPositions[rectTransform] = targetPosition;
}
2025-04-24 16:50:21 +08:00
}
}
2025-04-18 19:18:15 +08:00
}