CSGWarSceneView = CSGWarSceneView or BaseClass(BaseView)
|
|
local CSGWarSceneView = CSGWarSceneView
|
|
--[[
|
|
CSGWarSceneView.TabData = {
|
|
[1] = {name = "人物", level = MainRoleModel.TabOpenLevel[1]},
|
|
}
|
|
--]]
|
|
|
|
function CSGWarSceneView:__init()
|
|
self.base_file = "CSGWar"
|
|
self.layout_file = "CSGWarSceneView"
|
|
self.layer_name = "Main"
|
|
self.destroy_imm = true
|
|
self.use_background = false --全屏界面默认使用这个参数
|
|
--self.hide_maincancas = true --全屏界面需要放开隐藏主UI
|
|
self.change_scene_close = false
|
|
self.append_to_ctl_queue = false --是否要添加进界面堆栈
|
|
self.need_show_money = false --是否要显示顶部的金钱栏
|
|
self.is_first = true
|
|
self.is_show_order = false
|
|
self.model = CSGWarModel:getInstance()
|
|
self.model:Fire(CSGWarConst.REQ_CSGWAR_SCMD, 60110)
|
|
self.buff_item = {}
|
|
self.has_show_dialog = false
|
|
self.is_show_left_time = false
|
|
self.city_list = {}
|
|
self.order_list = {}
|
|
self.load_callback = function ()
|
|
self:LoadSuccess()
|
|
end
|
|
self.open_callback = function ( )
|
|
self:OpenSuccess()
|
|
end
|
|
self.switch_callback = function(index)
|
|
self:SwitchTab(index)
|
|
end
|
|
self.destroy_callback = function ( )
|
|
self:DestroySuccess()
|
|
end
|
|
end
|
|
|
|
function CSGWarSceneView:Open( )
|
|
--self.data = data
|
|
BaseView.Open(self)
|
|
end
|
|
|
|
function CSGWarSceneView:LoadSuccess()
|
|
local nodes = {
|
|
"left_con/time_text:tmp", "left_con/city_con", "left_con", "right_con",
|
|
"middle_con/order_con:obj", "middle_con:obj", "middle_con/btnCon/order_btn:obj", "middle_con/btnCon/defend_btn:obj", "middle_con/btnCon/attack_btn:obj",
|
|
"right_con/instruction_btn:obj", "right_con/exit_btn:obj",
|
|
}
|
|
self:GetChildren(nodes)
|
|
self:AddEvent()
|
|
self.country = KfWorldModel:GetInstance():GetMyCountryId()
|
|
SetAnchoredPosition(self.transform, 0, 0)
|
|
self.transform.sizeDelta = Vector3(ScreenWidth, ScreenHeight)
|
|
SetAnchoredPositionX(self.instruction_btn, -134)
|
|
self:ChangeUiPosition()
|
|
self.model:Fire(CSGWarConst.OPEN_CSGWAR_INSTRUCTION_VIEW, true)
|
|
self.exit_btn_obj:SetActive(false)
|
|
if not self.init_exit_btn then
|
|
self.init_exit_btn = true
|
|
local function call_back( ... )
|
|
local ok = function ( )
|
|
self.model:Fire(CSGWarConst.REQ_CSGWAR_SCMD, 60109)
|
|
end
|
|
Alert.show("即将退出跨国团战,是否确定?",Alert.Type.Two,ok)
|
|
end
|
|
local data = {call_back = call_back, pos = {x = 196,y = 275}} -- pos 为左侧侧边栏的长度
|
|
GlobalEventSystem:Fire(EventName.SHOW_EXIT_BTN_STATE, data)
|
|
end
|
|
end
|
|
|
|
function CSGWarSceneView:AddEvent()
|
|
--适配刘海屏
|
|
local function onOrientationChange()
|
|
self:ChangeUiPosition()
|
|
end
|
|
self.orientation_change_id = GlobalEventSystem:Bind(EventName.ORIENTATION_DID_CHANGE, onOrientationChange)
|
|
local function changeFunc(is_hide)
|
|
-- self.exit_btn_obj:SetActive(is_hide)
|
|
self.instruction_btn_obj:SetActive(is_hide)
|
|
end
|
|
self.change_icon_event_id = GlobalEventSystem:Bind(EventName.CHANGE_RIGHT_TIP_ICON, changeFunc)
|
|
local function on_update_blood( )
|
|
self:UpdateCityBlood()
|
|
end
|
|
self.on_update_blood_id = self.model:Bind(CSGWarConst.UPDATE_CSGWAR_CITY_INFO, on_update_blood)
|
|
|
|
local function on_update_btn_state( )
|
|
self:UpdateOrderBtn()
|
|
end
|
|
self.on_update_btn_state_id = self.model:BindOne("CSGWar_sign_info", on_update_btn_state)
|
|
local function on_show_command( id )
|
|
if id then
|
|
local cfg = Config.Crossguildwarscene[id]
|
|
local str = string.format("团长下令:请火速赶往%s", cfg.name)
|
|
local special_tip_data = {
|
|
type = SpecialTipType.Middle,
|
|
sepeical_str = str,
|
|
need_flash = true,
|
|
show_time = 10,
|
|
}
|
|
CommonController.Instance:Fire(EventName.OPEN_SPECIALTIPVIEW, special_tip_data)
|
|
local temp_head_name = RoleManager.Instance.mainRoleInfo.name
|
|
-- local str = string.format("团长下令全员前往%s!", cfg.name)
|
|
-- local data = {
|
|
-- head_type = 1004,
|
|
-- desc = str,
|
|
-- head_name = temp_head_name or "",
|
|
-- hide_time = 15,
|
|
-- dalay_time = 1,
|
|
-- is_task_type = true,
|
|
-- pos = Vector3(230,0,0),
|
|
-- }
|
|
-- GlobalEventSystem:Fire(EventName.SHOW_COM_DIALOGUE_SHOW_VIEW,data)
|
|
end
|
|
end
|
|
self.on_show_command_id = self.model:Bind(CSGWarConst.SHOW_CSGWAR_COMMAND, on_show_command)
|
|
|
|
local function on_click( target )
|
|
if self.order_btn_obj == target then
|
|
self.is_show_order = not self.is_show_order
|
|
self:ShowOrderCon(self.is_show_order)
|
|
elseif self.exit_btn_obj == target then
|
|
local ok = function ( )
|
|
self.model:Fire(CSGWarConst.REQ_CSGWAR_SCMD, 60109)
|
|
end
|
|
Alert.show("即将退出跨国团战,是否确定?",Alert.Type.Two,ok)
|
|
elseif self.defend_btn_obj == target then
|
|
self:GoNearestCity(false,1)
|
|
elseif self.attack_btn_obj == target then
|
|
self:GoNearestCity(true,2)
|
|
elseif self.instruction_btn_obj == target then
|
|
self.model:Fire(CSGWarConst.OPEN_CSGWAR_INSTRUCTION_VIEW)
|
|
end
|
|
end
|
|
AddClickEvent(self.order_btn_obj, on_click)
|
|
AddClickEvent(self.exit_btn_obj, on_click)
|
|
AddClickEvent(self.defend_btn_obj, on_click)
|
|
AddClickEvent(self.attack_btn_obj, on_click)
|
|
AddClickEvent(self.instruction_btn_obj, on_click)
|
|
|
|
self:BindLittleMove(self.middle_con, BaseView.LittleMoveDir.Bottom, 147.5)
|
|
self:BindLittleMove(self.left_con, BaseView.LittleMoveDir.Left, 0)
|
|
self:BindLittleMove(self.right_con, BaseView.LittleMoveDir.Right, 0)
|
|
|
|
-- 主界面聊天展开事件
|
|
self:BindMainUIExpandEvent( self.middle_con )
|
|
end
|
|
|
|
--寻路到最近的城
|
|
function CSGWarSceneView:GoNearestCity( is_attack,go_type )
|
|
local data = self.model:GetCSGWarCityInfo()
|
|
local has_city = self:HasOccupy(data)
|
|
local near_index = nil
|
|
local cfg = Config.Crossguildwarscene
|
|
local main_role = Scene.Instance:GetMainRole()
|
|
local main_role_pos = CoVector2.New(main_role.real_pos.x,main_role.real_pos.y)
|
|
local near_pos = 9999999
|
|
local dis = 0
|
|
local city_pos = CoVector2.New(0,0)
|
|
local temp_pos = {}
|
|
for i,v in ipairs(cfg) do
|
|
--如果没有占领城 就不去核心城了
|
|
if not has_city and i == 1 then
|
|
else
|
|
local need_cal = false
|
|
local city_data = data[i]
|
|
if city_data then
|
|
if self.country == city_data.group and city_data.group ~= 0 then
|
|
--如果是自己的城 且不是攻击才参与计算距离
|
|
need_cal = not is_attack
|
|
else
|
|
--如果不是自己的城 且是攻击才参与计算距离
|
|
need_cal = is_attack
|
|
end
|
|
end
|
|
if need_cal then--经过上面的判断才知道符不符合条件
|
|
temp_pos = stringtotable(v.flag)
|
|
city_pos.x = temp_pos[2]
|
|
city_pos.y = temp_pos[3]
|
|
dis = CoVector2.distance(main_role_pos,city_pos)
|
|
if dis < near_pos then
|
|
near_pos = dis
|
|
near_index = i
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if near_index then
|
|
local city_pos = cfg[near_index].city_pos
|
|
if not city_pos then
|
|
city_pos = stringtotable(cfg[near_index].flag)
|
|
end
|
|
local function call_back( ... )
|
|
GlobalEventSystem:Fire(EventName.STARTAUTOFIGHT)
|
|
end
|
|
local findVo = FindVo.New()
|
|
findVo.sceneId = SceneManager.Instance:GetSceneId()
|
|
findVo.type = FindVo.POINT
|
|
findVo.x = city_pos[2]/ SceneObj.LogicRealRatio.x
|
|
findVo.y = city_pos[3]/ SceneObj.LogicRealRatio.y
|
|
findVo.call_back = call_back
|
|
GlobalEventSystem:Fire(EventName.FIND,findVo)
|
|
|
|
if go_type == 1 then
|
|
Message.show("准备前往我方城池进行守卫!")
|
|
elseif go_type == 2 then
|
|
Message.show("准备前往敌方城池进行攻击!")
|
|
end
|
|
else
|
|
local str = ""
|
|
if is_attack then
|
|
str = "太厉害了!您已经占领了全部地区!"
|
|
else
|
|
str = "您现在没有占领任何地区!"
|
|
end
|
|
Message.show(str)
|
|
end
|
|
end
|
|
|
|
function CSGWarSceneView:ChangeUiPosition( )
|
|
SetAnchoredPositionX(self.right_con.transform, -ClientConfig.iphone_x_offset_right)
|
|
SetAnchoredPosition(self.left_con.transform, ClientConfig.iphone_x_offset_left, -169)
|
|
end
|
|
|
|
function CSGWarSceneView:OpenSuccess()
|
|
self:UpdateView()
|
|
end
|
|
|
|
function CSGWarSceneView:UpdateView()
|
|
self:UpdateCityBlood()
|
|
self:UpdateOrderBtn()
|
|
self:StartLeftTime()
|
|
self:UpdateOccupyBuff()
|
|
end
|
|
|
|
function CSGWarSceneView:SwitchTab( index )
|
|
|
|
end
|
|
|
|
function CSGWarSceneView:UpdateCityBlood( )
|
|
local near_index = nil
|
|
if self.is_first then
|
|
self.is_first = false
|
|
local cfg = Config.Crossguildwarscene
|
|
local main_role = Scene.Instance:GetMainRole()
|
|
local main_role_pos = CoVector2.New(main_role.real_pos.x,main_role.real_pos.y)
|
|
local near_pos = 9999999
|
|
local dis = 0
|
|
local city_pos = CoVector2.New(0,0)
|
|
local temp_pos = {}
|
|
for i,v in ipairs(cfg) do
|
|
temp_pos = stringtotable(v.flag)
|
|
city_pos.x = temp_pos[2]
|
|
city_pos.y = temp_pos[3]
|
|
dis = CoVector2.distance(main_role_pos,city_pos)
|
|
if dis < near_pos then
|
|
near_pos = dis
|
|
near_index = i
|
|
end
|
|
end
|
|
end
|
|
|
|
local select_callback = function( index )
|
|
for i,v in ipairs(self.city_list) do
|
|
v:SetSelected(i == index)
|
|
end
|
|
end
|
|
local data = self.model:GetCSGWarCityInfo()
|
|
local has_city = self:HasOccupy(data)
|
|
local y_offset = 48
|
|
for i=1,5 do
|
|
local item = self.city_list[i]
|
|
if not item then
|
|
item = CSGWarCityItem.New(self.city_con)
|
|
item:SetPosition(0, -(i-1)*y_offset)
|
|
self.city_list[i] = item
|
|
end
|
|
item:SetData(data[i], i, has_city, near_index, select_callback)
|
|
end
|
|
end
|
|
--获取本阵营是否有占领某一个副城
|
|
function CSGWarSceneView:HasOccupy( data )
|
|
local bool = false
|
|
for i=1,5 do
|
|
if data[i] then
|
|
if data[i].group ~= 0 and data[i].group == self.country then
|
|
bool = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
return bool
|
|
end
|
|
|
|
function CSGWarSceneView:StartLeftTime()
|
|
if self.exit_timer_id then
|
|
GlobalTimerQuest:CancelQuest(self.exit_timer_id)
|
|
self.exit_timer_id = nil
|
|
end
|
|
local data = self.model:GetCSGWarBaseInfo()
|
|
if TableSize(data) == 0 then return end
|
|
local left_time = math.max(0,data.etime - TimeUtil:getServerTime())
|
|
if left_time <= 0 then
|
|
|
|
else
|
|
local function onExitTimer()
|
|
left_time = data.etime - TimeUtil:getServerTimeMs() / 1000
|
|
if left_time <= 300 and not self.has_show_dialog then
|
|
self:ShowTimeDialog()
|
|
end
|
|
if left_time <= 15 then
|
|
self:ShowLeftTime(left_time)
|
|
end
|
|
if left_time > 0 then
|
|
self.time_text_tmp.text = string.format("活动剩余时间:%s",HtmlColorTxt(TimeUtil:convertMillisecondTime(left_time), ColorUtil.GREEN_DARK))
|
|
else
|
|
if self.exit_timer_id then
|
|
GlobalTimerQuest:CancelQuest(self.exit_timer_id)
|
|
self.exit_timer_id = nil
|
|
end
|
|
end
|
|
end
|
|
onExitTimer()
|
|
self.exit_timer_id = GlobalTimerQuest:AddPeriodQuest(onExitTimer, 0.03, -1)
|
|
end
|
|
end
|
|
|
|
function CSGWarSceneView:ShowLeftTime( left_time )
|
|
if self.is_show_left_time then
|
|
return
|
|
end
|
|
self.is_show_left_time = true
|
|
left_time = math.floor(left_time)
|
|
local data = {
|
|
time = left_time,
|
|
time_str = "秒后",
|
|
exit_desc = "自动退出",
|
|
}
|
|
GlobalEventSystem:Fire(EventName.OPEN_EXIT_TIME_TIP, data, true)
|
|
end
|
|
|
|
|
|
function CSGWarSceneView:ShowTimeDialog( )
|
|
if self.has_show_dialog then
|
|
return
|
|
end
|
|
local temp_head_name = RoleManager.Instance.mainRoleInfo.name
|
|
local str = "这是最后的时刻了!一定要拿下核心区!"
|
|
local data = {
|
|
head_type = 1004,
|
|
desc = str,
|
|
head_name = temp_head_name or "",
|
|
hide_time = 15,
|
|
dalay_time = 1,
|
|
is_task_type = true,
|
|
pos = Vector3(230,0,0),
|
|
}
|
|
GlobalEventSystem:Fire(EventName.SHOW_COM_DIALOGUE_SHOW_VIEW,data)
|
|
self.has_show_dialog = true
|
|
end
|
|
|
|
function CSGWarSceneView:UpdateOrderBtn( )
|
|
local my_guild_id = RoleManager.Instance.mainRoleInfo.guild_id
|
|
local is_fight_guild = self.model:IsCSGWarFightGuild(my_guild_id)
|
|
local is_leader = RoleManager.Instance.mainRoleInfo.position == GuildModel.GuildPosition.Leader or RoleManager.Instance.mainRoleInfo.position == GuildModel.GuildPosition.ViceLeader
|
|
self.order_btn_obj:SetActive(is_fight_guild and is_leader)
|
|
if is_fight_guild and is_leader then
|
|
else
|
|
self:ShowOrderCon(false)
|
|
end
|
|
end
|
|
|
|
function CSGWarSceneView:ShowOrderCon( bool )
|
|
self.order_con_obj:SetActive(bool)
|
|
if bool and TableSize(self.order_list) == 0 then
|
|
local y_offset = 36
|
|
for i=1,5 do
|
|
local item = self.order_list[i]
|
|
if not item then
|
|
item = CSGWarOrderItem.New(self.order_con)
|
|
item:SetPosition(0, -y_offset*(i-1))
|
|
item:SetData(i)
|
|
self.order_list[i] = item
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function CSGWarSceneView:UpdateOccupyBuff( )
|
|
local data = SandTableModel:getInstance():GetBuffListByFaction(self.country)
|
|
local x_offset = 114
|
|
local y_offset = 120
|
|
for i,v in ipairs(data) do
|
|
local item = self.buff_item[i]
|
|
if not item then
|
|
item = CSGWarBuffItem.New(self.right_con)
|
|
item:SetPosition(-((i-1)%2)*x_offset,math.floor((i-1)/2)*y_offset)
|
|
self.buff_item[i] = item
|
|
end
|
|
item:SetData(i,v)
|
|
end
|
|
-- print("HWR:CSGWarSceneView [start:357] data:", data)
|
|
-- PrintTable(data)
|
|
-- print("HWR:CSGWarSceneView [end]")
|
|
end
|
|
|
|
|
|
function CSGWarSceneView:DestroySuccess( )
|
|
GlobalEventSystem:Fire(EventName.HIDE_EXIT_BTN_STATE)
|
|
if self.orientation_change_id then
|
|
GlobalEventSystem:UnBind(self.orientation_change_id)
|
|
self.orientation_change_id = nil
|
|
end
|
|
if self.change_icon_event_id then
|
|
GlobalEventSystem:UnBind(self.change_icon_event_id)
|
|
self.change_icon_event_id = nil
|
|
end
|
|
if self.exit_timer_id then
|
|
GlobalTimerQuest:CancelQuest(self.exit_timer_id)
|
|
self.exit_timer_id = nil
|
|
end
|
|
if self.on_update_blood_id then
|
|
self.model:UnBind(self.on_update_blood_id)
|
|
self.on_update_blood_id = nil
|
|
end
|
|
if self.on_show_command_id then
|
|
self.model:UnBind(self.on_show_command_id)
|
|
self.on_show_command_id = nil
|
|
end
|
|
for i,v in ipairs(self.city_list) do
|
|
v:DeleteMe()
|
|
v = nil
|
|
end
|
|
self.city_list = {}
|
|
for i,v in ipairs(self.order_list) do
|
|
v:DeleteMe()
|
|
v = nil
|
|
end
|
|
self.order_list = {}
|
|
if self.on_update_btn_state_id then
|
|
self.model:UnBind(self.on_update_btn_state_id)
|
|
self.on_update_btn_state_id = nil
|
|
end
|
|
for i,v in ipairs(self.buff_item) do
|
|
v:DeleteMe()
|
|
v = nil
|
|
end
|
|
self.buff_item = {}
|
|
-- 清除横幅
|
|
GlobalEventSystem:Fire(EventName.OPEN_EXIT_TIME_TIP, nil, false)
|
|
CommonController.Instance:Fire(EventName.CLOSE_SPECIALTIPVIEW)
|
|
end
|