源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

320 lines
9.3 KiB

GradeView = GradeView or BaseClass(BaseView)
function GradeView:__init()
self.base_file = "grade"
self.layout_file = "GradeView"
self.layer_name = "UI"
self.close_mode = CloseMode.CloseDestroy
self.destroy_imm = true
self.use_background = true
--
--self.click_bg_toClose = true
self.loop_mgr = LoopScrowViewMgr.New()
self.column_num = 1
self.show_count = 5
self.goods_enough = false
self.fight_enough = false
self.model = MainRoleModel:getInstance()
self.mainVo = RoleManager.Instance.mainRoleInfo
self.item_list = {}
self.pro_item_list = {}
self.load_callback = function()
self:LoadSuccess()
self:InitEvent()
end
self.open_callback = function()
self:LoadRoleInfo()
self:UpdateView()
local function load_end_func()
self:SetGameObjectDepth(self.fightCon_obj)
end
self:AddUIEffect("effect_tubiao_005", self.fight_effect, self.layer_name, Vector3(0,7,0),0.8,true,nil,nil,nil,load_end_func)
end
self.destroy_callback = function()
self:Remove()
end
end
function GradeView:Remove()
self:ClearUIEffect(self.fight_effect)
if self.loop_mgr then
self.loop_mgr:DeleteMe()
self.loop_mgr = nil
end
if self.event_id then
self.model:UnBind(self.event_id)
self.event_id = nil
end
if self.vo_event_fight then
self.mainVo:UnBind(self.vo_event_fight)
self.vo_event_fight = nil
end
if self.vo_event_grade then
self.mainVo:UnBind(self.vo_event_grade)
self.vo_event_grade = nil
end
if self.goodsmodel_event then
GoodsModel:getInstance():UnBind(self.goodsmodel_event)
self.goodsmodel_event = nil
end
if self.token_item then
self.token_item:DeleteMe()
self.token_item = nil
end
for i, v in ipairs(self.item_list) do
v:DeleteMe()
end
self.item_list = {}
for i, v in ipairs(self.pro_item_list) do
v:DeleteMe()
end
self.pro_item_list = {}
end
function GradeView:LoadSuccess()
self.break_btn = self:GetChild("BreakBtn").gameObject
--self.break_image = self:GetChild("BreakBtn"):GetComponent("Image")
self.dot = self:GetChild("BreakBtn/dot").gameObject
self.state = self:GetChild("state"):GetComponent("Text")
self.scroll = self:GetChild("ScrollView")
self.parent = self:GetChild("ScrollView/Viewport/Content")
self.scrRect = self:GetChild("ScrollView"):GetComponent("ScrollRect")
self.roleCon = self:GetChild("rolebgImage/roleCon")
self.role_name = self:GetChild("rolebgImage/name/text"):GetComponent("Text")
self.grade_name = self:GetChild("rolebgImage/name/grade"):GetComponent("Image")
--self.grade_color = self:GetChild("rolebgImage/name/grade"):GetComponent("Outline")
self.fight_obj = self:GetChild("fight_conta").gameObject
self.fightCon_obj = self:GetChild("fight_conta/fightCon").gameObject
self.fight_num = self:GetChild("fight_conta/fightCon/fight"):GetComponent("Text")
self.fight_effect = self:GetChild("fight_conta/fight_effect")
self.property_parent = self:GetChild("property/Content")
self.exp_slider = self:GetChild("consumable/Slider"):GetComponent("Slider")
self.exp_text = self:GetChild("consumable/Slider/Fill Area/text"):GetComponent("Text")
self.bg = self:GetChild("rolebgImage"):GetComponent("Image")
lua_resM:setOutsideImageSprite(self,self.bg,GameResPath.GetJpgImage("bagBg.jpg"))
self.token_item = ShowIconItem.New(self:GetChild("consumable/consumable"))
self.effect = self:GetChild("effect")
end
function GradeView:InitEvent()
local function onBtnClickHandler(target)
if target == self.break_btn then
if not self.goods_enough then
Message.show("物品不足,无法晋升")
elseif not self.fight_enough then
Message.show("战力不足,无法晋升")
else
self.model:Fire(MainRoleModel.RequestGrade, 16601)
end
end
end
AddClickEvent(self.break_btn,onBtnClickHandler)
local function update_func(grade)
self:AddUIEffect( "UI_jinshengchenggong_1", self.effect, self.layer_name, nil, nil, false)
end
self.event_id = self.model:Bind(MainRoleModel.SetGradeInfo, update_func)
local function update_grade_func()
self:SetState()
end
self.vo_event_grade = self.mainVo:BindOne("grade_id", update_grade_func)
local function update_fight_func()
if self._use_delete_method then return end
self:SetFight()
self:UpdateRedDot()
end
self.vo_event_fight = self.mainVo:BindOne("fighting", update_fight_func)
local function update_cost_func()
if self._use_delete_method then return end
self:SetGoodsCost(self.consumable)
self:UpdateRedDot()
end
self.goodsmodel_event = GoodsModel:getInstance():Bind(GoodsModel.CHANGE_BAGLIST, update_cost_func)
end
function GradeView:LoadRoleInfo()
--人物名称
self.role_name.text = self.mainVo.name
--人物形象
if self.roleCon then
local model_id, texture_id = self.mainVo:GetRoleClotheTextureId()
local weapon_model_id, weapon_texture_id = self.mainVo:GetWeaponClotheId()
local head_model_id,head_clothe_id = self.mainVo:GetRoleHeadId()
lua_resM:SetRoleModel(self,self.roleCon,self.mainVo.career,self.mainVo.sex,self.mainVo:GetRoleClotheId(),weapon_model_id, weapon_texture_id,SceneBaseType.Role,self.layer_name,nil,nil,nil,200,Vector3(0,0,0),model_id, texture_id, nil, nil, nil, nil, nil, self.mainVo.wing_id,self.mainVo.image_id,head_model_id,head_clothe_id)
end
end
function GradeView:UpdateView()
local grade_list = self.model:GetGradeList()
self.curr_list = {}
for k, v in ipairs(grade_list) do
self.curr_list[k] = v
self.curr_list[k].index = k
end
local create_count = math.min(self.show_count, #grade_list)
for k = 1, create_count do
local item = self.item_list[k]
if item == nil then
item = GradeItem.New(self.parent, nil, self.layer_name)
self.item_list[k] = item
end
end
self.loop_mgr:Init(self.scroll, self.parent, self.column_num, 196, 142, function(item,index,realIndex)
self:OnInitializeItem(item,index,realIndex)
end)
self.loop_mgr:InitChildren(self.item_list, #self.curr_list)
self.loop_mgr:RestToBeginning()
self.loop_mgr:SetContentSizeData()
self.cur_grade = Config.Jueweiinfo[self.mainVo.grade_id + 1] and (self.mainVo.grade_id + 1) or self.mainVo.grade_id
if not self.cur_grade then
self.cur_grade = grade_list[1] and grade_list[1].juewei_lv
end
for i, v in ipairs(self.curr_list) do
if v.index == self.cur_grade then
self.loop_mgr:JumpToChild(i - 1)
break
end
end
for k,v in pairs(self.item_list) do
if v.data and v.data.juewei_lv == self.cur_grade then
v:CallBack()
end
end
end
function GradeView:OnInitializeItem(item,index,realIndex)
if item and realIndex > 0 and realIndex <= #self.curr_list then
local call_back = function (data)
for k,v in pairs(self.item_list) do
v:SetSelected(v.data and data.juewei_lv == v.data.juewei_lv)
end
self:SwitchView(data)
end
item:SetData(self.curr_list[realIndex], call_back)
self:UpdateItemState()
end
end
function GradeView:UpdateItemState()
for k,v in pairs(self.item_list) do
if v.data and v.data.juewei_lv == self.cur_grade then
v:SetSelected(true)
else
v:SetSelected(false)
end
end
end
function GradeView:SwitchView(data)
self.data = data
if data == nil then return end
-- local text, color = ""
-- color = ColorUtil:GetGoodsColor(data.color)
-- if color then
-- self.grade_color.effectColor = color
-- end
-- text = "<color=#ffffff>["..Trim(data.juewei_name).."]</color>"
-- self.grade_name.text = text
lua_resM:setImageSprite(self,self.grade_name, "mainUI_asset", "grade_"..self.data.juewei_lv, true)
for i, v in ipairs(self.pro_item_list) do
v:SetVisible(false)
end
local attr_list = ErlangParser.GetInstance():Parse(self.data.attr_list)
self.fight_num.text = GetFighting(attr_list)
if #attr_list > 0 then
for i = 1, #attr_list do
local id = attr_list[i][1]
local value = attr_list[i][2]
local item = self.pro_item_list[i]
if not item then
item = GradeProItem.New(self.property_parent)
self.pro_item_list[i] = item
end
item:SetData(WordManager:GetProperties(tonumber(id)), value, id, (i % 2) ~= 0)
item:SetVisible(true)
end
end
self:SetState()
self:SetFight()
self:SetGoodsCost()
self:UpdateRedDot()
self.cur_grade = self.data.juewei_lv
end
function GradeView:SetState()
if self.data.juewei_lv <= self.mainVo.grade_id then
self.break_btn:SetActive(false)
self.state.text = "<color="..ColorUtil.GREEN..">爵位已激活</color>"
elseif self.data.juewei_lv > (self.mainVo.grade_id + 1) then
self.break_btn:SetActive(false)
self.state.text = "<color="..ColorUtil.RED..">爵位未解锁</color>"
else
self.break_btn:SetActive(true)
self.state.text = ""
end
end
function GradeView:SetGoodsCost()
if self.data then
local consumable = ErlangParser.GetInstance():Parse(self.data.goods_list)
if consumable then
self.token_item:SetVisible(true)
self.token_item:SetItemIcon(ShowIconItem.NORMAL)
self.token_item:SetData(consumable[1][2])
local enough, str = EquipModel:getInstance():GetConsumableNum(consumable[1])
self.token_item:SetItemNum(str)
self.token_item:SetGray(not enough)
self.goods_enough = enough
end
else
self.goods_enough = false
end
end
function GradeView:SetFight()
if self.data then
local fighting = self.mainVo.fighting
if fighting >= self.data.need_power then
fighting = self.data.need_power
end
self.exp_slider.value = fighting / self.data.need_power
self.exp_text.text = fighting.." / "..self.data.need_power
self.fight_enough = self.exp_slider.value == 1
else
self.fight_enough = false
end
end
function GradeView:UpdateRedDot()
self.dot:SetActive(self.goods_enough and self.fight_enough)
end