193 lines
6.5 KiB
TypeScript
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;
|
|
}
|
|
} |