123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502 |
- ---@class KLUIFruitPanel:UIKmlLuaPanelBase
- ---@field view KLUIFruitPanelView
- ---@field FruitAttDataList table<number,cfg_fruit_column> @果实表信息
- ---@field FruitPointTextList table<number,UIKmlLuaControl> @果实类型文本
- ---@field allFruitDataList table<number,CommonProtos.Item>
- ---@field AttDataList table<number,{type:number,point:number}> @属性加点列表
- local KLUIFruitPanel = class(UIKmlLuaPanelBase)
- local this =KLUIFruitPanel
- ---创建时调用一次
- function this:Init()
- self.selectCalcData = nil
-
- self.FruitPointTextList = {}
- self.severAttList = {}
- ---一级属性
- self.firstAttTypeList = {}
-
- ---属性类型(百分比的)
- self.remarksAttTypeList = {}
-
- ---属性的名字
- self.AttNameStrList = {}
-
- ---所有次数的消耗信息
- self.consumeInfoList = {}
- local consumeCfg = string.split(SL:GetConfig("cfg_global",3002).value,'|')
- for i, v in ipairs(consumeCfg) do
- local strList = string.split(v,'#')
- self.consumeInfoList[tonumber(strList[1])] = {tonumber(strList[2]),tonumber(strList[3])}
- end
-
- ---背包里所有果实
- self.allFruitDataList = {}
- self.allFruitItemList = {}
-
- ---果实点数上限
- self.maxNum = InfoManager.fruitInfo.fruitMaxNum
- ---重置次数
- self.ResetNum = 1
- ---货币id
- self.coinID = 0
- ---货币数量
- self.coinCount = 0
- ---货币是否足够
- self.isCoinEnough = true
- ---分配点数
- self.distributionPoint = 0
- ---果实属性信息
- self.FruitAttDataList = {}
- self.AttDataList = {}
- local fruitCfg = SL:GetConfigTable("cfg_fruit")
- ---@param v cfg_fruit_column
- for i, v in pairs(fruitCfg) do
- table.insert(self.FruitAttDataList,v)
- ---@type cfg_att_info_column
- local attCfg = SL:GetConfig("cfg_att_info",v.attribute)
- if attCfg.base == 1 then
- table.insert(self.firstAttTypeList,v.attribute)
- table.insert(self.AttDataList,{type=v.attribute,point=0})
- end
- if attCfg.remarks == 2 then
- table.insert(self.remarksAttTypeList,v.attribute)
- end
- self.AttNameStrList[v.attribute] = v.name
- end
-
- table.sort(self.AttDataList,function(a, b)
- return a.type < b.type
- end)
-
- GUI:DataListInitData(self.view.FruitAttDataList,function()
- return self:FruitAttDataListItemCountFunc()
- end,function(realIndex)
- return self:FruitAttDataListItemGetFunc(realIndex)
- end,function(realIndex, kmlcontrol)
- return self:FruitAttDataListItemInitFunc(realIndex, kmlcontrol)
- end, function(realIndex, kmlcontrol)
- return self:FruitAttDataListItemUpdateFunc(realIndex, kmlcontrol)
- end)
- GUI:DataListUpdateData(self.view.FruitAttDataList,_,function()
- self:SetAttText()
- end)
-
- GUI:DataListInitData(self.view.FruitDataList,function()
- return self:FruitDataListItemCountFunc()
- end,function(realIndex)
- return self:FruitDataListItemGetFunc(realIndex)
- end,function(realIndex, kmlcontrol)
- return self:FruitDataListItemInitFunc(realIndex, kmlcontrol)
- end, function(realIndex, kmlcontrol)
- return self:FruitDataListItemUpdateFunc(realIndex, kmlcontrol)
- end)
-
- GUI:DataListInitData(self.view.AttDataList,function()
- return self:AttDataListItemCountFunc()
- end,function(realIndex)
- return self:AttDataListItemGetFunc(realIndex)
- end,function(realIndex, kmlcontrol)
- return self:AttDataListItemInitFunc(realIndex, kmlcontrol)
- end, function(realIndex, kmlcontrol)
- return self:AttDataListItemUpdateFunc(realIndex, kmlcontrol)
- end)
- end
- ---创建或者刷新界面数据时调用
- function this:Refresh()
- SL:SendLuaNetMsg(LuaMessageIdToSever.GET_ALREADY_USE_POINTS)
-
- self:SetUsePointText()
- --self:SetAttText()
- self:GetBagAllFruit()
- end
- ---注册UI事件和服务器消息
- function this:RegistEvents()
- GUI:AddOnClickEvent(self.view.closeButton,self,self.CloseButton)
- GUI:AddOnClickEvent(self.view.ClickMask,self,self.CloseResetPanelButton)
- GUI:AddOnClickEvent(self.view.BtnReset,self,self.OpenResetPanelButton)
- GUI:AddOnClickEvent(self.view.HelpButton,self,self.OnClickShowHelp)
-
- GUI:AddOnClickEvent(self.view.ResetPanel_BtnReset,self,self.OnClickResetPanel_BtnReset)
- GUI:AddOnClickEvent(self.view.ResetPanel_BtnCancel,self,self.CloseResetPanelButton)
- SL:RegisterLUAEvent(LUA_EVENT_BAG_CHANGE_AFTER, self.BagInfo_Change, self)
- SL:RegisterLUAEvent(LUA_EVENT_MONEYCHANGE, self.CoinInfo_Change, self)
- SL:RegisterLuaNetMsg(LuaMessageIdToClient.C_USE_FRUIT_RESULT,self.C_USE_FRUIT_RESULT,self)
- SL:RegisterLuaNetMsg(LuaMessageIdToClient.C_RESET_FRUIT_COUNT,self.C_RESET_FRUIT_COUNT,self)
- SL:RegisterLuaNetMsg(LuaMessageIdToClient.USE_FRUIT_RESULT,self.USE_FRUIT_RESULT,self)
- end
- ---使用果实结果
- function this:USE_FRUIT_RESULT(_,message)
- --使用果实的效果
- --[[if message then
- GUI:Image_loadTexture(self.view.FeedBackImg, "fruit_success", "Atlas/UIFruitPanel.spriteatlas")
- else
- GUI:Image_loadTexture(self.view.FeedBackImg, "fruit_fail", "Atlas/UIFruitPanel.spriteatlas")
- end
- GUI:SetActive(self.view.FeedBackImg,true)
- GUI:setPosition(self.view.FeedBackImg,-112,0)
- SL:EffectDoMove(self.view.FeedBackImg.kmlControl.rectTransform,Vector2.New(646, 361),2, function()
- GUI:SetActive(self.view.FeedBackImg,false)
- end)--]]
- end
- function this:C_USE_FRUIT_RESULT(_,message)
- self.severAttList = {}
- if message then
- self.distributionPoint = message["totalFirstLevelAttrs"] and message["totalFirstLevelAttrs"] or 0
- if message["attrPoints"] then
- for i, v in pairs(message["attrPoints"]) do
- self.severAttList[tonumber(i)] = tonumber(v)
- end
- end
- end
-
- SL:SendLuaNetMsg(LuaMessageIdToSever.GET_RESET_FRUIT_COUNT)
- self:SetUsePointText()
- self:SetAttText()
- end
- function this:C_RESET_FRUIT_COUNT(_,message)
- if message then
- self.ResetNum = message + 1
- if GUI:getVisible(self.view.ResetPanel) then
- GUI:SetActive(self.view.ResetPanel,false)
- end
- end
- end
- ---@param eventData {index:number,item:CommonProtos.Item}[]
- function this:BagInfo_Change(eventId, eventData)
- if not eventData then
- return
- end
- self:RefreshFruitDataList(eventData)
- end
- function this:CoinInfo_Change(eventId, eventData)
- if not GUI:getVisible(self.view.ResetPanel) then
- return
- end
- self:CreatCoinItem()
- end
- function this:CloseButton()
- SL:onLUAEvent(LUA_EVENT_FRUIT_PANEL_CLOSE)
- end
- ---点击重置(重置界面中)
- function this:OnClickResetPanel_BtnReset()
- if not self.isCoinEnough then
- SL:TipMessage(SL:GetConfig('cfg_string',246).text,1,NoticeType.NoticeMid)--"道具不足,请补充道具",
- return
- end
- local reqData = {}
- local allPoint = 0
- for i, v in pairs(self.AttDataList) do
- allPoint = allPoint + v.point
- reqData[tostring(v.type)] = v.point
- end
- if self.distributionPoint > 0 and allPoint == self.distributionPoint then
- SL:SendLuaNetMsg(LuaMessageIdToSever.S_RESET_FRUIT,reqData)
- return
- end
- SL:TipMessage(SL:GetConfig('cfg_string',279).text,1,NoticeType.NoticeMid)--"请将所有点数分配完毕!",
- end
- ---关闭重置界面
- function this:CloseResetPanelButton()
- if self.selectCalcData then
- return
- end
- GUI:SetActive(self.view.ResetPanel,false)
- end
- ---打开重置界面
- function this:OpenResetPanelButton()
- self.selectCalcData = nil
- GUI:SetActive(self.view.IsOpenCalcUI,false)
- ---属性
- for i, v in pairs(self.AttDataList) do
- v.point = 0
- end
- GUI:DataListUpdateData(self.view.AttDataList)
- self:SetResetNumText()
- self:SetDistributionPointText()
- self:CreatCoinItem()
- if not GUI:getVisible(self.view.ResetPanel) then
- GUI:SetActive(self.view.ResetPanel,true)
- end
- end
- ---设置属性文本
- function this:SetAttText()
- for i, v in pairs(self.FruitPointTextList) do
- local value = (self.severAttList and self.severAttList[i]) and self.severAttList[i] or 0
- local otherStr = ""
- if table.contains(self.remarksAttTypeList,i) then
- if value > 0 then
- value = value * 100
- local t1,t2 = math.modf(value)
- if t2 <= 0 then
- value = t1
- end
- end
- otherStr = "%"
- end
- GUI:Text_setString(v,self.AttNameStrList[i].."+"..value..otherStr)
- end
- end
- ---生成货币模型和数量
- function this:CreatCoinItem()
- if self.consumeInfoList[self.ResetNum] then
- self.coinID = self.consumeInfoList[self.ResetNum][1]
- self.coinCount = self.consumeInfoList[self.ResetNum][2]
- else
- self.coinID = self.consumeInfoList[#self.consumeInfoList][1]
- self.coinCount = self.consumeInfoList[#self.consumeInfoList][2]
- end
-
- local data = {
- width = "30",
- height = "30",
- itemid = self.coinID,
- noclip = "1",
- z = -3001,
- mfixsize = "30,30",
- itemcount = nil,
- }
- if self.item then
- GUI:Item_UpdataData(self.item, data)
- else
- self.item = GUI:Item_Create(self.view.Model, data)
- end
- self.isCoinEnough = SL:GetBagItemCount(self.coinID) >= self.coinCount
- local color = self.isCoinEnough and "#1add1f" or "#ff2323"
- GUI:Text_setString(self.view.ConsumCount,"<color="..color..">"..tostring(self.coinCount).."</color>")
- end
- ---设置重置次数文本
- function this:SetResetNumText()
- GUI:Text_setString(self.view.ResetPanel_TextResetTimes,"第<color=#1add1f> "..self.ResetNum.." </color>次重置")
- end
- ---设置可分配点数文本
- function this:SetDistributionPointText()
- local allPoint = 0
- for i, v in pairs(self.AttDataList) do
- allPoint = allPoint + v.point
- end
-
- GUI:Text_setString(self.view.ResetPanel_TextPoint,"可分配点数 "..(self.distributionPoint - allPoint))
- end
- ---设置使用点数的文本
- function this:SetUsePointText()
- self.isCanUse = self.distributionPoint < self.maxNum
- GUI:Text_setString(self.view.TextPintInfo,"已用点数: "..self.distributionPoint.."/"..self.maxNum)
- end
- --------------------------------果实属性图标-------------------------------------------------------
- function this:FruitAttDataListItemCountFunc()
- return #self.FruitAttDataList
- end
- function this:FruitAttDataListItemGetFunc(realIndex)
-
- end
- function this:FruitAttDataListItemInitFunc(realIndex, kmlcontrol)
- end
- function this:FruitAttDataListItemUpdateFunc(realIndex, kmlcontrol)
- local data = self.FruitAttDataList[realIndex + 1]
- local _item = GUI:GetChildControl(self.view.FruitAttDataList,realIndex,'FruitAttItem')
- local _icon = GUI:GetChildControl(self.view.FruitAttDataList,realIndex,'FruitAttItem_Icon')
- local _text = GUI:GetChildControl(self.view.FruitAttDataList,realIndex,'FruitAttItem_Text')
- GUI:Image_loadTexture(_icon,data.icon or "","Atlas/UIFruitPanel.spriteatlas")
- GUI:setPosition(_item,tonumber(data.location[1]),tonumber(data.location[2]))
- self.FruitPointTextList[data.attribute] = _text
- end
- ------------------------------------------------------------------------------------------------
- --------------------------------背包里的果实-------------------------------------------------------
- function this:FruitDataListItemCountFunc()
- return #self.allFruitDataList
- end
- function this:FruitDataListItemGetFunc(realIndex)
- local index = realIndex + 1
- local data = {
- width = "70",
- height = "70",
- tips = "1",
- z = -3001,
- itemid = self.allFruitDataList[index].cfgId,
- itemcustomcount = self:GetFruitCountStr(self.allFruitDataList[index].count),
- }
- local item = GUI:Item_Create(self.view.FruitDataList, data)
- GUI:AddOnClickEvent(item, self, function()
- local cfgId = self.allFruitDataList[index].cfgId
- local isUse = self.isCanUse
- if not table.contains(self.firstAttTypeList,self.allFruitDataList[index].type) then
- isUse = true
- end
- if self.allFruitDataList[index].count > 0 and isUse then
- local item = SL:MeData_GetCfgBaseOnItemId(cfgId)
- SL:OpenTips("bag", cfgId,item.id,self.allFruitDataList[index].count >= 10 and 10 or self.allFruitDataList[index].count)
- else
- SL:CommonItemGetPath(nil,cfgId)
- end
- end)
-
- self.allFruitItemList[item] = item
- return item
- end
- function this:FruitDataListItemInitFunc(realIndex, kmlcontrol)
- end
- function this:FruitDataListItemUpdateFunc(realIndex, kmlcontrol)
- local data = self.allFruitDataList[realIndex + 1]
- local item = self.allFruitItemList[kmlcontrol]
- GUI:Item_UpdataData(item, {
- itemid = data.cfgId,
- itemcustomcount = self:GetFruitCountStr(data.count),
- })
- end
- ---获取果实数量的文本
- function this:GetFruitCountStr(count)
- local color = count > 0 and "#1add1f" or "#ff2323"
- if count >= 99 then
- count = 99
- end
- return "<color="..color..">"..count.."</color>"
- end
- ---获取背包里所有的果实
- function this:GetBagAllFruit()
- self.allFruitDataList = {}
- for i, v in pairs(self.FruitAttDataList) do
- table.insert(self.allFruitDataList,{cfgId = v.id,type = v.attribute,count = SL:GetBagItemCount(v.id)})
- end
- GUI:DataListUpdateData(self.view.FruitDataList)
- end
- ---刷新背包里所有的果实数量
- function this:RefreshFruitDataList()
- for i, v in pairs(self.allFruitDataList) do
- v.count = SL:GetBagItemCount(v.cfgId)
- end
- GUI:DataListUpdateData(self.view.FruitDataList)
- end
- ------------------------------------------------------------------------------------------------
- --------------------------------分配点数-------------------------------------------------------
- function this:AttDataListItemCountFunc()
- return #self.AttDataList
- end
- function this:AttDataListItemGetFunc(realIndex)
- end
- function this:AttDataListItemInitFunc(realIndex, kmlcontrol)
- end
- function this:AttDataListItemUpdateFunc(realIndex, kmlcontrol)
- local data = self.AttDataList[realIndex + 1]
- local _name = GUI:GetChildControl(self.view.AttDataList,realIndex,'AttItem_Name')
- local _btnMinus = GUI:GetChildControl(self.view.AttDataList,realIndex,'AttItem_BtnMinus')
- local _btnAdd = GUI:GetChildControl(self.view.AttDataList,realIndex,'AttItem_BtnAdd')
- local _text = GUI:GetChildControl(self.view.AttDataList,realIndex,'AttItem_Text')
- local _inputButton = GUI:GetChildControl(self.view.AttDataList,realIndex,'AttItem_InputButton')
- GUI:Text_setString(_name,self.AttNameStrList[data.type])
- self:SetInputText(_text,data.point)
- GUI:AddOnClickEvent(_btnMinus,self,self.OnClickMins,{data,_text})
- GUI:AddOnClickEvent(_btnAdd,self,self.OnClickAdd,{data,_text})
- GUI:AddOnClickEvent(_inputButton,self,self.OnClickShowCalcPanel,{data,_text})
- end
- function this:OnClickMins(_,eventData)
- if eventData[1].point > 0 then
- eventData[1].point = eventData[1].point - 1
- self:SetInputText(eventData[2],eventData[1].point)
- end
- self:SetDistributionPointText()
- end
- function this:OnClickAdd(_,eventData)
- local allPoint = 0
- for i, v in pairs(self.AttDataList) do
- allPoint = allPoint + v.point
- end
- if self.distributionPoint - allPoint > 0 then
- eventData[1].point = eventData[1].point + 1
- self:SetInputText(eventData[2],eventData[1].point)
- end
- self:SetDistributionPointText()
- end
- function this:OnClickShowCalcPanel(_,eventData)
- self.selectCalcData = eventData
- GUI:SetActive(self.view.IsOpenCalcUI,true)
-
- local allPoint = 0
- for i, v in pairs(self.AttDataList) do
- allPoint = allPoint + v.point
- end
- GUI:UIPanel_Open("dev/ui/Common/Panel/KLCalc/KLCalcPanel",nil,nil,
- {
- maxNum = self.distributionPoint - allPoint,
- ins = self,
- callback = self.CalcCallBack,
- intro = "增加点数"})
- end
- function this:CalcCallBack(addValue)
- if self.selectCalcData then
- self.selectCalcData[1].point = addValue
- self:SetInputText(self.selectCalcData[2],addValue)
- self.selectCalcData = nil
- GUI:SetActive(self.view.IsOpenCalcUI,false)
- self:SetDistributionPointText()
- end
- end
- ---@param control UIKmlLuaControl
- ---@param value string
- function this:SetInputText(control,value)
- GUI:Text_setString(control,tostring(value))
- end
- ------------------------------------------------------------------------------------------------
- function this:OnClickShowHelp()
- local helpCfg=SL:GetConfig("cfg_rule_text",11)
- if helpCfg then
- SL:CommonStrTipsMessage({title =helpCfg.menutxt,str=helpCfg.location})
- end
- end
- function this:Close()
- GUI:SetActive(self.view.FeedBackImg,false)
- end
- return this
|