源战役客户端
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 

350 řádky
12 KiB

CSMainTaskView = CSMainTaskView or BaseClass(BaseView)
local CSMainTaskView = CSMainTaskView
function CSMainTaskView:__init()
self.base_file = "csMain"
self.layout_file = "CSMainTaskView"
self.layer_name = "Activity"
self.destroy_imm = true
self.use_background = true
self.change_scene_close = true
self.hide_maincancas = true --是否隐藏主界面
self.append_to_ctl_queue = false --是否要添加进界面堆栈
self.need_show_money = false --是否要显示顶部的金钱栏
self.is_set_zdepth = true
self.model = CSMainModel:getInstance()
self.current_index = nil
self.load_callback = function ()
self:LoadSuccess()
self:AddEvent()
end
self.open_callback = function ( )
self:OpenSuccess()
end
self.destroy_callback = function ( )
self:DestroySuccess()
end
end
function CSMainTaskView:Open(index)
self.current_index = index or 1
BaseView.Open(self)
end
function CSMainTaskView:LoadSuccess()
local nodes = {
"closeBtn:obj", "bg:raw", "helpBtn:obj",
"taskTabCon/tab3:obj", "taskTabCon/tab3/tabSelect3:obj", "taskTabCon/tab3/tabRed3:obj", "taskTabCon/tab3/tabText3:tmp",
"taskTabCon/tab2:obj", "taskTabCon/tab2/tabSelect2:obj", "taskTabCon/tab2/tabRed2:obj", "taskTabCon/tab2/tabText2:tmp",
"taskTabCon/tab1:obj", "taskTabCon/tab1/tabSelect1:obj", "taskTabCon/tab1/tabRed1:obj", "taskTabCon/tab1/tabText1:tmp",
"ScrollView", "ScrollView/Viewport/Content",
"activeCon/slider:img",
"activeCon/awardCon4", "activeCon/awardCon2", "activeCon/awardCon3", "activeCon/awardCon1", "activeCon/awardCon5",
"activeCon/activeDotNum5:tmp", "activeCon/activeDotNum4:tmp", "activeCon/activeDotNum3:tmp", "activeCon/activeDotNum1:tmp", "activeCon/activeDotNum2:tmp",
"activeCon/dot1:img", "activeCon/dot3:img", "activeCon/dot2:img", "activeCon/dot4:img", "activeCon/dot5:img",
"activeCon/awardGetFlag5:obj", "activeCon/awardGetFlag4:obj", "activeCon/awardGetFlag1:obj", "activeCon/awardGetFlag3:obj", "activeCon/awardGetFlag2:obj",
"activeNum:txt", "armsNum:tmp",
"activeCon/awardClick1:obj", "activeCon/awardClick2:obj", "activeCon/awardClick3:obj", "activeCon/awardClick4:obj", "activeCon/awardClick5:obj",
"activeCon/awardRed5:obj", "activeCon/awardRed2:obj", "activeCon/awardRed3:obj", "activeCon/awardRed4:obj", "activeCon/awardRed1:obj",
}
self:GetChildren(nodes)
lua_resM:setOutsideRawImage(self,self.bg_raw,GameResPath.GetViewBigBg("cs_main_daily_task_bg"))
self.model:Fire(CSMainConst.REQUEST_CCMD_EVENT,60301)
self.award_item_list = {}
for i=1,5 do
self.award_item_list[i] = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self["awardCon"..i])
self.award_item_list[i]:SetItemSize(62, 62)
-- self.award_item_list[i]:SetAnchoredPosition(0,0)
end
end
function CSMainTaskView:AddEvent()
local on_click = function ( click_obj )
if self.closeBtn_obj == click_obj then
self:Close()
elseif self.tab3_obj == click_obj then
self:UpdateTaskCon(3)
elseif self.tab2_obj == click_obj then
self:UpdateTaskCon(2)
elseif self.tab1_obj == click_obj then
self:UpdateTaskCon(1)
elseif self.awardClick1_obj == click_obj then
self:DoGetActiveReward(1)
elseif self.awardClick2_obj == click_obj then
self:DoGetActiveReward(2)
elseif self.awardClick3_obj == click_obj then
self:DoGetActiveReward(3)
elseif self.awardClick4_obj == click_obj then
self:DoGetActiveReward(4)
elseif self.awardClick5_obj == click_obj then
self:DoGetActiveReward(5)
elseif self.helpBtn_obj == click_obj then
EventSystem.Fire(GlobalEventSystem,EventName.OPEN_INSTRUCTION_VIEW, 60302)
end
end
AddClickEvent(self.closeBtn_obj, on_click)
AddClickEvent(self.tab3_obj, on_click)
AddClickEvent(self.tab2_obj, on_click)
AddClickEvent(self.tab1_obj, on_click)
AddClickEvent(self.awardClick1_obj, on_click)
AddClickEvent(self.awardClick2_obj, on_click)
AddClickEvent(self.awardClick3_obj, on_click)
AddClickEvent(self.awardClick4_obj, on_click)
AddClickEvent(self.awardClick5_obj, on_click)
AddClickEvent(self.helpBtn_obj, on_click)
--刷新任务、活跃、军备展示
local function on_update_task_view()
self:UpdateTaskCon(self.current_index)
self:UpdateArmsNum()
self:UpdateActiveCon()
end
self:BindEvent(self.model, CSMainConst.UPDATE_CS_MAIN_TASK_VIEW, on_update_task_view)
local function on_active_process_change_var()
self:UpdateActiveCon()
end
self.on_active_process_change_var_id = self.model:BindOne("active_process", on_active_process_change_var)
local function on_arms_num_change_var()
self:UpdateArmsNum()
end
self.on_arms_num_change_var_id = self.model:BindOne("arms_num", on_arms_num_change_var)
local function on_active_dot_change_var()
self:UpdateActiveCon()
end
self.on_active_dot_change_var_id = self.model:BindOne("active_dot", on_active_dot_change_var)
local function update_red_dot(tab_id)
if not self.is_loaded then return end
if tab_id == CSMainConst.RedType.Task then
self:UpdateTaskTabRed()
end
end
self:BindEvent(self.model, CSMainConst.ANS_UPDATE_RED_DOT, update_red_dot)
local function update_task_item_sort()
if not self.is_loaded then return end
self:UpdateTaskCon(self.current_index)
end
self:BindEvent(self.model, CSMainConst.REFRESH_CS_MAIN_TASK_ITEM_SORT, update_task_item_sort)
local function CLICK_GET_WAY_ITEM( )
self:Close()
end
self:BindEvent(GlobalEventSystem, EventName.CLICK_GET_WAY_ITEM, CLICK_GET_WAY_ITEM)
end
function CSMainTaskView:DoGetActiveReward(index)
local active_process = self.model:GetCSMainActiveProcess()
local active_dot = self.model:GetCSMainActiveDot()
local active_cfg = self.model:GetCSMainActiveRewardsCfgByProgress(active_dot)
local need_cfg = nil
for i,v in ipairs(active_cfg) do
if i == index then
need_cfg = v
break
end
end
if need_cfg and not self.model:IsCSMainActiveDotRewardGet(need_cfg.id) then
if active_process >= need_cfg.active then
self.model:Fire(CSMainConst.REQUEST_CCMD_EVENT,60304,0,need_cfg.id)
else
if self.award_item_list[index] then
self.award_item_list[index]:ManuallyClickFun(self.award_item_list[index].gameObject)
end
end
else
if self.award_item_list[index] then
self.award_item_list[index]:ManuallyClickFun(self.award_item_list[index].gameObject)
end
end
end
function CSMainTaskView:OpenSuccess()
end
function CSMainTaskView:UpdateView( )
end
function CSMainTaskView:UpdateTaskCon(color_index)
self.current_index = color_index
for i=1,3 do
local select_tmp_mat = ""
if i == 1 then--B
select_tmp_mat = ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBlueTab
elseif i == 2 then--A
select_tmp_mat = ShaderTools.TMPSharedMaterialType.HKYTW7OutlinePurple
elseif i == 3 then--S
select_tmp_mat = ShaderTools.TMPSharedMaterialType.HKYTW7OutlineDarkOrangeBtn
end
if i == color_index then
self["tabSelect"..i.."_obj"]:SetActive(true)
SetTMPSharedMaterial(self["tabText"..i.."_tmp"], select_tmp_mat)
self["tabText"..i.."_tmp"].color = ColorUtil:ConvertHexToRGBColor("ffffff")
else
self["tabSelect"..i.."_obj"]:SetActive(false)
SetTMPSharedMaterial(self["tabText"..i.."_tmp"], ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault)
self["tabText"..i.."_tmp"].color = ColorUtil:ConvertHexToRGBColor("A0A4A8")
end
end
local task_cfg_list = self.model:GetCSMainTaskCfgAfterSort(color_index)
if not self.item_list_com then
self.item_list_com = self:AddUIComponent(UI.ItemListCreator)
end
self.item_list_com:Reset()
local info = {
data_list = task_cfg_list,
item_con = self.Content,
item_class = CSMainTaskItem,
item_width = 839,
item_height = 100,
space_y = 8,
start_x = 6.5,
start_y = -5,
scroll_view = self.ScrollView,
create_frequency = 0.01,
on_update_item = function(item, i, v)
item:SetData(v,i)
end,
}
self.item_list_com:UpdateItems(info)
self:UpdateTaskTabRed()
end
function CSMainTaskView:UpdateTaskTabRed( )
local red_s = self.model:GetTaskRedByColor(3)
local red_a = self.model:GetTaskRedByColor(2)
local red_b = self.model:GetTaskRedByColor(1)
self.tabRed3_obj:SetActive(red_s)
self.tabRed2_obj:SetActive(red_a)
self.tabRed1_obj:SetActive(red_b)
end
function CSMainTaskView:UpdateActiveCon( )
local active_process = self.model:GetCSMainActiveProcess()
local active_dot = self.model:GetCSMainActiveDot()
local active_cfg = self.model:GetCSMainActiveRewardsCfgByProgress(active_dot)
-- --active_dot转化出一个1到5的值用于和1到5进行比较
-- local mulit = math.floor(active_dot/5)
-- local remain = active_dot%5
-- local trans_dot = active_dot
-- if active_dot == 0 then
-- trans_dot = 0
-- else
-- if remain ~= 0 then
-- trans_dot = active_dot-mulit*5
-- else
-- trans_dot = active_dot-(mulit-1)*5
-- end
-- end
self.activeNum_txt.text = active_process
for i,v in ipairs(active_cfg) do--这里取了最新的5条配置,所以i也是1到5
self["activeDotNum"..i.."_tmp"].text = v.active
local reward_cfg = stringtotable(v.awards)
if self.model:IsCSMainActiveDotRewardGet(v.id) then--已经领取了
self["activeDotNum"..i.."_tmp"].color = ColorUtil:ConvertHexToRGBColor("fefeff")
self["awardGetFlag"..i.."_obj"]:SetActive(true)
self.award_item_list[i]:SetData(reward_cfg[1][2],reward_cfg[1][3],nil,nil,nil,nil,nil,nil,nil,true)
self.award_item_list[i]:SetIconGray(true)
self["awardRed"..i.."_obj"]:SetActive(false)
else--等待领取或不可领取
self["activeDotNum"..i.."_tmp"].color = ColorUtil:ConvertHexToRGBColor("a9c1e1")
self["awardGetFlag"..i.."_obj"]:SetActive(false)
self.award_item_list[i]:SetData(reward_cfg[1][2],reward_cfg[1][3])
self.award_item_list[i]:SetIconGray(false)
if active_process >= v.active then--可以领取
self["awardRed"..i.."_obj"]:SetActive(true)
else
self["awardRed"..i.."_obj"]:SetActive(false)
end
end
if i == 5 then
lua_resM:setImageSprite(self, self["dot"..i.."_img"], "csMain_asset","cs_main_task_dot_big",true)
else
lua_resM:setImageSprite(self, self["dot"..i.."_img"], "csMain_asset","cs_main_task_dot_small",true)
end
SetImageGray(self["dot"..i.."_img"], not self.model:IsCSMainActiveDotRewardGet(v.id))
end
local max_process = active_cfg[5].active
local last_page_active_cfg = self.model:GetCSMainLastPageActiveCfg(active_cfg[1].id-1) --上一页的活跃配置
local last_page_max_process = 0--上一页的最高活跃
if last_page_active_cfg then
last_page_max_process = last_page_active_cfg[5].active
end
local final_fill_amount = 0
if active_process <= active_cfg[1].active then
final_fill_amount = 0.1 + (active_process-last_page_max_process)/(active_cfg[1].active-last_page_max_process)*0.1
else
final_fill_amount = 0.2
for i=2,5 do
if active_process < active_cfg[i].active then
final_fill_amount = final_fill_amount + (active_process-active_cfg[i-1].active)/(active_cfg[i].active-active_cfg[i-1].active)*0.2
break
else
final_fill_amount = final_fill_amount + 0.2
end
end
end
self.slider_img.fillAmount = final_fill_amount
end
function CSMainTaskView:UpdateArmsNum( )
local arms_num = self.model:GetCSMainArmsNum()
local color = arms_num > 0 and ColorUtil.GREEN_TIPS or ColorUtil.RED_DARK
self.armsNum_tmp.text = string.format("星域活跃:<%s>%s</color>", color, arms_num)
end
function CSMainTaskView:SwitchTab( index )
self.current_index = index
if index == 1 then
elseif index == 2 then
end
end
function CSMainTaskView:DestroySuccess( )
if self.on_active_process_change_var_id then
self.model:UnBind(self.on_active_process_change_var_id)
self.on_active_process_change_var_id = nil
end
if self.on_arms_num_change_var_id then
self.model:UnBind(self.on_arms_num_change_var_id)
self.on_arms_num_change_var_id = nil
end
if self.on_active_dot_change_var_id then
self.model:UnBind(self.on_active_dot_change_var_id)
self.on_active_dot_change_var_id = nil
end
for k,v in pairs(self.award_item_list) do
if v then
UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, v)
v = nil
end
end
self.award_item_list = {}
end