源战役客户端
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 

261 líneas
10 KiB

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