var game; !(function (game) { const toExchangeInt = function (value, fallback = 0) { const parsed = parseInt(value, 10); return Number.isFinite(parsed) ? parsed : fallback; }; const GoldExchangeUtils = class GoldExchangeUtils { static request(route, data, callback) { Global.netProxy.sendRequest(GameConfig.SERVER_PATH + route, data || {}, callback); } static commonRate(id, fallback = 1) { const config = Global.gameProxy.getCommonConfigById(id) || {}; return Math.max(1, toExchangeInt(config.min, fallback)); } static serverMessage(response, fallback) { if (!response) return fallback || "操作失败"; if ("string" === typeof response.status) return response.status; return (GameConfig.ServerCode && GameConfig.ServerCode[response.status]) || response.info || fallback || "操作失败"; } static mergePlayerData(data) { if (!data || !Global.playerProxy || !Global.playerProxy.playerData) return; Object.keys(data).forEach(function (key) { Global.playerProxy.playerData[key] = data[key]; }); game.EventManager.instance.dispatch(SysNotify.TOPLAYER_INFO_UPDATE); } static makeLabel(text, size, color, x, y, width, height) { const label = new eui.Label(); label.text = text || ""; label.size = size || 22; label.textColor = color || 0xfffbf2; label.x = x || 0; label.y = y || 0; label.width = width || 100; label.height = height || 30; label.fontFamily = "huakanghaibao"; label.stroke = 1; label.strokeColor = 0x724f2e; label.verticalAlign = egret.VerticalAlign.MIDDLE; return label; } static makeButton(label, width, height) { const button = new eui.Button(); button.label = label || ""; button.width = width || 120; button.height = height || 52; button.skinName = window.common && window.common.MidButtonSkin ? window.common.MidButtonSkin : "common.MidButtonSkin"; return button; } static formatDate(seconds) { const time = toExchangeInt(seconds); if (!time) return ""; return game.Utils && game.Utils.formatDate ? game.Utils.formatDate(new Date(1000 * time)) : new Date(1000 * time).toLocaleString(); } }; ((game.GoldExchangeUtils = GoldExchangeUtils), __reflect(GoldExchangeUtils.prototype, "game.GoldExchangeUtils")); const GoldExchangeHistoryItem = class GoldExchangeHistoryItem extends eui.ItemRenderer { constructor() { super(); this.width = 500; this.height = 62; } createChildren() { super.createChildren(); this.line = new egret.Shape(); this.addChild(this.line); this.timeLabel = GoldExchangeUtils.makeLabel("", 18, 0xf4991d, 12, 8, 190, 24); this.timeLabel.stroke = 0; this.addChild(this.timeLabel); this.descLabel = GoldExchangeUtils.makeLabel("", 18, 0x7d1c1c, 12, 34, 370, 24); this.descLabel.stroke = 0; this.addChild(this.descLabel); this.numLabel = GoldExchangeUtils.makeLabel("", 18, 0x2f9c11, 390, 34, 92, 24); this.numLabel.stroke = 0; this.numLabel.textAlign = egret.HorizontalAlign.RIGHT; this.addChild(this.numLabel); } dataChanged() { const row = this.data || {}; this.timeLabel.text = GoldExchangeUtils.formatDate(row.created_at); this.descLabel.text = row.description || ""; this.numLabel.text = row.numText || ""; const graphics = this.line.graphics; graphics.clear(); graphics.lineStyle(1, 0xc78944, 0.65); graphics.moveTo(8, 60); graphics.lineTo(492, 60); } }; __reflect(GoldExchangeHistoryItem.prototype, "game.GoldExchangeHistoryItem"); const GoldExchangePanel = class GoldExchangePanel extends game.BasePanel { constructor() { super(); this.mode = "gemToGold"; this.gemAmount = 1; this.goldAmount = 10; this.isFullScreen = !0; this.isVisibleAnimate = !0; this.width = Const.WIN_W; this.height = Const.WIN_H; } createChildren() { super.createChildren(); this.goldToGemRate = GoldExchangeUtils.commonRate(17, 10); this.gemToGoldRate = GoldExchangeUtils.commonRate(24, 10); this.goldAmount = this.goldToGemRate; this.buildView(); this.refreshMode(); this.loadHistory(); } buildView() { this.modalBlocker = new egret.Shape(); this.modalBlocker.graphics.beginFill(0x000000, 0.01); this.modalBlocker.graphics.drawRect(0, 0, Const.WIN_W, Const.WIN_H); this.modalBlocker.graphics.endFill(); this.modalBlocker.touchEnabled = !0; this.addChild(this.modalBlocker); const panelBg = new eui.Image("common_json.c_panel_png"); panelBg.x = 20; panelBg.y = 76; panelBg.width = 600; panelBg.height = 820; panelBg.scale9Grid = new egret.Rectangle(122, 174, 21, 10); this.addChild(panelBg); const titleBg = new eui.Image("common2_json.common2_diban_png"); titleBg.x = 168; titleBg.y = 70; titleBg.width = 304; titleBg.height = 70; this.addChild(titleBg); const title = GoldExchangeUtils.makeLabel("兑换金币", 34, 0xfffbf2, 170, 84, 300, 48); title.bold = !0; title.textAlign = egret.HorizontalAlign.CENTER; this.addChild(title); this.statusLabel = GoldExchangeUtils.makeLabel("", 20, 0x5b3616, 60, 142, 520, 34); this.statusLabel.stroke = 0; this.statusLabel.textAlign = egret.HorizontalAlign.CENTER; this.addChild(this.statusLabel); this.goldLabel = GoldExchangeUtils.makeLabel("", 22, 0x5b3616, 92, 184, 210, 30); this.goldLabel.stroke = 0; this.addChild(this.goldLabel); this.gemLabel = GoldExchangeUtils.makeLabel("", 22, 0x5b3616, 332, 184, 210, 30); this.gemLabel.stroke = 0; this.addChild(this.gemLabel); this.gemToGoldButton = GoldExchangeUtils.makeButton("钻石兑金币", 220, 54); this.gemToGoldButton.x = 80; this.gemToGoldButton.y = 228; this.gemToGoldButton.addEventListener(egret.TouchEvent.TOUCH_TAP, this.onGemToGoldTap, this); this.addChild(this.gemToGoldButton); this.goldToGemButton = GoldExchangeUtils.makeButton("金币兑钻石", 220, 54); this.goldToGemButton.x = 340; this.goldToGemButton.y = 228; this.goldToGemButton.addEventListener(egret.TouchEvent.TOUCH_TAP, this.onGoldToGemTap, this); this.addChild(this.goldToGemButton); this.modeTitleLabel = GoldExchangeUtils.makeLabel("", 28, 0xfffbf2, 80, 306, 480, 40); this.modeTitleLabel.bold = !0; this.modeTitleLabel.textAlign = egret.HorizontalAlign.CENTER; this.addChild(this.modeTitleLabel); this.rateLabel = GoldExchangeUtils.makeLabel("", 20, 0x7d1c1c, 80, 348, 480, 30); this.rateLabel.stroke = 0; this.rateLabel.textAlign = egret.HorizontalAlign.CENTER; this.addChild(this.rateLabel); this.minusButton = GoldExchangeUtils.makeButton("-", 54, 44); this.minusButton.x = 112; this.minusButton.y = 394; this.minusButton.addEventListener(egret.TouchEvent.TOUCH_TAP, this.onMinusTap, this); this.addChild(this.minusButton); const inputBg = new eui.Image("common2_json.common2_inputbg_png"); inputBg.x = 184; inputBg.y = 396; inputBg.width = 270; inputBg.height = 42; inputBg.scale9Grid = new egret.Rectangle(13, 4, 84, 30); this.addChild(inputBg); this.amountInput = new eui.EditableText(); this.amountInput.x = 196; this.amountInput.y = 400; this.amountInput.width = 246; this.amountInput.height = 34; this.amountInput.restrict = "0-9"; this.amountInput.textAlign = egret.HorizontalAlign.CENTER; this.amountInput.verticalAlign = egret.VerticalAlign.MIDDLE; this.amountInput.size = 24; this.amountInput.textColor = 0x5b3616; this.amountInput.fontFamily = "huakanghaibao"; this.amountInput.addEventListener(egret.Event.CHANGE, this.onAmountChanged, this); this.addChild(this.amountInput); this.plusButton = GoldExchangeUtils.makeButton("+", 54, 44); this.plusButton.x = 474; this.plusButton.y = 394; this.plusButton.addEventListener(egret.TouchEvent.TOUCH_TAP, this.onPlusTap, this); this.addChild(this.plusButton); this.resultLabel = GoldExchangeUtils.makeLabel("", 20, 0x5b3616, 80, 448, 480, 30); this.resultLabel.stroke = 0; this.resultLabel.textAlign = egret.HorizontalAlign.CENTER; this.addChild(this.resultLabel); this.exchangeButton = GoldExchangeUtils.makeButton("兑换", 150, 58); this.exchangeButton.x = 245; this.exchangeButton.y = 486; this.exchangeButton.addEventListener(egret.TouchEvent.TOUCH_TAP, this.onExchangeTap, this); this.addChild(this.exchangeButton); const historyTitle = GoldExchangeUtils.makeLabel("兑换记录", 24, 0xfffbf2, 70, 566, 500, 32); historyTitle.textAlign = egret.HorizontalAlign.CENTER; historyTitle.bold = !0; this.addChild(historyTitle); const historyBg = new eui.Image("common_json.inner_page_png"); historyBg.x = 70; historyBg.y = 602; historyBg.width = 500; historyBg.height = 214; historyBg.scale9Grid = new egret.Rectangle(31, 31, 8, 9); this.addChild(historyBg); this.historyList = new eui.List(); this.historyList.width = 500; this.historyList.height = 204; this.historyList.itemRenderer = GoldExchangeHistoryItem; this.historyScroller = new eui.Scroller(); this.historyScroller.x = 70; this.historyScroller.y = 607; this.historyScroller.width = 500; this.historyScroller.height = 204; this.historyScroller.viewport = this.historyList; this.addChild(this.historyScroller); this.closeButton = GoldExchangeUtils.makeButton("离开", 160, 58); this.closeButton.x = 240; this.closeButton.y = 820; this.closeButton.addEventListener(egret.TouchEvent.TOUCH_TAP, this.onCloseTap, this); this.addChild(this.closeButton); } onRemoved() { this.gemToGoldButton && this.gemToGoldButton.removeEventListener(egret.TouchEvent.TOUCH_TAP, this.onGemToGoldTap, this); this.goldToGemButton && this.goldToGemButton.removeEventListener(egret.TouchEvent.TOUCH_TAP, this.onGoldToGemTap, this); this.minusButton && this.minusButton.removeEventListener(egret.TouchEvent.TOUCH_TAP, this.onMinusTap, this); this.plusButton && this.plusButton.removeEventListener(egret.TouchEvent.TOUCH_TAP, this.onPlusTap, this); this.amountInput && this.amountInput.removeEventListener(egret.Event.CHANGE, this.onAmountChanged, this); this.exchangeButton && this.exchangeButton.removeEventListener(egret.TouchEvent.TOUCH_TAP, this.onExchangeTap, this); this.closeButton && this.closeButton.removeEventListener(egret.TouchEvent.TOUCH_TAP, this.onCloseTap, this); super.onRemoved(); } onGemToGoldTap(event) { event.stopPropagation(); this.mode = "gemToGold"; this.refreshMode(); this.loadHistory(); } onGoldToGemTap(event) { event.stopPropagation(); this.mode = "goldToGem"; this.refreshMode(); this.loadHistory(); } onMinusTap(event) { event.stopPropagation(); this.changeAmount(-this.currentStep()); } onPlusTap(event) { event.stopPropagation(); this.changeAmount(this.currentStep()); } onAmountChanged() { const amount = this.currentInputAmount(); this.setModeAmount(amount); this.updateResult(); } onExchangeTap(event) { event.stopPropagation(); const amount = this.currentInputAmount(); if (amount <= 0) { TipsUtils.showTipsDownToUp("请输入大于0的数量"); return; } if ("goldToGem" === this.mode && amount % this.goldToGemRate !== 0) { TipsUtils.showTipsDownToUp("请输入" + this.goldToGemRate + "的倍数"); return; } const player = Global.playerProxy.playerData, isGemToGold = "gemToGold" === this.mode, owned = isGemToGold ? toExchangeInt(player.gem) : toExchangeInt(player.gold); if (amount > owned) { TipsUtils.showTipsDownToUp(isGemToGold ? "钻石不足" : "金币不足"); return; } const result = this.currentResult(), confirmText = isGemToGold ? "是否消耗" + amount + "钻石兑换" + result + "金币?" : "是否消耗" + amount + "金币兑换" + result + "钻石?"; Global.alertMediator.addAlert(confirmText, this.sendExchangeRequest.bind(this, amount)); } onCloseTap(event) { event.stopPropagation(); game.AppFacade.getInstance().sendNotification(PanelNotify.CLOSE_CHANGE_GOLD); } sendExchangeRequest(amount) { const route = "gemToGold" === this.mode ? "comm/score-to-gold" : "comm/gold-to-score", data = "gemToGold" === this.mode ? { score: amount } : { gold: amount }; this.setStatus("正在兑换..."); GoldExchangeUtils.request(route, data, this.onExchangeResponse.bind(this)); } onExchangeResponse(response) { if (0 !== response.status) { this.setStatus(GoldExchangeUtils.serverMessage(response, "兑换失败")); return; } GoldExchangeUtils.mergePlayerData(response.data); TipsUtils.showTipsDownToUp("兑换成功"); this.refreshMode(); this.loadHistory(); } loadHistory() { this.setStatus("正在读取兑换记录..."); GoldExchangeUtils.request( "comm/score-gold-list", { type: "gemToGold" === this.mode ? 0 : 1 }, this.onHistoryResponse.bind(this) ); } onHistoryResponse(response) { if (0 !== response.status) { this.setStatus(GoldExchangeUtils.serverMessage(response, "兑换记录读取失败")); this.historyList.dataProvider = new eui.ArrayCollection([]); return; } const list = (response.data && response.data.list) || [], isGemToGold = "gemToGold" === this.mode, rows = list.map(function (item) { const num = toExchangeInt(item.num || item.count || 0); return { created_at: item.created_at, description: isGemToGold ? "兑换获得金币" : "兑换获得钻石", numText: num > 0 ? "+" + num : "" }; }); this.historyList.dataProvider = new eui.ArrayCollection(rows); this.setStatus(rows.length ? "兑换记录已加载" : "暂无兑换记录"); this.refreshBalances(); } refreshMode() { const isGemToGold = "gemToGold" === this.mode; this.gemToGoldButton.enabled = !isGemToGold; this.goldToGemButton.enabled = isGemToGold; this.modeTitleLabel.text = isGemToGold ? "钻石兑换金币" : "金币兑换钻石"; this.rateLabel.text = isGemToGold ? "兑换比例 1 钻石 = " + this.gemToGoldRate + " 金币" : "兑换比例 " + this.goldToGemRate + " 金币 = 1 钻石"; this.amountInput.text = this.currentAmount().toString(); this.refreshBalances(); this.updateResult(); } refreshBalances() { const player = Global.playerProxy.playerData || {}; this.goldLabel.text = "金币:" + game.Utils.BigNumTostring(toExchangeInt(player.gold)); this.gemLabel.text = "钻石:" + game.Utils.BigNumTostring(toExchangeInt(player.gem)); } updateResult() { const amount = this.currentInputAmount(), result = this.currentResult(); this.resultLabel.text = "gemToGold" === this.mode ? "预计获得 " + result + " 金币" : "预计获得 " + result + " 钻石"; } changeAmount(delta) { const next = Math.max(this.currentStep(), this.currentInputAmount() + delta); this.setModeAmount(next); this.amountInput.text = next.toString(); this.updateResult(); } currentInputAmount() { return toExchangeInt(this.amountInput && this.amountInput.text, this.currentAmount()); } currentAmount() { return "gemToGold" === this.mode ? this.gemAmount : this.goldAmount; } setModeAmount(amount) { const normalized = Math.max(0, toExchangeInt(amount)); "gemToGold" === this.mode ? (this.gemAmount = normalized) : (this.goldAmount = normalized); } currentStep() { return "gemToGold" === this.mode ? 1 : this.goldToGemRate; } currentResult() { const amount = this.currentInputAmount(); return "gemToGold" === this.mode ? amount * this.gemToGoldRate : Math.floor(amount / this.goldToGemRate); } setStatus(text) { this.statusLabel && (this.statusLabel.text = text || ""); } }; ((game.GoldExchangePanel = GoldExchangePanel), __reflect(GoldExchangePanel.prototype, "game.GoldExchangePanel")); const GoldExchangeMediator = class GoldExchangeMediator extends BaseMediator { constructor() { super("GoldExchangeMediator"); } listNotificationInterests() { return [PanelNotify.OPEN_CHANGE_GOLD, PanelNotify.CLOSE_CHANGE_GOLD]; } showViewComponent(layer = 7) { ((this.viewComponent = new game.GoldExchangePanel()), this.showUI(this.viewComponent, !0, 0, 0, layer)); } handleNotification(notification) { switch (notification.getName()) { case PanelNotify.OPEN_CHANGE_GOLD: this.showViewComponent(7); break; case PanelNotify.CLOSE_CHANGE_GOLD: this.closeViewComponent(1); } } static NAME = "GoldExchangeMediator"; }; ((game.GoldExchangeMediator = GoldExchangeMediator), __reflect(GoldExchangeMediator.prototype, "game.GoldExchangeMediator")); })(game || (game = {}));