249 lines
6.7 KiB
Plaintext
249 lines
6.7 KiB
Plaintext
autoImport("ActivityData");
|
|
FunctionActivity = class("FunctionActivity")
|
|
|
|
local tempArray = {};
|
|
|
|
FunctionActivity.TraceType = {
|
|
NeedRefresh = 0,
|
|
Refreshed = 1,
|
|
Update = 2,
|
|
}
|
|
|
|
local MapManager;
|
|
local f_GetType = ActivityData.GetTraceQuestDataType;
|
|
local f_GetId = ActivityData.CreateIdByType;
|
|
|
|
function FunctionActivity.Me()
|
|
if nil == FunctionActivity.me then
|
|
FunctionActivity.me = FunctionActivity.new()
|
|
end
|
|
return FunctionActivity.me
|
|
end
|
|
|
|
function FunctionActivity:ctor()
|
|
self.activityDataMap = {};
|
|
self.tracedActivityMap = {};
|
|
|
|
MapManager = Game.MapManager;
|
|
end
|
|
|
|
function FunctionActivity:GetMapEvents(mapid)
|
|
TableUtility.ArrayClear(tempArray);
|
|
for activityType, activityData in pairs(self.activityDataMap)do
|
|
if(activityData.mapid == mapid)then
|
|
table.insert(tempArray, activityData);
|
|
end
|
|
end
|
|
return tempArray;
|
|
end
|
|
|
|
function FunctionActivity:Launch(activityType, mapid, startTime, endTime)
|
|
|
|
local logStr = "";
|
|
logStr = "活動開啟 --> ";
|
|
local dateFormat = "%m:%d %H:%M:%S秒";
|
|
logStr = logStr .. string.format(" | activityType:%s | 地圖Id:%s | 開始時間:%s | 結束時間:%s | 目前時間:%s | ",
|
|
tostring(activityType),
|
|
tostring(mapid),
|
|
os.date(dateFormat, startTime),
|
|
os.date(dateFormat, endTime),
|
|
os.date(dateFormat, ServerTime.CurServerTime()/1000));
|
|
helplog(logStr);
|
|
|
|
local activityData = self.activityDataMap[activityType];
|
|
if(activityData == nil)then
|
|
activityData = self:AddActivityData(activityType, mapid, startTime, endTime);
|
|
else
|
|
activityData:UpdateInfo(mapid, startTime, endTime);
|
|
end
|
|
|
|
if( activityData:IsShowInMenu() )then
|
|
GameFacade.Instance:sendNotification(MainViewEvent.MenuActivityOpen, activityType)
|
|
end
|
|
if activityType == GameConfig.MvpBattle.ActivityID then
|
|
GameFacade.Instance:sendNotification(MainViewEvent.UpdateMatchBtn)
|
|
end
|
|
|
|
self:UpdateNowMapTraceInfo();
|
|
end
|
|
|
|
function FunctionActivity:UpdateState(activityType, state, starttime, endtime)
|
|
local activityData = self.activityDataMap[activityType];
|
|
if(activityData)then
|
|
activityData:SetState( state, starttime, endtime );
|
|
self:UpdateNowMapTraceInfo();
|
|
else
|
|
errorLog(string.format("Activity:%s not Launch when Recv StateUpdate", tostring(activityType)));
|
|
end
|
|
end
|
|
|
|
|
|
-- activityData begin
|
|
function FunctionActivity:IsActivityRunning(activityType)
|
|
local d = self.activityDataMap[ activityType ];
|
|
if(d == nil)then
|
|
return false;
|
|
end
|
|
return d:InRunningTime();
|
|
end
|
|
|
|
function FunctionActivity:GetActivityData( activityType )
|
|
return self.activityDataMap[ activityType ];
|
|
end
|
|
|
|
function FunctionActivity:AddActivityData(activityType, mapid, startTime, endTime)
|
|
local activityData = ActivityData.new(activityType, mapid, startTime, endTime);
|
|
self.activityDataMap[activityType] = activityData;
|
|
return activityData;
|
|
end
|
|
|
|
function FunctionActivity:RemoveActivityData( activityType )
|
|
local oldData = self.activityDataMap[activityType];
|
|
self.activityDataMap[activityType] = nil;
|
|
|
|
if(not oldData)then
|
|
return;
|
|
end
|
|
|
|
if(oldData:IsShowInMenu())then
|
|
GameFacade.Instance:sendNotification(MainViewEvent.MenuActivityClose, activityType)
|
|
end
|
|
oldData:Destroy();
|
|
end
|
|
-- activityData end
|
|
|
|
|
|
|
|
-- traceInfo begin
|
|
local removeTraceCells = {};
|
|
function FunctionActivity:UpdateNowMapTraceInfo()
|
|
for activityType,_ in pairs(self.tracedActivityMap)do
|
|
if(not self.activityDataMap[activityType])then
|
|
local data = {};
|
|
data.id = f_GetId(activityType);
|
|
data.type = f_GetType(activityType);
|
|
table.insert(removeTraceCells, data);
|
|
|
|
self.tracedActivityMap[activityType] = nil;
|
|
end
|
|
end
|
|
|
|
local tracedCount = 0;
|
|
local nowMapId = MapManager:GetMapID();
|
|
for activityType, activityData in pairs(self.activityDataMap)do
|
|
local needTrace = activityData:IsNeedTrace(nowMapId);
|
|
if(needTrace)then
|
|
if(activityData:IsTraceInfo_NeedUpdate())then
|
|
self.tracedActivityMap[activityType] = FunctionActivity.TraceType.Update;
|
|
else
|
|
self.tracedActivityMap[activityType] = FunctionActivity.TraceType.NeedRefresh;
|
|
end
|
|
tracedCount = tracedCount + 1;
|
|
else
|
|
if(self.tracedActivityMap[activityType])then
|
|
local data = {};
|
|
data.id = f_GetId(activityType);
|
|
data.type = f_GetType(activityType);
|
|
table.insert(removeTraceCells, data);
|
|
|
|
self.tracedActivityMap[activityType] = nil;
|
|
end
|
|
end
|
|
end
|
|
|
|
if(#removeTraceCells > 0)then
|
|
QuestProxy.Instance:RemoveTraceCells( removeTraceCells );
|
|
TableUtility.ArrayClear(removeTraceCells);
|
|
end
|
|
|
|
if(tracedCount == 0)then
|
|
self:RemoveTraceTimeTick();
|
|
else
|
|
self:AddTraceTimeTick();
|
|
end
|
|
end
|
|
|
|
local cache_RunningMap = {};
|
|
function FunctionActivity:AddTraceTimeTick()
|
|
if(not self.traceTimeTick)then
|
|
TableUtility.TableClear(cache_RunningMap);
|
|
self.traceTimeTick = TimeTickManager.Me():CreateTick(0, 1000, self.UpdateActivityTraceInfos, self, 1);
|
|
end
|
|
end
|
|
|
|
function FunctionActivity:RemoveTraceTimeTick()
|
|
if(self.traceTimeTick)then
|
|
TimeTickManager.Me():ClearTick(self, 1);
|
|
self.traceTimeTick = nil;
|
|
TableUtility.TableClear(cache_RunningMap);
|
|
end
|
|
end
|
|
|
|
local updateTraceCells = {};
|
|
function FunctionActivity:UpdateActivityTraceInfos()
|
|
local needUpdate, activityData;
|
|
local nowMapId = MapManager:GetMapID();
|
|
for traceAType,traceType in pairs(self.tracedActivityMap) do
|
|
needUpdate = false;
|
|
if(traceType == FunctionActivity.TraceType.NeedRefresh)then
|
|
self.tracedActivityMap[traceAType] = FunctionActivity.TraceType.Refreshed;
|
|
needUpdate = true;
|
|
elseif(traceType == FunctionActivity.TraceType.Update)then
|
|
needUpdate = true;
|
|
end
|
|
|
|
activityData = self.activityDataMap[traceAType];
|
|
if(activityData == nil)then
|
|
self.tracedActivityMap[traceAType] = nil;
|
|
redlog(string.format("activity(type:%s) accident break.", traceAType));
|
|
end
|
|
|
|
local running = activityData:InRunningTime();
|
|
if(running ~= cache_RunningMap[traceAType])then
|
|
if(running)then
|
|
needUpdate = true;
|
|
else
|
|
local data = {};
|
|
data.id = f_GetId(traceAType);
|
|
data.type = f_GetType(traceAType);
|
|
table.insert(removeTraceCells, data);
|
|
end
|
|
cache_RunningMap[traceAType] = running;
|
|
end
|
|
if(needUpdate)then
|
|
local traceInfo = activityData:GetTraceInfo( nowMapId );
|
|
if(traceInfo)then
|
|
table.insert(updateTraceCells, traceInfo);
|
|
end
|
|
end
|
|
end
|
|
|
|
-- update quest trace
|
|
if(#updateTraceCells > 0)then
|
|
QuestProxy.Instance:AddTraceCells(updateTraceCells);
|
|
TableUtility.ArrayClear(updateTraceCells);
|
|
end
|
|
|
|
-- rm quest trace
|
|
if(#removeTraceCells > 0)then
|
|
QuestProxy.Instance:RemoveTraceCells( removeTraceCells );
|
|
TableUtility.ArrayClear(removeTraceCells);
|
|
end
|
|
end
|
|
-- traceInfo end
|
|
|
|
|
|
|
|
function FunctionActivity:ShutDownActivity( activityType )
|
|
self:RemoveActivityData(activityType);
|
|
self:UpdateNowMapTraceInfo();
|
|
end
|
|
|
|
function FunctionActivity:Reset()
|
|
for activityType, activityData in pairs(self.activityDataMap)do
|
|
self:RemoveActivityData(activityType);
|
|
end
|
|
self:UpdateNowMapTraceInfo();
|
|
end
|
|
|