大侠
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

433 lines
16 KiB

//#region 文件引入
import { _decorator, Button, Component, Label, Node, sp, Sprite,Animation, RichText, EditBox, UITransform, Color, Layers } from "cc";
import BaseUIForm from "../../Mgr_UI/BaseUIForm";
import { MainConfig } from "db://assets/Launch/_MainConfig";
import { GameTotalType, PropType } from "../../const/GameEnum";
import GDUtils from "../../ExCUtils/GDUtils";
import { Global } from "../../Global";
import MesMgr from "../../MesEvent/MesMgr";
import { EGlobalEvent } from "../../MesEvent/EGlobalEvent";
import UIMgr from "../../Mgr_UI/UIMgr";
import { MUTATE_PARAMS } from "../../const/GGameData";
//#endregion 文件引入
const {ccclass, property,menu} = _decorator;
@ccclass("DebugUI_Proxy")
export default class DebugUI_Proxy extends BaseUIForm{
//#region 节点自动生成
@property(Node)
n_gm: Node = null;
@property(Button)
btn_NoAd: Button = null;
@property(Label)
lab_ad: Label = null;
@property(Button)
btn_Send: Button = null;
@property(Button)
btn_uplv: Button = null;
@property(Button)
btn_downlv: Button = null;
@property(Button)
btn_level: Button = null;
@property(Button)
btn_passedlevel: Button = null;
@property(Button)
btn_addcoin: Button = null;
@property(Button)
btn_addcoin2: Button = null;
@property(Button)
btn_addcoin3: Button = null;
@property(Button)
btn_addcoin4: Button = null;
@property(Button)
btn_addcoin5: Button = null;
@property(Button)
btn_addcoin6: Button = null;
@property(Button)
btn_addcoin7: Button = null;
@property(Button)
btn_ok: Button = null;
@property(Button)
btn_no: Button = null;
@property(Button)
btn_ResetTrial: Button = null;
@property(Button)
btn_func1: Button = null;
@property(Button)
btn_func2: Button = null;
@property(Button)
btn_open: Button = null;
//#endregion 节点自动生成
@property(EditBox)
ed_itemid: EditBox = null;
@property(EditBox)
ed_itemnum: EditBox = null;
@property(EditBox)
ed_level: EditBox = null;
@property(EditBox)
ed_coin: EditBox = null;
@property(EditBox)
ed_coin2: EditBox = null;
@property(EditBox)
ed_coin3: EditBox = null;
@property(EditBox)
ed_fun: EditBox = null;
@property(Node)
searchResultsParent:Node = null;
private searchResultNodes: Node[] = []; // 存储搜索结果节点
private debounceTimer: ReturnType<typeof setTimeout> | null = null; // 防抖定时器
onButtonClick(button:Button){
/**点击事件触发*/
switch (button) {
case this.btn_NoAd:
MainConfig.isNoAD = !MainConfig.isNoAD;
this.lab_ad.string = MainConfig.isNoAD ? "关" : "开";
break;
case this.btn_Send:
this.onSendItem();
break;
case this.btn_ResetTrial:
this.mDataMgr.Trial.ClearData();
break;
case this.btn_addcoin:
const coin = Number(this.ed_coin.string);
if(coin){
this.mDataMgr.Token.addToken(PropType.eGold,coin);
}
break;
case this.btn_addcoin2:
const coin2 = Number(this.ed_coin.string);
if(coin2){
this.mDataMgr.Token.addToken(PropType.eAdopt,coin2);
}
break;
case this.btn_addcoin3:
const coin3 = Number(this.ed_coin.string);
if(coin3){
this.mDataMgr.Token.addToken(PropType.eTaiJi,coin3);
}
break;
case this.btn_addcoin4:
const coin4 = Number(this.ed_coin.string);
if(coin4){
this.mDataMgr.Token.addToken(PropType.eJXStone,coin4);
}
break;
case this.btn_addcoin5:
const coin5 = Number(this.ed_coin.string);
if(coin5){
this.mDataMgr.Token.addToken(PropType.eZRStone,coin5);
}
break;
case this.btn_addcoin6:
const coin6 = Number(this.ed_coin.string);
if(coin6){
this.mDataMgr.Token.addToken(PropType.eQRYStone,coin6);
}
break;
case this.btn_addcoin7:
const coin7 = Number(this.ed_coin.string);
if(coin7){
this.mDataMgr.Token.addToken(PropType.eSLStone,coin7);
}
break;
case this.btn_func1:
const fun1 = Number(this.ed_fun.string);
if(fun1){
this.mDataMgr.Game.FreeChallengeTimes = fun1;
}
break;
case this.btn_func2:
const fun2 = Number(this.ed_fun.string);
if(this.ed_fun.string.length > 0){
const level = this.mDataMgr.Scene.level;
this.mDataMgr.Mutate.triggerMTFightByGM(level.boss.config, true, fun2);
}
break;
case this.btn_open:
// this.n_gm.active = !this.n_gm.active;
this.CloseUI();
break;
case this.btn_level:
const level = parseInt(this.ed_level.string);
if(level && level > 0){
if(level > 21){
UIMgr.Ins.ShowTipsUI("已超过最大关卡序号")
}
const finalLevel = level > 21 ? 21 : level;
this.mDataMgr.Scene.level.task_count = 0;
this.mDataMgr.Scene.level.id = finalLevel;
// 异兽解锁检查
if (!this.mDataMgr.Mutate.unlock && this.mDataMgr.Scene.level.id === MUTATE_PARAMS.UNLOCK_LEVEL){
this.mDataMgr.Mutate.unlockMT();
}
this.mDataMgr.Scene.onSummaryComplete(true);
}
break;
case this.btn_uplv:
this.mDataMgr.Scene.level.task_count = 0;
this.mDataMgr.Scene.level.id -= 1;
this.mDataMgr.Scene.onSummaryComplete(true);
break;
case this.btn_downlv:
this.mDataMgr.Scene.level.task_count = 0;
this.mDataMgr.Scene.level.id += 1;
// 异兽解锁检查
if (!this.mDataMgr.Mutate.unlock && this.mDataMgr.Scene.level.id === MUTATE_PARAMS.UNLOCK_LEVEL){
this.mDataMgr.Mutate.unlockMT();
}
this.mDataMgr.Scene.onSummaryComplete(true);
break;
case this.btn_passedlevel:
this.onPassedGame();
break;
default:
ConsoleEx.Log(button);
break;
}
}
protected start(): void {
this.lab_ad.string = MainConfig.isNoAD ? "关" : "开";
this.ed_itemid.node.on(EditBox.EventType.TEXT_CHANGED, this.onItemSearchInputChanged, this);
CNodeUtils.setActive(this.btn_ResetTrial, MainConfig.isTrialOpen)
CNodeUtils.setActive(this.btn_addcoin4, MainConfig.isTrialOpen)
CNodeUtils.setActive(this.btn_addcoin5, MainConfig.isTrialOpen)
CNodeUtils.setActive(this.btn_addcoin6, MainConfig.isTrialOpen)
}
private onItemSearchInputChanged() {
if (this.debounceTimer) {
clearTimeout(this.debounceTimer);
}
this.debounceTimer = setTimeout(() => {
this.performItemSearch();
}, 300);
}
// 执行物品搜索
private performItemSearch() {
const inputText = this.ed_itemid.string.trim();
if (!inputText) {
this.hideSearchResults();
return;
}
// 模糊匹配物品
const allItems = Global.CsvMgr.Items_csv;
const matchingItems = [];
for (const itemId in allItems) {
const item = allItems[itemId];
if (item.name && typeof item.name === 'string' &&
item.name.toLowerCase().includes(inputText.toLowerCase())) {
matchingItems.push({
id: parseInt(itemId),
name: item.name
});
// 限制最多显示15个结果
if (matchingItems.length >= 15) {
break;
}
}
}
// 显示搜索结果
this.showSearchResults(matchingItems);
}
private showSearchResults(matchingItems: Array<{id: number, name: string}>) {
console.log(`找到 ${matchingItems.length} 个匹配项`, matchingItems);
this.clearSearchResults();
if (matchingItems.length === 0) {
console.log("没有匹配项,隐藏搜索结果");
this.hideSearchResults();
return;
}
const parentUITransform = this.searchResultsParent.getComponent(UITransform);
this.searchResultsParent.active = true;
const inputWorldPos= this.ed_itemid.node.worldPosition;
const inputUITransform = this.ed_itemid.node.getComponent(UITransform);
if (inputUITransform) {
this.searchResultsParent.setWorldPosition(
inputWorldPos.x,
inputWorldPos.y - inputUITransform.height / 2 - parentUITransform.height / 2, // 在输入框下方
inputWorldPos.z
);
}
// 创建搜索结果节点
// 创建搜索结果节点
for (let i = 0; i < matchingItems.length; i++) {
const item = matchingItems[i];
// 创建背景底板节点
const bgNode = new Node(`Bg_${i}`);
bgNode.layer = Layers.Enum.UI_2D;
const bgUITransform = bgNode.addComponent(UITransform);
// 设置底板大小(使用父节点的宽度,高度固定)
if (parentUITransform) {
bgUITransform.width = parentUITransform.width - 10; // 留一点边距
bgUITransform.height = 30;
} else {
bgUITransform.width = 300;
bgUITransform.height = 30;
}
bgNode.setPosition(0, -i * 35, 0); // 设置位置,留出间距
// 创建按钮节点
const button = new Node(`BUTTON_${i}`);
button.layer = Layers.Enum.UI_2D;
const buttonUITransform = button.addComponent(UITransform);
buttonUITransform.width = bgUITransform.width;
buttonUITransform.height = bgUITransform.height;
button.addComponent(Button);
// 添加标签显示物品名称
const label = button.addComponent(Label);
label.string = `${item.name} (ID: ${item.id})`; // 显示名称和ID
label.color = Color.BLACK;
label.fontSize = 40; // 适当减小字体以适应空间
// label.overflow = Label.Overflow.RESIZE_HEIGHT;
// 设置按钮的交互效果
const buttonComponent = button.getComponent(Button);
buttonComponent.transition = Button.Transition.COLOR; // 颜色变化过渡
buttonComponent.normalColor = Color.BLACK; // 正常状态颜色
buttonComponent.pressedColor = Color.RED; // 按下状态颜色
buttonComponent.hoverColor = Color.RED; // 悬停状态颜色
// 绑定点击事件
button.on(Button.EventType.CLICK, () => {
this.selectSearchResult(item.name, item.id);
}, this);
// 将按钮作为背景节点的子节点
button.parent = bgNode;
// 添加到底板父节点
bgNode.parent = this.searchResultsParent;
this.searchResultNodes.push(bgNode); // 将背景节点加入数组,方便清理
}
console.log("搜索结果显示完成,共创建", matchingItems.length, "个结果节点");
}
// 选择搜索结果
private selectSearchResult(name: string, id: number) {
// 将选中的物品名称填入输入框
if (this.ed_itemid) {
this.ed_itemid.string = name;
}
// 隐藏搜索结果
this.hideSearchResults();
}
// 清空搜索结果
private clearSearchResults() {
for (const node of this.searchResultNodes) {
if (node && node.isValid) {
node.destroy();
}
}
this.searchResultNodes = [];
}
private hideSearchResults() {
// 清空搜索结果
this.clearSearchResults();
// 隐藏父节点
if (this.searchResultsParent) {
this.searchResultsParent.active = false;
}
} onSendItem(){
const inputText = this.ed_itemid.string.trim();
const num = parseInt(this.ed_itemnum.string) || 1;
if (!inputText) {
UIMgr.Ins.ShowTipsUI("请输入物品ID或名称");
return;
}
if (!num) {
UIMgr.Ins.ShowTipsUI("请输入正确的数量");
return;
}
// 查找物品ID
let itemId = parseInt(inputText);
// 如果输入的是纯数字,直接使用
if (isNaN(itemId)) {
// 否则通过名称查找
const allItems = Global.CsvMgr.Items_csv;
for (const id in allItems) {
const item = allItems[id];
if (item.name === inputText) {
itemId = parseInt(id);
break;
}
}
}
if (itemId && itemId > 0) {
const itemData = Global.CsvMgr.Items_csv[itemId];
if (itemData) {
GDUtils.DistributeRewards({id: itemId, num: num, type: GameTotalType.ITEM});
UIMgr.Ins.ShowTipsUI(`已发送物品: ${itemData.name}, 数量: ${num}`);
} else {
UIMgr.Ins.ShowTipsUI(`未找到物品ID: ${itemId}`);
}
} else {
UIMgr.Ins.ShowTipsUI(`无效的物品ID或名称: ${inputText}`);
}
// 隐藏搜索结果
this.hideSearchResults();
}
// 通关,进入下一周目
onPassedGame(){
// this.n_gm.active = false;
// 关卡
const levelKeys = Object.keys(Global.CsvMgr.Level_csv);
const lastLevelId = Number(levelKeys[levelKeys.length - 1]);
this.mDataMgr.Scene.level.id = lastLevelId + 1;
this.mDataMgr.Scene.level.task_count = 0;
this.mDataMgr.Scene.level.passed = true;
this.mDataMgr.Scene.isPassedState = true;
// 任务
const taskKeys = Object.keys(Global.CsvMgr.tasks_csv);
const lastTaskId = Number(taskKeys[taskKeys.length - 1]);
this.mDataMgr.Task.task.id = lastTaskId.toString();
this.mDataMgr.Scene.refreshTaskProgress();
this.mDataMgr.Scene.onSummaryComplete(true);
// 异兽解锁检查
if (!this.mDataMgr.Mutate.unlock && this.mDataMgr.Scene.level.id === MUTATE_PARAMS.UNLOCK_LEVEL){
this.mDataMgr.Mutate.unlockMT();
}
// 首次通关,奖励一个玄武符
if(this.mDataMgr.Pass.passed_times === 1){
this.mDataMgr.Token.addToken(PropType.eAdopt, 1);
UIMgr.Ins.ShowTipsUI("恭喜首次通关,奖励:玄武符+1");
}else{
UIMgr.Ins.ShowTipsUI("恭喜通关!!");
}
// this.CloseUI();
}
}