local UISlgGvETradePanel = UIViewClass() local tradeItemID = CTL.SlgGvE.MaterialsItemId function UISlgGvETradePanel:OnOpened(context) UIUtils.SetLabelText(self.UICommonPopUp.txt_Title, Const_IDS.IDS_SlgGve_Main_Hint_5) self:RegistSystemEvent(EventID.UI_SlgGvE_Material_Update_Info, self.RefreshMaterials) self:RegistSystemEvent(EventID.UI_SlgGve_Material_Trade, self.RefreshTradeSuccess) self:InitInfo() self:RefreshOwnMaterial() self:OnClickMaterial(1) end function UISlgGvETradePanel:InitInfo() local constData = MDL.SlgGvE.GetGvEConstData() self.tradeRate = constData.GveTradingRate self.tradeMinLimit = constData.GveTradingMinLimit self.lab_TradeRate.text = "10:"..self.tradeRate*10 for i = 1, 3 do UTL.Item.ItemSquareIcon(self.group_material01[i].icon_material, nil, tradeItemID[i]) local itemNameAndDesc = UTL.Item.GetItemDataSpliceByType(tradeItemID[i]) self.group_material01[i].lab_name.text = itemNameAndDesc.Name UTL.Item.ItemSquareIcon(self.group_material02[i].icon_material, nil, tradeItemID[i]) local itemNameAndDesc = UTL.Item.GetItemDataSpliceByType(tradeItemID[i]) self.group_material02[i].lab_name.text = itemNameAndDesc.Name end end function UISlgGvETradePanel:RefreshOwnMaterial() for i = 1, 3 do self.group_material01[i].lab_num.text = MDL.SlgGvE.GetMaterialNum(tradeItemID[i]) if self.curSelectMaterialIndex and self.curSelectMaterialIndex == i then local totalNum = MDL.SlgGvE.GetMaterialNum(tradeItemID[i]) local left = totalNum % self.tradeMinLimit self.enableTradeNum = totalNum - left > 0 and totalNum - left or 0 self.Slider.maxValue = self.enableTradeNum end end end function UISlgGvETradePanel:OnValueChanged(comp, value) if self.enableTradeNum < self.tradeMinLimit then return end self.curSelectNum = value - value % self.tradeMinLimit self:RefreshSelectNum() end function UISlgGvETradePanel:RefreshSelectNum() self.Slider.value = self.curSelectNum self.lab_TradeNum.text = self.curSelectNum self:RefreshTargetMaterial() end function UISlgGvETradePanel:RefreshTargetMaterial() if not self.curSelectTargetIndex then for i = 1, 3 do self.group_material02[i].lab_num.text = MDL.SlgGvE.GetMaterialNum(tradeItemID[i]) if i == self.curSelectMaterialIndex then self.group_material02[i].state_item:SetState(2) else self.group_material02[i].state_item:SetState(0) end end return end self.tradeConvertNum = self.curSelectNum * self.tradeRate for i = 1, 3 do if i == self.curSelectTargetIndex then self.group_material02[i].state_item:SetState(1) if self.tradeConvertNum > 0 then self.group_material02[i].lab_num.text = UTL.Color.FormatGreenColor(MDL.SlgGvE.GetMaterialNum(tradeItemID[i]) + self.tradeConvertNum) else self.group_material02[i].lab_num.text = MDL.SlgGvE.GetMaterialNum(tradeItemID[i]) end elseif i == self.curSelectMaterialIndex then self.group_material02[i].state_item:SetState(2) if self.curSelectNum > 0 then self.group_material02[i].lab_num.text = UTL.Color.FormatRedColor(MDL.SlgGvE.GetMaterialNum(tradeItemID[i]) - self.curSelectNum) else self.group_material02[i].lab_num.text = MDL.SlgGvE.GetMaterialNum(tradeItemID[i]) end else self.group_material02[i].state_item:SetState(0) self.group_material02[i].lab_num.text = MDL.SlgGvE.GetMaterialNum(tradeItemID[i]) end end end function UISlgGvETradePanel:OnButtonClicked(comp) if comp == self.UICommonPopUp.btn_Close then self:CloseView() elseif comp == self.event_Minus then if self.enableTradeNum < self.tradeMinLimit then CTL.Tips.AddTipsMsg(string.FormatByIdsId(Const_IDS.IDS_SlgGve_Trade_Hint_5, self.tradeMinLimit)) return end local num = self.curSelectNum - self.tradeMinLimit self.curSelectNum = num < 0 and 0 or num self:RefreshSelectNum() elseif comp == self.event_Plus then if self.enableTradeNum < self.tradeMinLimit then CTL.Tips.AddTipsMsg(string.FormatByIdsId(Const_IDS.IDS_SlgGve_Trade_Hint_5, self.tradeMinLimit)) return end local num = self.curSelectNum + self.tradeMinLimit self.curSelectNum = num > self.enableTradeNum and self.enableTradeNum or num self:RefreshSelectNum() elseif comp == self.btn_Confirm then self:OnClickConfirmBtn() else for i, collection in ipairs(self.group_material01) do if comp == collection.btn_Select then self:OnClickMaterial(i) break end end for i, collection in ipairs(self.group_material02) do if comp == collection.btn_Select then self:OnClickTargetMaterial(i) break end end end end function UISlgGvETradePanel:OnClickConfirmBtn() if not self.curSelectTargetIndex then CTL.Tips.AddTipsMsg(Const_IDS["IDS_SlgGve_Trade_Hint_7"]) return end if self.curSelectNum < self.tradeMinLimit then CTL.Tips.AddTipsMsg(string.FormatByIdsId(Const_IDS.IDS_SlgGve_Trade_Hint_5, self.tradeMinLimit)) return end local itemName1 = UTL.Item.GetItemDataSpliceByType(tradeItemID[self.curSelectMaterialIndex]).Name local itemName2 = UTL.Item.GetItemDataSpliceByType(tradeItemID[self.curSelectTargetIndex]).Name local str = string.FormatByIdsId(Const_IDS.IDS_SlgGve_Trade_Hint_6, self.curSelectNum, itemName1, self.tradeConvertNum, itemName2) UTL.MessageBox.ShowOKCancelBox(nil, str, function() MDL.SlgGvE.GVETradeReq(tradeItemID[self.curSelectMaterialIndex], self.curSelectNum, tradeItemID[self.curSelectTargetIndex]) end) end function UISlgGvETradePanel:OnClickMaterial(index) if self.curSelectTargetIndex and index == self.curSelectTargetIndex then CTL.Tips.AddTipsMsg(Const_IDS["IDS_SlgGve_Trade_Hint_10"]) return end self.curSelectMaterialIndex = index self:RefreshOwnMaterialStatus() local totalNum = MDL.SlgGvE.GetMaterialNum(tradeItemID[index]) local left = totalNum % self.tradeMinLimit self.enableTradeNum = totalNum - left > 0 and totalNum - left or 0 self.Slider.minValue = 0 self.Slider.maxValue = self.enableTradeNum self.curSelectNum = 0 self:RefreshSelectNum() end function UISlgGvETradePanel:RefreshOwnMaterialStatus() for i = 1, 3 do if self.curSelectTargetIndex and i == self.curSelectTargetIndex then self.group_material01[i].state_item:SetState(2) elseif i == self.curSelectMaterialIndex then self.group_material01[i].state_item:SetState(1) else self.group_material01[i].state_item:SetState(0) end end end function UISlgGvETradePanel:OnClickTargetMaterial(index) if index == self.curSelectMaterialIndex then CTL.Tips.AddTipsMsg(Const_IDS["IDS_SlgGve_Trade_Hint_10"]) return end if not self.curSelectTargetIndex or self.curSelectTargetIndex ~= index then self.curSelectTargetIndex = index self:RefreshTargetMaterial() self:RefreshOwnMaterialStatus() end end function UISlgGvETradePanel:RefreshMaterials() self:RefreshOwnMaterial() self:RefreshTargetMaterial() end function UISlgGvETradePanel:RefreshTradeSuccess() CTL.Tips.AddTipsMsg(Const_IDS["IDS_SlgGve_Trade_Hint_9"]) self:OnClickMaterial(1) self.curSelectTargetIndex = nil self:RefreshTargetMaterial() self:RefreshOwnMaterialStatus() end return UISlgGvETradePanel