SamsaraGame/assets/Script/ts/horse/RefiningAlert.ts
2025-04-24 17:03:28 +08:00

193 lines
6.5 KiB
TypeScript

import GameModel from "../core/GameModel";
import GameUtil from "../core/GameUtil";
import ItemUtil from "../core/ItemUtil";
import MsgAlert from "../game/msg/MsgAlert";
import SkillBase, { ESkillQuality } from "../game/skill/core/SkillBase";
import SkillUtil from "../game/skill/core/SkillUtil";
import FGUtil from "../gear_2.3.4/fgui/FGUtil";
import SKDataUtil from "../gear_2.3.4/util/SKDataUtil";
import SKUIUtil from "../gear_2.3.4/util/SKUIUtil";
export enum RefiningOperate {
REFINING = 1,
REPLACE = 2,
}
export default class RefiningAlert {
static shared = new RefiningAlert();
main: fgui.GComponent;
alert: fgui.GComponent;
horseIndex: number = 1;
canReplace: boolean = false;
locks: number[];
show() {
this.loadUI();
}
hide() {
FGUtil.dispose(this.main);
this.main = null;
}
loadUI() {
FGUtil.dispose(this.main);
this.main = fgui.UIPackage.createObject("main_ui", "refining").asCom;
FGUtil.root().addChild(this.main);
FGUtil.fitScreen(this.main);
this.alert = FGUtil.getComponent(this.main, "alert");
// FGUtil.onClick(this.alert,"close_btn",this.hide,this);
this.alert.getChild("close_btn").onClick(this.hide, this);
this.locks = [];
for (let i = 1; i <= 3; i++) {
let left = FGUtil.getButton(this.alert, `left/content/skill_${i}`);
left.data = i - 1;
left.touchable = false;
if (GameModel.player.hideIconList["lock"] == 0) {
} else {
left.touchable = true;
left.onClick(this.onClickLeftCell, this);
}
let right = FGUtil.getButton(this.alert, `right/content/skill_${i}`);
right.touchable = false;
this.locks.push[0];
}
FGUtil.getComponent(this.alert, "left/content").visible = true;
FGUtil.getComponent(this.alert, "left/tip").visible = false;
FGUtil.getButton(this.alert, "sure_btn").onClick(this.clickSure, this);
FGUtil.getButton(this.alert, "refining_btn").onClick(this.clickRefining, this);
FGUtil.getTextField(this.alert, "right/content/title").text = "新天資";
this.reset();
let tip = FGUtil.getTextField(this.main, "alert/lock_tip");
tip.text = "點擊左側屬性條可以鎖住屬性不替換!";
}
/**點擊坐騎技能 */
onClickLeftCell(event: fgui.Event) {
let cell = fgui.GObject.cast(event.currentTarget).asButton;
let total = 0;
for (let lock of this.locks) {
if (lock == 1) {
total++;
}
}
let index = cell.data;
if (cell.selected && total >= 2) {
MsgAlert.addMsg(`您最多只能鎖住兩條技能進行替換!`);
cell.selected = false;
return;
}
this.locks[index] = (cell.selected ? 1 : 0);
total = 0;
for (let lock of this.locks) {
if (lock == 1) {
total++;
}
}
let tip = FGUtil.getTextField(this.main, "alert/lock_tip");
if (total < 1) {
tip.text = "點擊左側屬性條可以鎖住屬性不替換!";
} else {
total = SKDataUtil.clamp(total, 1, 2);
tip.text = `鎖住${total}條技能,消耗${GameUtil.lockJade[total - 1]}坐騎鎖`;
}
}
clickSure(event: fgui.Event) {
if (!this.canReplace) {
return;
}
let params = {
operate: RefiningOperate.REPLACE,
horseIndex: this.horseIndex,
locks: this.locks
};
GameModel.send("c2s_horse_refining", params);
}
clickRefining(event: fgui.Event) {
let params = {
operate: RefiningOperate.REFINING,
horseIndex: this.horseIndex,
locks: this.locks
};
GameModel.send("c2s_horse_refining", params);
}
reset() {
if (this.main == null) {
return;
}
this.refreshRight();
this.refreshLeft();
let left = (this.horseIndex - 1) * 3 + 1;
let right = left + 12;
let skillMap = GameModel.horseSkill;
this.canReplace = false;
for (let i = 0; i < 3; i++) {
let leftSkill: SkillBase = skillMap[left + i];
let rightSkill: SkillBase = skillMap[right + i];
if (!SkillUtil.isEqual(leftSkill, rightSkill)) {
this.canReplace = true;
break;
}
}
this.resetItemCount();
}
resetItemCount() {
let count = ItemUtil.getBagItemCount(GameUtil.horseRefiningItemId);
let tf = FGUtil.getTextField(this.alert, "item_count");
if (tf) {
tf.text = `3/${count}`;
}
}
refreshSkill(skillItem: fgui.GComponent, skill: SkillBase) {
FGUtil.getLoader(skillItem, "item/icon").url = `ui://main_ui/${skill.icon}`;
let title: fgui.GTextField = FGUtil.getTextField(skillItem, "title");
let control = FGUtil.getComponent(skillItem, "item").getController("type");
FGUtil.getTextField(skillItem, "desc").text = skill.attrDesc;
if (skill.quality == ESkillQuality.LOW) {
control.selectedIndex = 0;
title.color = SKUIUtil.colorOfString("#6D0903");
} else {
control.selectedIndex = 1;
title.color = SKUIUtil.colorOfString("#CA84F8");
}
if (title) {
title.text = skill.name;
}
}
refreshLeft() {
let start = (this.horseIndex - 1) * 3 + 1;
let skillMap = GameModel.horseSkill;
for (let i = 1; i <= 3; i++) {
let skill: SkillBase = skillMap[start + i - 1];
if (skill == null) {
continue;
}
let left = FGUtil.getButton(this.alert, `left/content/skill_${i}`);
this.refreshSkill(left, skill);
}
}
refreshRight() {
let start = (this.horseIndex - 1) * 3 + 1 + 12;
let skillMap = GameModel.horseSkill;
let hasRight = false;
for (let i = 1; i <= 3; i++) {
let skill: SkillBase = skillMap[start + i - 1];
if (skill == null) {
continue;
}
hasRight = true;
let right = FGUtil.getButton(this.alert, `right/content/skill_${i}`);
this.refreshSkill(right, skill);
}
FGUtil.getComponent(this.alert, "right/content").visible = hasRight;
FGUtil.getComponent(this.alert, "right/tip").visible = !hasRight;
}
}