GuildEventView = GuildEventView or BaseClass(BaseItem)
|
|
local GuildEventView = GuildEventView
|
|
local ServerTimeModel = ServerTimeModel
|
|
|
|
function GuildEventView:__init(parent_wnd,prefab_asset,layer_name)
|
|
self.base_file = "guild"
|
|
self.layout_file = "GuildEventView"
|
|
self.parent_wnd = parent_wnd
|
|
self.layer_name = layer_name
|
|
|
|
-- self.full_screen = true
|
|
-- self.ani_right = 600
|
|
-- self.ani_left = -600
|
|
-- self.adjust_mid = {left = 160, right = 780}
|
|
self.model = GuildModel:getInstance()
|
|
self.open_day_offset = 0
|
|
self.server_open_this_week = false -- 是不是本周内开服
|
|
self.event_item_list = {} -- 活动入口按钮item列表
|
|
self.event_view_list = {} -- 活动海报界面item列表
|
|
|
|
self.cur_wday = os.date("*t", TimeUtil:getServerTime()).wday - 1 -- 今天是星期几,值域 1~7 周日为1,所以做个减1做正常周数的映射
|
|
if self.model.need_jump_wday and self.model.need_jump_wday>=1 and self.model.need_jump_wday<=7 then
|
|
self.cur_wday = self.model.need_jump_wday
|
|
self.model.need_jump_wday = false
|
|
end
|
|
self:Load()
|
|
end
|
|
|
|
function GuildEventView:Load_callback()
|
|
self.nodes = {
|
|
-- 左侧
|
|
"left/event_scroll", "left/event_scroll/Viewport/event_con",
|
|
"left/week_day1:tmp",
|
|
-- 右侧
|
|
"right/view_con",
|
|
-- 按钮
|
|
"left/arrow_left:obj:img", "left/arrow_right:obj:img",
|
|
}
|
|
self:GetChildren(self.nodes)
|
|
|
|
self:AddEvents()
|
|
self:UpdateView()
|
|
end
|
|
|
|
function GuildEventView:AddEvents( )
|
|
local function click_event(target)
|
|
if target == self.arrow_right_obj then -- 向右切换星期数
|
|
self:ChangeWday(1)
|
|
elseif target == self.arrow_left_obj then -- 向左切换星期数
|
|
self:ChangeWday(-1)
|
|
end
|
|
end
|
|
AddClickEvent(self.arrow_right_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH)
|
|
AddClickEvent(self.arrow_left_obj, click_event, LuaSoundManager.SOUND_UI.SWITCH)
|
|
|
|
local function chnage_day_func(type)
|
|
if type == SettingModel.CHANGE_DAY.HOUR_0 then -- 跨0点
|
|
self:CheckOpenDayInWeek()
|
|
end
|
|
end
|
|
self:BindEvent(GlobalEventSystem, EventName.CHANE_DAY, chnage_day_func)
|
|
end
|
|
|
|
-- 检查开服天数在本周的特殊情况
|
|
-- 如果是本周开服,则开服天数之前的日期不允许切换,周日->未开服天数的同理
|
|
function GuildEventView:CheckOpenDayInWeek( )
|
|
local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
|
|
-- open_day = 2 -- debug
|
|
local cur_wday = os.date("*t", TimeUtil:getServerTime()).wday - 1 -- 今天是星期几,值域 1~7 周日为1,所以做个减1做正常周数的映射
|
|
self.server_open_this_week = cur_wday > open_day -- 不用等于,因为周一开服没有影响
|
|
-- print("Saber:GuildEventView [62] self.server_open_this_week, open_day, cur_wday: ",self.server_open_this_week, open_day, cur_wday)
|
|
end
|
|
|
|
-- 修改今天是星期几,并同步修改星期几展示的活动
|
|
function GuildEventView:ChangeWday(offset)
|
|
if not offset then return end
|
|
if self.server_open_this_week then -- 需要特殊处理箭头的点击
|
|
local open_day = ServerTimeModel:getInstance():GetOpenServerDay()
|
|
-- open_day = 2 -- debug
|
|
local temp_cur_wd = self.cur_wday + offset
|
|
local temp_open_day_offset = self.open_day_offset + offset
|
|
local temp_open_day = open_day + temp_open_day_offset
|
|
temp_open_day = temp_cur_wd > 7 and temp_open_day - 7 or temp_open_day
|
|
-- print("Saber:GuildEventView [73] temp_open_day,temp_cur_wd: ",temp_open_day,temp_cur_wd)
|
|
if temp_open_day <= 0 then
|
|
return
|
|
else
|
|
self.open_day_offset = temp_open_day_offset
|
|
self.cur_wday = temp_cur_wd > 7 and temp_cur_wd - 7 or temp_cur_wd
|
|
SetImageGray(self.arrow_right_img, self.cur_wday == 7 and temp_open_day < 7) -- 周日
|
|
SetImageGray(self.arrow_left_img, temp_open_day <= 1)
|
|
end
|
|
else
|
|
self.open_day_offset = self.open_day_offset + offset
|
|
self.cur_wday = self.cur_wday + offset
|
|
-- 修改今天是星期几,要做一个范围映射
|
|
if self.cur_wday > 7 then
|
|
self.cur_wday = self.cur_wday - 7
|
|
elseif self.cur_wday < 1 then
|
|
self.cur_wday = self.cur_wday + 7
|
|
end
|
|
end
|
|
self.week_day1_tmp.text = WordManager:GetWeekStr3(self.cur_wday)
|
|
self:UpdateEventItem()
|
|
end
|
|
|
|
function GuildEventView:UpdateView( )
|
|
self:CheckOpenDayInWeek()
|
|
self:ChangeWday(0)
|
|
end
|
|
|
|
function GuildEventView:UpdateEventItem( )
|
|
local event_list = self.model:GetGuildEventByWday(self.cur_wday)
|
|
|
|
local function call_back(data, index)
|
|
self.model.select_tab_index = index
|
|
self.item_creator:IterateItems(function( item, i )
|
|
item:SetSelected(i == index)
|
|
end)
|
|
self:OpenViewByData(data)
|
|
end
|
|
self.item_creator = self.item_creator or self:AddUIComponent(UI.ItemListCreator)
|
|
local activity_index ,final_event_flag,jump_event_target_index = self:GetActivityIndex(event_list)
|
|
local info = {
|
|
data_list = event_list,
|
|
item_con = self.event_con,
|
|
scroll_view = self.event_scroll,
|
|
item_class = GuildEventTabItem,
|
|
start_x = 8,
|
|
start_y = -7,
|
|
item_height = 94+5,
|
|
space_y = 8-5,
|
|
create_frequency = 0.01,
|
|
alignment = UnityEngine.TextAnchor.UpperLeft,
|
|
is_scroll_back_on_update = true,
|
|
final_callback = function()
|
|
-- 定位
|
|
if jump_event_target_index ~= 0 then --不等于0说明是用openfun跳过来的
|
|
call_back(event_list[jump_event_target_index], jump_event_target_index)
|
|
self.item_creator:ScrollToItem(jump_event_target_index,-6)
|
|
else
|
|
call_back(event_list[activity_index], activity_index)
|
|
self.item_creator:ScrollToItem(activity_index,-6)
|
|
end
|
|
end,
|
|
on_update_item = function(item, i, v)
|
|
if final_event_flag then
|
|
item:SetData(v, i, call_back,activity_index+1)
|
|
else
|
|
item:SetData(v, i, call_back,activity_index)
|
|
end
|
|
end,
|
|
}
|
|
self.item_creator:UpdateItems(info)
|
|
|
|
self.view_con.gameObject:SetActive(not IsTableEmpty(event_list))
|
|
end
|
|
|
|
--获取当前正在进行的活动index,用于打开界面时跳转
|
|
function GuildEventView:GetActivityIndex(event_list)
|
|
local is_final_event = false --最后一个活动也结束了,进行全部置灰操作
|
|
local event_data = self.model:GetGuildEventData() --活动开启信息
|
|
local jump_event_target_index = 0 --需要通过openfun跳转到指定的活动时,返回这个index
|
|
if self.model.need_jump_event_type then --活动跳转标记
|
|
local continue_flag = true
|
|
for i,v in ipairs(event_list) do
|
|
local compare_type = tonumber(v.module_id..v.module_sub)
|
|
--蛋疼,社团boss的活动子类型从module_sub改到ac_sub了
|
|
if v.module_id == 406 then
|
|
compare_type = tonumber(v.module_id..v.ac_sub)
|
|
elseif v.module_id == 410 then--如果要从外部指定活动类型跳转到本国团战的话,活动类型直接传410,日期传活动当天
|
|
compare_type = v.module_id
|
|
end
|
|
if continue_flag and tonumber(self.model.need_jump_event_type) == compare_type then
|
|
jump_event_target_index = i
|
|
continue_flag = false
|
|
end
|
|
end
|
|
end
|
|
self.model.need_jump_event_type = nil --重置活动跳转标记
|
|
|
|
local activity_k = 0 --活动类型,用于记录event_data里正在开活动的的k
|
|
local activity_v = {}
|
|
for k,v in pairs(event_data) do
|
|
if v.is_evt_open then
|
|
activity_k = k
|
|
activity_v = v
|
|
break
|
|
end
|
|
end
|
|
if activity_k == GuildEventType.NoonCollect then
|
|
for i,v in ipairs(event_list) do
|
|
if v.module_id == 408 then
|
|
return i + activity_v.type - 1,is_final_event,jump_event_target_index
|
|
end
|
|
end
|
|
else
|
|
for i,v in ipairs(event_list) do
|
|
local key = tonumber(v.module_id..v.module_sub)
|
|
--蛋疼,社团boss的活动子类型从module_sub改到ac_sub了
|
|
if v.module_id == 406 then
|
|
key = tonumber(v.module_id..v.ac_sub)
|
|
end
|
|
if tonumber(activity_k) == key then
|
|
return i,is_final_event,jump_event_target_index
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 如果当前没有活动在进行中,则需要通过当前的系统时间来决定定位到哪个即将开启的活动上(2020年3月14日策划需求,如果出现时区定位不准的问题找策划)
|
|
local date = os.date("*t", TimeUtil:getServerTime())
|
|
local zero_min = date.hour * 60 + date.min -- 当前时区距0点的分钟数
|
|
local evt_time_start, evt_start_hour, evt_start_min
|
|
for k, v in ipairs(event_list) do
|
|
evt_time_start = Split((Split(v.time_str, "~")[1]),":")
|
|
evt_start_hour = evt_time_start[1]
|
|
evt_start_min = evt_time_start[2]
|
|
if evt_start_hour * 60 + evt_start_min >= zero_min then
|
|
return k,is_final_event,jump_event_target_index
|
|
end
|
|
end
|
|
is_final_event = true -- 没有找到活动开启时跳到最后去
|
|
return #event_list,is_final_event,jump_event_target_index
|
|
end
|
|
|
|
-- 根据活动信息弹出界面
|
|
-- 活动类型需要在GuildModel.EventModuleId配置键值
|
|
function GuildEventView:OpenViewByData(evt_data)
|
|
for k, v in pairs(self.event_view_list) do
|
|
v:SetVisible(false)
|
|
end
|
|
local key = evt_data.module_id .. "@" .. evt_data.module_sub
|
|
--蛋疼,社团boss的活动子类型从module_sub改到ac_sub了
|
|
if evt_data.module_id == 406 then
|
|
key = evt_data.module_id .. "@" .. evt_data.ac_sub
|
|
end
|
|
local view = self.event_view_list[key]
|
|
if not view then
|
|
view = _G[GuildModel.EventModuleId[key]].New(self.view_con)
|
|
self.event_view_list[key] = view
|
|
-- 活动界面需要获得活动的开始时间和活动类型的话就写一个这个函数,可参考GuildEventBossView
|
|
if view["SetEventAcData"] then
|
|
view:SetEventAcData(evt_data)
|
|
end
|
|
end
|
|
|
|
--午间采集活动分了多个项,但界面是共用一个,因此要重复SetEventAcData
|
|
if evt_data.module_id == 408 then
|
|
view:SetEventAcData(evt_data)
|
|
end
|
|
|
|
view:SetVisible(true)
|
|
end
|
|
|
|
function GuildEventView:__delete( )
|
|
for k, v in pairs(self.event_view_list) do
|
|
v:DeleteMe()
|
|
v = nil
|
|
end
|
|
self.event_view_list = nil
|
|
end
|