源战役客户端
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 
 
 

506 рядки
18 KiB

CSGWarSubView = CSGWarSubView or BaseClass(BaseItem)
local CSGWarSubView = CSGWarSubView
function CSGWarSubView:__init()
self.base_file = "CSGWar"
self.layout_file = "CSGWarSubView"
self.mainVo = RoleManager.Instance.mainRoleInfo
self.model = CSGWarModel:GetInstance()
self.model:Fire(CSGWarConst.REQ_CSGWAR_SCMD, 60101)
self.model:Fire(CSGWarConst.REQ_CSGWAR_SCMD, 60102)
self.model:Fire(CSGWarConst.REQ_CSGWAR_SCMD, 60103,1)
self.model:Fire(CSGWarConst.REQ_CSGWAR_SCMD, 60105,0,1)
self.show_item_list = {}--展示城区item
self.sign_item_list = {}--报名阶段item
self.cur_area_index = 1--当前选择的战区 1主2副
self.cur_sign_index = 1--当前选择的报名列表 1本社团2应援
self:Load()
end
function CSGWarSubView:Load_callback()
self.nodes = {
"show_con/power_text:txt", "tip_text:tmp", "instruction_btn:obj",
"sign_con:obj", "show_con/show_item_con", "bg:obj:raw", "support_btn:obj",
"record_btn:obj", "show_con:obj", "show_con/occupy_server_text:tmp", "reward_btn:obj",
"show_con/receive_image:obj:img", "sign_con/sign_btn:obj:imgex", "show_con/guild_text:tmp",
"sign_con/sign_item_con", "sign_con/list_scroll", "bg2:obj:raw", "sign_con/enter_btn:obj",
"show_con/name_text:tmp", "show_con/occupy_bg:obj", "sign_con/list_scroll/Viewport/list_con",
"show_con/occupy_text:tmp", "show_con/role_con", "show_con/reward_image:obj:img",
"sign_con/rank_text:tmp", "sign_con/sign_btn/sign_btn_text:tmp",
"support_btn/support_btn_red:obj", "show_con/reward_red_image:obj",
"sign_con/enter_btn/enter_btn_red:obj", "sign_con/title_text:tmp",
"sign_con/unsign_btn:obj","sign_con/unsign_btn/unsign_btn_text:tmp",
"sign_con/lb_time:tmp",
"open_tips_btn:obj",
"open_tips_btn/open_tips_red:obj",
}
self:GetChildren(self.nodes)
self:AddEvents()
lua_resM:setOutsideRawImage(self,self.bg_raw,GameResPath.GetViewBigBg("CSGWar_sub_bg"),false)
lua_resM:setOutsideRawImage(self,self.bg2_raw,GameResPath.GetViewBigBg("CSGWar_sub_bg2"),false)
self.unsign_btn_text_tmp.text = "取消报名"
local cfg1 = self.model:GetCSGWarKVCFG("sign_up_help_max")
local cfg2 = self.model:GetCSGWarKVCFG("sign_up_max")
if cfg1 then
self.support_role_max = cfg1.value
else
self.support_role_max = 0
end
if cfg2 then
self.sign_role_max = cfg2.value
else
self.sign_role_max = 0
end
self:MoveUIToBack(self.bg)
self:MoveUIToBack(self.bg2)
if self.need_refreshData then
self:UpdateView()
end
end
function CSGWarSubView:AddEvents( )
local function on_click( target )
if target == self.sign_btn_obj then
local data = self.model:GetCSGWarBaseInfo()
if data and TableSize(data) > 0 and ( data.state ~= CSGWarConst.CSGWAR_STATE.SIGN) then
Message.show("现在还不是报名阶段哦~")
return
end
if self.model:IsCSGWarSign() then
-- local function ok( ... )
-- self.model:Fire(CSGWarConst.REQ_CSGWAR_SCMD, 60106, 0)
-- end
-- local ask_str = "是否取消报名?"
-- Alert.show(ask_str,Alert.Type.Two,ok)
else
-- 检查CD
local last_sign_time = self.model:GetLastSignTime( )
local remain_time = TimeUtil:getServerTime( ) - last_sign_time
if remain_time > CSGWarConst.SIGN_CD then -- 三十分钟
self.model:Fire(CSGWarConst.REQ_CSGWAR_SCMD, 60106, 1)
else -- 没够三十分钟
local tip_str = string.format('%s后可报名', TimeUtil:timeConvert2(CSGWarConst.SIGN_CD - remain_time))
Message.show(tip_str)
end
end
elseif target == self.unsign_btn_obj then
local function ok( ... )
self.model:Fire(CSGWarConst.REQ_CSGWAR_SCMD, 60106, 0)
end
local ask_str = string.format("是否取消报名?\n(取消报名后%s内不可再次报名)",
HtmlColorTxt(TimeUtil:timeConvert2(CSGWarConst.SIGN_CD), ColorUtil.GREEN_DARK) )
Alert.show(ask_str,Alert.Type.Two,ok)
elseif target == self.support_btn_obj then
local data = self.model:GetCSGWarBaseInfo()
if data and TableSize(data) > 0 and (data.state == CSGWarConst.CSGWAR_STATE.SUPPORT or data.state == CSGWarConst.CSGWAR_STATE.SIGN) then
self.model:Fire(CSGWarConst.OPEN_CSGWAR_SUPPORT_VIEW)
else
Message.show("现在还不是应援阶段哦~")
end
elseif target == self.instruction_btn_obj then
self.model:Fire(CSGWarConst.OPEN_CSGWAR_INSTRUCTION_VIEW)
elseif target == self.record_btn_obj then
self.model:Fire(CSGWarConst.OPEN_CSGWAR_RECORD_VIEW)
elseif target == self.reward_btn_obj then
self.model:Fire(CSGWarConst.OPEN_CSGWAR_REWARD_VIEW)
elseif target == self.enter_btn_obj then
self.model:Fire(CSGWarConst.REQ_CSGWAR_SCMD, 60108)
elseif target == self.reward_image_obj then
self.model:Fire(CSGWarConst.REQ_CSGWAR_SCMD, 60107, self.cur_area_index, 1)
elseif target == self.open_tips_btn_obj then
GuildModel.getInstance():SetWarActiveRedDot(601, 1, false)
GuildModel.getInstance():Fire(GuildModel.OPEN_ACTIVE_OPEN_TIPS_VIEW, true)
end
end
AddClickEvent(self.sign_btn_obj, on_click)
AddClickEvent(self.unsign_btn_obj, on_click)
AddClickEvent(self.support_btn_obj, on_click)
AddClickEvent(self.instruction_btn_obj, on_click)
AddClickEvent(self.record_btn_obj, on_click)
AddClickEvent(self.reward_btn_obj, on_click)
AddClickEvent(self.enter_btn_obj, on_click)
AddClickEvent(self.reward_image_obj, on_click)
AddClickEvent(self.open_tips_btn_obj, on_click)
local function on_update_active_state( )
self:UpdateActiveState()
if self.view_type == "show" then
self:UpdateShowItem()
self:UpdateCentralInfo()
end
end
self.on_update_active_state_id = self.model:BindOne("CSGWar_base_info", on_update_active_state)
local function on_update_sign_item( )
self:UpdateActiveState()
self:UpdateSignItem()
end
self.on_update_sign_item_id = self.model:BindOne("CSGWar_sign_info", on_update_sign_item)
local function on_update_show_item( )
self:UpdateShowItem()
self:UpdateCentralInfo()
end
self.on_update_show_item_id = self.model:BindOne("CSGWar_occupy_info", on_update_show_item)
local function on_update_player_list( )
self:UpdateSignPlayerList()
end
self.on_update_player_list_id = self.model:Bind(CSGWarConst.UPDATE_CSGWAR_SIGN_LIST, on_update_player_list)
local function on_update_red( )
self:UpdateRedDot()
end
self.on_update_red_id = self.model:Bind(CSGWarConst.ANS_CSGWAR_RED, on_update_red)
local function onShowACtiveOpenTipsRed()
self.open_tips_red_obj:SetActive(GuildModel.getInstance():GetWarActiveRedDot(601, 1))
end
self:BindEvent(GuildModel.getInstance(), GuildModel.SHOW_ACTIVE_OPEN_TIPS_RED, onShowACtiveOpenTipsRed)
self.open_tips_red_obj:SetActive(GuildModel.getInstance():GetWarActiveRedDot(601, 1))
end
function CSGWarSubView:UpdateView( )
self:UpdateActiveState()
self:UpdateSignPlayerList()
self:SwitchAreaTab()
end
function CSGWarSubView:UpdateActiveState( )
if self.model:IsCSGWarOpen() then--活动开始的时候只能显示报名信息
self.view_type = "sign"
else
self.view_type = "show"
end
self.bg_obj:SetActive(self.view_type == "show")
self.bg2_obj:SetActive(self.view_type == "sign")
self.sign_con_obj:SetActive(self.view_type == "sign")
self.show_con_obj:SetActive(self.view_type == "show")
local str = ChuanWenManager:getInstance():FormatColorTag2(CSGWarConst.TIP_DESC, true)
self.tip_text_tmp.text = str
-- if self.view_type == "sign" then
-- SetAnchoredPosition(self.tip_text, -262, -190)
-- else
-- SetAnchoredPosition(self.tip_text, -262, -270)
-- end
local last_sign_time = self.model:GetLastSignTime( )
local end_show_time = last_sign_time + CSGWarConst.SIGN_CD
local sign_is_in_cd = end_show_time and end_show_time - TimeUtil:getServerTime() > 0
self.unsign_btn_obj:SetActive(false)
local data = self.model:GetCSGWarBaseInfo()
if data and TableSize(data) > 0 then
self.enter_btn_obj:SetActive(data.state == CSGWarConst.CSGWAR_STATE.START)
self.sign_btn_obj:SetActive(data.state == CSGWarConst.CSGWAR_STATE.SIGN or data.state == CSGWarConst.CSGWAR_STATE.SUPPORT)
self.sign_btn_imgex.gray = data.state ~= CSGWarConst.CSGWAR_STATE.SIGN or sign_is_in_cd
if data.state ~= CSGWarConst.CSGWAR_STATE.SIGN or sign_is_in_cd then
SetTMPSharedMaterial(self.sign_btn_text_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
else
SetTMPSharedMaterial(self.sign_btn_text_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn)
end
if data.state == CSGWarConst.CSGWAR_STATE.SIGN then
local is_sign = self.model:IsCSGWarSign()
self.sign_btn_obj:SetActive(not is_sign)
self.unsign_btn_obj:SetActive(is_sign)
self.sign_btn_text_tmp.text = "我要报名"
else
self.sign_btn_text_tmp.text = "报名截止"
end
self:SetSignCDTimerShow()
end
end
-- 报名冷却倒计时
function CSGWarSubView:SetSignCDTimerShow( )
if self.model:IsCSGWarSign() then -- 已经报了
self.lb_time_tmp.text = ""
return
end
local last_sign_time = self.model:GetLastSignTime( )
local remain_time = TimeUtil:getServerTime( ) - last_sign_time
local end_show_time = last_sign_time + CSGWarConst.SIGN_CD
if end_show_time and end_show_time - TimeUtil:getServerTime() > 0 then
local function onTimer()
local sec = end_show_time - TimeUtil:getServerTime()
if sec > 0 then
self.lb_time_tmp.text = string.format("%s后可再次报名" ,TimeUtil:timeConvert3(sec))
else
self:UpdateActiveState( )
self.lb_time_tmp.text = ""
GlobalTimerQuest:CancelQuest(self.timer_id)
self.timer_id = nil
end
end
if not self.timer_id then
self.timer_id = GlobalTimerQuest:AddPeriodQuest(onTimer, 1, -1)
end
else
self.lb_time_tmp.text = ""
end
end
--更新中心城区信息
function CSGWarSubView:UpdateCentralInfo( )
local data = self.model:GetCSGWarOccupyInfo() or {}
if data[1] then
local guild_str = GetCSLongName(data[1].guild_name, data[1].server_num, false, ColorUtil.GREEN_DARK)
local boss_str = string.format("%s %s", HtmlColorTxt("团长:", ColorUtil.YELLOW_DARK), data[1].chief_name)
local str = string.format("%s\n%s", guild_str, boss_str)
self.occupy_text_tmp.text = str
-- self.occupy_server_text_tmp.text = GetCSLongName("服", data[1].server_num, true)
self.occupy_server_text_tmp.text = KfWorldModel:GetInstance():GetContrayNameById(data[1].fact_id)
local server_id = RoleManager.Instance.mainRoleInfo.server_id
self.reward_image_obj:SetActive(server_id == data[1].server_id)
self.receive_image_obj:SetActive(data[1].is_received_reward == 1)
if data[1].is_received_reward == 1 then
lua_resM:setImageSprite(self, self.reward_image_img, "CSGWar_asset", "CSGWar_item3")
else
lua_resM:setImageSprite(self, self.reward_image_img, "CSGWar_asset", "CSGWar_item2")
end
self.guild_text_tmp.text = guild_str
self.name_text_tmp.text = boss_str
self.power_text_txt.text = "f"..data[1].chief_power
self:SetRoleModel(data[1].chief_id)
else
local guild_str = "暂无社团占领"
local boss_str = "团长: 暂无"
local str = string.format("%s\n%s", guild_str, boss_str)
self.occupy_text_tmp.text = str
self.occupy_server_text_tmp.text = "暂无社团占领"
self.receive_image_obj:SetActive(false)
self.reward_image_obj:SetActive(false)
self.guild_text_tmp.text = guild_str
self.name_text_tmp.text = boss_str
self.power_text_txt.text = ""
self:SetRoleModel()
end
end
function CSGWarSubView:UpdateShowItem( )
local data = self.model:GetCSGWarOccupyInfo() or {}
-- print("HWR:CSGWarSubView [start:177] data:", data)
-- PrintTable(data)
-- print("HWR:CSGWarSubView [end]")
local x_offset = 352
local y_offset = 208
for i=1,4 do
local item = self.show_item_list[i]
if not item then
item = CSGWarSubShowItem.New(self.show_item_con)
item:SetPosition((i - 1) % 2 * x_offset-6, -math.floor((i - 1) / 2) * y_offset+8)
self.show_item_list[i] = item
end
item:SetData(data[i+1], i, self.cur_area_index)
end
end
function CSGWarSubView:UpdateSignItem( )
local data = self.model:GetCSGWarSignInfo() or {}
-- print("HWR:CSGWarSubView [start:192] data:", data)
-- PrintTable(data)
-- print("HWR:CSGWarSubView [end]")
local x_offset = 352
local y_offset = 208
for i=1,4 do
local item = self.sign_item_list[i]
if not item then
item = CSGWarSubSignItem.New(self.sign_item_con)
item:SetPosition((i - 1) % 2 * x_offset-6, -math.floor((i - 1) / 2) * y_offset+8)
self.sign_item_list[i] = item
end
item:SetData(data[i], i)
end
end
--更新报名玩家列表
function CSGWarSubView:UpdateSignPlayerList( )
local data = {}
local is_fight_guild = self.model:IsCSGWarFightGuild(self.mainVo.guild_id)
if is_fight_guild then
data = self.model:GetCSGWarGuildSignList()
self.rank_text_tmp.text = string.format("战力排名前 %s 的玩家可进入\n战场参加比赛", HtmlColorTxt(self.sign_role_max, ColorUtil.YELLOW_DARK))
self.title_text_tmp.text = "社团参战成员榜"
else
data = self.model:GetCSGWarSupportSignList()
self.rank_text_tmp.text = string.format("战力排名前 %s 的玩家可进入\n战场参加比赛", HtmlColorTxt(self.support_role_max, ColorUtil.YELLOW_DARK))
self.title_text_tmp.text = "本国协助参战榜"
end
if not self.sign_list_com then
self.sign_list_com = self:AddUIComponent(UI.ItemListCreator)
end
if self.need_sign_list_reset then
self.sign_list_com:Reset()
self.need_sign_list_reset = false
end
local info = {
data_list = data,
item_con = self.list_con,
scroll_view = self.list_scroll,
item_class = CSGWarSubPlayerItem,
start_y = 0, start_x = 4,
create_frequency = 0.02,
create_num_per_time = 3,
item_height = 42,
space_y = 3,
on_update_item = function(item, i, v)
item:SetData(i, v)
end,
}
self.sign_list_com:UpdateItems(info)
end
function CSGWarSubView:SetData( data )
self.data = data
if self.is_loaded then
self.need_refreshData = false
self:UpdateView()
self:SetRoleModel(self.role_id)
else
self.need_refreshData = true
end
end
function CSGWarSubView:SetRoleModel( role_id )
role_id = role_id or 0
self.role_id = role_id
if role_id ~= 0 then
SetLocalScale(self.role_con, 1, 1, 1)
else
SetLocalScale(self.role_con, 0.001, 0.001, 0.001)
end
local res_data = {
father_node = self,
transform = self.role_con,
fashion_type = FuncOpenModel.TypeId.Clothes,
size = Vector2(720,720),
scale = 180,
position = Vector3(35,-10,0),
ui_model_type = UIModelCommon.ModelType.BackModel,
}
FuncOpenModel:getInstance():SetRoleModelByID(role_id, res_data)
end
--切换主副战区按钮
function CSGWarSubView:SwitchAreaTab( )
-- self.cur_area_index = index
-- if index == 1 then
-- lua_resM:setImageSprite(self, self.tab_area_btn1_img, "CSGWar_asset", "CSGWar_item8")
-- lua_resM:setImageSprite(self, self.tab_area_btn2_img, "CSGWar_asset", "CSGWar_item9")
-- self.tab_area_btn_text1_tmp.color = ColorUtil:ConvertHexToRGBColor("6e81bf")
-- self.tab_area_btn_text2_tmp.color = ColorUtil:ConvertHexToRGBColor("edeaea")
-- else
-- lua_resM:setImageSprite(self, self.tab_area_btn1_img, "CSGWar_asset", "CSGWar_item9")
-- lua_resM:setImageSprite(self, self.tab_area_btn2_img, "CSGWar_asset", "CSGWar_item8")
-- self.tab_area_btn_text1_tmp.color = ColorUtil:ConvertHexToRGBColor("edeaea")
-- self.tab_area_btn_text2_tmp.color = ColorUtil:ConvertHexToRGBColor("6e81bf")
-- end
local is_fight_guild = self.model:IsCSGWarFightGuild(self.mainVo.guild_id)
if self.view_type == "sign" then
self.model:Fire(CSGWarConst.REQ_CSGWAR_SCMD, 60105, is_fight_guild and 0 or 1)--0是本社团 1是外援
self:UpdateSignItem()
self:UpdateSignPlayerList()
else
self:UpdateShowItem()
end
self:UpdateCentralInfo()
self:UpdateRedDot()
end
function CSGWarSubView:SwitchSignTab( index )
do return end
if self.cur_sign_index ~= index then
self.model:Fire(CSGWarConst.REQ_CSGWAR_SCMD, 60105,index-1,self.cur_area_index)
end
self.cur_sign_index = index
if index == 1 then
lua_resM:setImageSprite(self, self.tab_sign_btn1_img, "CSGWar_asset", "CSGWar_item10")
lua_resM:setImageSprite(self, self.tab_sign_btn2_img, "CSGWar_asset", "CSGWar_item11")
self.tab_sign_btn_text1_tmp.color = ColorUtil:ConvertHexToRGBColor("6e81bf")
self.tab_sign_btn_text2_tmp.color = ColorUtil:ConvertHexToRGBColor("edeaea")
else
lua_resM:setImageSprite(self, self.tab_sign_btn1_img, "CSGWar_asset", "CSGWar_item11")
lua_resM:setImageSprite(self, self.tab_sign_btn2_img, "CSGWar_asset", "CSGWar_item10")
self.tab_sign_btn_text1_tmp.color = ColorUtil:ConvertHexToRGBColor("edeaea")
self.tab_sign_btn_text2_tmp.color = ColorUtil:ConvertHexToRGBColor("6e81bf")
end
if self.cur_sign_index == 1 then
self.rank_text_tmp.text = string.format("战力排名前%s的社团团员可进入战场参加比赛", HtmlColorTxt(20,"ffea9c"))
else
if self.cur_area_index == 1 then
self.rank_text_tmp.text = string.format("战力排名前%s的外援可进入战场参加比赛", HtmlColorTxt(10,"ffea9c"))
else
self.rank_text_tmp.text = string.format("战力排名%s的外援可进入战场参加比赛", HtmlColorTxt("10~20","ffea9c"))
end
end
if self.view_type == "sign" then
self:UpdateSignItem()
self:UpdateSignPlayerList()
else
self:UpdateShowItem()
end
end
function CSGWarSubView:UpdateRedDot( )
local red_data = self.model:GetCSGWarRedData()
-- print("HWR:CSGWarSubView [start:342] red_data:", red_data)
-- PrintTable(red_data)
-- print("HWR:CSGWarSubView [end]")
if red_data.support_red then
self.support_btn_red_obj:SetActive(true)
else
self.support_btn_red_obj:SetActive(false)
end
if red_data.fight_red then
self.enter_btn_red_obj:SetActive(true)
else
self.enter_btn_red_obj:SetActive(false)
end
if red_data.occupy_red and red_data.occupy_red_data[1] then
self.reward_red_image_obj:SetActive(true)
else
self.reward_red_image_obj:SetActive(false)
end
end
function CSGWarSubView:__delete( )
if self.on_update_active_state_id then
self.model:UnBind(self.on_update_active_state_id)
self.on_update_active_state_id = nil
end
if self.on_update_sign_item_id then
self.model:UnBind(self.on_update_sign_item_id)
self.on_update_sign_item_id = nil
end
if self.on_update_show_item_id then
self.model:UnBind(self.on_update_show_item_id)
self.on_update_show_item_id = nil
end
if self.on_update_player_list_id then
self.model:UnBind(self.on_update_player_list_id)
self.on_update_player_list_id = nil
end
for i,v in ipairs(self.show_item_list) do
v:DeleteMe()
v = nil
end
self.show_item_list = {}
for i,v in ipairs(self.sign_item_list) do
v:DeleteMe()
v = nil
end
self.sign_item_list = {}
if not self.model.has_open_csgwar_view then
self.model.has_open_csgwar_view = true
self.model:Fire(CSGWarConst.UPDATE_CSGWAR_RED)
end
if self.on_update_red_id then
self.model:UnBind(self.on_update_red_id)
self.on_update_red_id = nil
end
if self.timer_id then
GlobalTimerQuest:CancelQuest(self.timer_id)
self.timer_id = nil
end
end