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; } }