源战役客户端
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 
 

166 Zeilen
6.6 KiB

ExpDunRouteItem = ExpDunRouteItem or BaseClass(BaseItem)
local ExpDunRouteItem = ExpDunRouteItem
local SetImageGray = SetImageGray
function ExpDunRouteItem:__init(parent_wnd,prefab_asset,layer_name)
self.base_file = "expDun"
self.layout_file = "ExpDunRouteItem"
self.parent_wnd = parent_wnd
self.layer_name = layer_name
self.is_selected = false
self.show_reward = false
self.limit_page = 0
self.wave_node_list = {}
self.model = ExpDunModel:getInstance()
self.dun_model = BaseDungeonModel:getInstance()
self:Load()
end
function ExpDunRouteItem:Load_callback()
local nodes = {
"bg:img",
"bg/box:obj:img",
"bg/selected:obj:img", "bg/selected/route_exp:tmp", "bg/selected/route_exp_bg:img",
"bg/box_red:img",
-- 星星节点
"bg/light_con:obj",
"bg/route_name:obj:tmp",
}
self:GetChildren(nodes)
self.ori_arrow_posy = 45
self.up_arrow_posy = self.ori_arrow_posy + 5
self.down_arrow_posy = self.ori_arrow_posy - 5
SetAnchoredPositionY(self.selected, self.up_arrow_posy)
self:AddEvents()
if self.need_refreshData then
self:UpdateView()
end
end
function ExpDunRouteItem:AddEvents( )
local function click_event(target)
if target == self.box_obj then
if self.receive_status == 0 then
self.dun_model:Fire(BaseDungeonModel.REQUEST_CCMD_EVENT, 61045, BaseDungeonModel.EXP_DUN_ID, self.cur_ms_wave)
else
self.model:Fire(ExpDunModel.SHOW_MS_REWARD, self.data.ms_data, self.transform.anchoredPosition, self.index)
end
end
end
AddClickEvent(self.box_obj, click_event)
-- 领取成功后要更新领取状态
local function update_receive_flag()
self:UpdateReceiveData()
end
self:BindEvent(self.dun_model, BaseDungeonModel.UPDATE_EXP_ROUTE_DATA, update_receive_flag)
end
-- cur_wave:当前进行中的波次
function ExpDunRouteItem:SetData(data, cur_wave, index, limit_page_min_wave)
self.data = data
self.cur_wave = cur_wave
self.index = index
self.limit_page_min_wave = limit_page_min_wave
self.cur_ms_wave = self.data.ms_data.wave
if self.is_loaded then
self.need_refreshData = false
self:UpdateView()
else
self.need_refreshData = true
end
end
function ExpDunRouteItem:UpdateView( )
if self.data then
local is_lower_index = self.index % 2 == 1 -- 是否是处于下侧的item
SetAnchoredPosition(self.bg, 64, is_lower_index and -33.5 or 33.5)
SetAnchoredPositionY(self.light_con, is_lower_index and 0 or -56)
-- 是否还没开始打
local still_unlock = self.cur_ms_wave > self.cur_wave + 1
lua_resM:setImageSprite(self, self.bg_img, "expDun_asset", still_unlock and "exp_dun_ms_point1" or "exp_dun_ms_point2")
local is_limit = self.limit_page_min_wave and self.cur_ms_wave >= self.limit_page_min_wave or false
SetImageGray(self.bg_img, is_limit)
SetImageGray(self.box_img, is_limit)
self.route_name_tmp.text = string.format("第%s波", self.cur_ms_wave)
-- 提前获取下一波可以获得的经验值
local next_wave = self.cur_wave < TableSize(Config.Expdunwave) and self.cur_wave + 1 or self.cur_wave
local wave_cfg = self.dun_model:GetDunWaveCfg(BaseDungeonModel.EXP_DUN_ID, next_wave)
local exp_num = 0
if wave_cfg and wave_cfg.first_reward and TableSize(wave_cfg.first_reward) > 0 then
for k, v in ipairs(wave_cfg.first_reward) do
if v[1] == 5 then -- 经验
exp_num = exp_num + v[3]
end
end
end
local next_wave_exp_str = string.format("经验%s", WordManager:ConvertNum1(exp_num))
-- 加载波数节点点亮
for k, v in ipairs(self.wave_node_list) do
v:SetVisible(false)
v:ShowLight(false)
end
local normal_node_num = #self.data.normal_data
local item_gap_x = (self.light_con.sizeDelta.x - 30 * normal_node_num) / (normal_node_num + 1)
local item_gap_y = 36 / (normal_node_num - 1)
for k, v in ipairs(self.data.normal_data) do -- 普通的路线节点
self.wave_node_list[k] = self.wave_node_list[k] or ExpDunRouteWaveItem.New(self.light_con)
self.wave_node_list[k]:ShowLight(v.wave <= self.cur_wave)
self.wave_node_list[k]:SetSelected(v.wave == self.cur_wave + 1, next_wave_exp_str)
self.wave_node_list[k]:SetVisible(true)
self.wave_node_list[k]:SetAnchoredPosition(
(k - 1) * (30 + item_gap_x) + item_gap_x + 2,
36 * (is_lower_index and 1 or -1) + (is_lower_index and -1 or 1) * item_gap_y * k
)
end
-- 本节点是不是下一次挑战要继续的节点
local is_next = self.cur_ms_wave == self.cur_wave + 1
self.selected_obj:SetActive(is_next)
self.route_exp_bg_img.enabled = is_next
self.route_exp_tmp.text = is_next and next_wave_exp_str or ""
self:StartNextWaveArrowAnim(is_next)
self:UpdateReceiveData()
end
end
function ExpDunRouteItem:StartNextWaveArrowAnim(show)
self:StopArrowAnim()
if show then
local move_up_func = function ()
local function repeat_func()
self:StartNextWaveArrowAnim(true)
end
self.arrow_move_up_id = TweenLite.to(self, self.selected, TweenLite.UiAnimationType.POSY, self.up_arrow_posy, 1.2, repeat_func)
end
self.arrow_con_move_down_id = TweenLite.to(self, self.selected, TweenLite.UiAnimationType.POSY, self.down_arrow_posy, 1.2, move_up_func)
end
end
function ExpDunRouteItem:StopArrowAnim()
if self.arrow_con_move_down_id then
TweenLite.Stop(self.arrow_con_move_down_id)
self.arrow_con_move_down_id = nil
end
if self.arrow_move_up_id then
TweenLite.Stop(self.arrow_move_up_id)
self.arrow_move_up_id = nil
end
end
function ExpDunRouteItem:UpdateReceiveData( )
-- 加载领取信息 0为未领取,1为已领取 没有的为空记-1
self.receive_status = self.dun_model:GetDunWaveRewardData(BaseDungeonModel.EXP_DUN_ID, self.cur_ms_wave) or -1
lua_resM:setImageSprite(self, self.box_img, "expDun_asset", self.receive_status == 1 and "exp_route_box2" or "exp_route_box1", true)
self.box_red_img.enabled = self.receive_status == 0
end
function ExpDunRouteItem:__delete( )
for k, v in pairs(self.wave_node_list) do
v:DeleteMe()
v = nil
end
self.wave_node_list = nil
self:StopArrowAnim()
end