ro-webgl/Assets/Src/UI/UICore/Components/TestDanMuPlayer.cs
2026-01-26 10:41:22 +08:00

131 lines
3.6 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using TMPro;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
public class TestDanMuPlayer : MonoBehaviour
{
[Header("Component References")]
[SerializeField] private DanMuPlayer danMuPlayer;
[SerializeField] private Button sendBtn;
[SerializeField] private Button clearBtn;
[SerializeField] private Toggle loopToggle;
[SerializeField] private TMP_InputField inputField;
[SerializeField] private Button testBatchBtn;
[Header("Test Settings")]
[SerializeField] private int batchTestCount = 20;
[Header("Sample Danmaku Content")]
[SerializeField]
private List<string> sampleTexts = new List<string>()
{
"我也想要安娜",
"如何通关困难模式",
"这个游戏太好玩了",
"我喜欢休闲游戏",
"哪里能买到猫爪蛋糕",
"SP角色什么时候返场",
"需要强力的辅助角色",
"这抽卡概率是真的吗",
"我该优先培养哪个角色",
"求宿舍装修灵感"
};
[Header("Random Game Terms")]
[SerializeField]
private List<string> gameTerms = new List<string>()
{
"如何提高安娜的暴击率",
"队伍搭配推荐",
"这个活动BOSS太难了",
"每日任务速通攻略",
"强化材料不够用",
"公会还招人吗",
"这个皮肤值得买吗",
"哪里刷共鸣材料",
"卡在战力瓶颈了",
"好友系统需要改进"
};
private void Awake()
{
sendBtn.onClick.AddListener(OnSendClick);
clearBtn.onClick.AddListener(OnClearClick);
loopToggle.onValueChanged.AddListener(OnLoopToggleChanged);
testBatchBtn.onClick.AddListener(OnTestBatchClick);
}
void Start()
{
InitializeDemoDanmaku();
}
private void InitializeDemoDanmaku()
{
//danMuPlayer.Play(GetCombinedDanmakuList(), loopToggle.isOn);
}
private List<string> GetCombinedDanmakuList()
{
return sampleTexts.Concat(gameTerms.OrderBy(x => Random.value).Take(5)).ToList();
}
private void OnSendClick()
{
if (!string.IsNullOrEmpty(inputField.text))
{
string styledText = $"<color=#FF3366>{inputField.text}</color>";
danMuPlayer.LaunchUserDanmaku(styledText);
inputField.text = "";
}
}
private void OnClearClick()
{
danMuPlayer.ClearAllDanmakus();
}
private void OnLoopToggleChanged(bool isOn)
{
danMuPlayer.ToggleLoop(isOn);
if (isOn && danMuPlayer.GetLoopListCount() == 0)
{
//danMuPlayer.Play(GetCombinedDanmakuList(), true);
}
}
private void OnTestBatchClick()
{
StartCoroutine(SendBatchDanmaku());
}
private IEnumerator SendBatchDanmaku()
{
var combinedList = GetCombinedDanmakuList();
for (int i = 0; i < Mathf.Min(batchTestCount, combinedList.Count); i++)
{
string text = combinedList[i];
bool isUser = Random.value > 0.8f;
if (text.Contains("Anna") || text.Contains("cat paw cake"))
{
text = $"<size=36><color=#FF3366>{text}</color></size>";
}
if (isUser)
{
danMuPlayer.LaunchUserDanmaku($"<b>Player{i}:</b> {text}");
}
else
{
danMuPlayer.LaunchDanmaku($"System:{text}", true);
}
yield return new WaitForSeconds(Random.Range(0.05f, 0.15f));
}
}
}