303 lines
8.0 KiB
Plaintext
303 lines
8.0 KiB
Plaintext
local BaseCell = autoImport("BaseCell");
|
|
WorldMapMenuCell = class("WorldMapMenuCell", BaseCell)
|
|
|
|
autoImport("MapInfoCell");
|
|
autoImport("MonsterHeadCell");
|
|
|
|
WorldMapMenuEvent = {
|
|
StartTrace = "WorldMapMenuEvent_StartTrace",
|
|
}
|
|
|
|
local tempArray = {};
|
|
|
|
function WorldMapMenuCell:Init()
|
|
self:InitCell();
|
|
end
|
|
|
|
function WorldMapMenuCell:InitCell()
|
|
self.mapname = self:FindComponent("MapName", UILabel);
|
|
self.lvname = self:FindComponent("LvName", UILabel);
|
|
self.table = self:FindComponent("Table", UITable);
|
|
|
|
local infoGrid = self:FindComponent("InfoGrid", UIGrid);
|
|
self.infoCtl = UIGridListCtrl.new(infoGrid, MapInfoCell, "MapInfoCell");
|
|
self.infoCtl:AddEventListener(MouseEvent.MouseClick, self.clickMapInfo, self);
|
|
|
|
local monsterGrid = self:FindComponent("MonsterGrid", UIGrid);
|
|
self.monsterCtl = UIGridListCtrl.new(monsterGrid, MonsterHeadCell, "MonsterHeadCell");
|
|
self.monsterCtl:AddEventListener(MouseEvent.MouseClick, self.clickMonsterCell, self);
|
|
|
|
self.questSymbolGrid = self:FindComponent("QuestGrid", UIGrid);
|
|
self.questSymbol1 = self:FindGO("Symbol1", self.questSymbolGrid.gameObject);
|
|
self.questSymbol2 = self:FindGO("Symbol2", self.questSymbolGrid.gameObject);
|
|
self.questSymbol3 = self:FindGO("Symbol3", self.questSymbolGrid.gameObject);
|
|
|
|
self.sealSymbol = self:FindComponent("SealSymbol", UISprite);
|
|
|
|
self.questSymbol = self:FindGO("QuestSymbol");
|
|
self.goBtn = self:FindGO("GoBtn");
|
|
self:AddClickEvent(self.goBtn, function(go)
|
|
self:PassEvent(MouseEvent.MouseClick, self);
|
|
end);
|
|
end
|
|
|
|
function WorldMapMenuCell:clickMapInfo(mapInfo)
|
|
local data = mapInfo.data;
|
|
if(not data)then
|
|
return;
|
|
end
|
|
|
|
local cmd;
|
|
if(data.type == MapInfoType.Npc)then
|
|
local cmdArgs = {
|
|
targetMapID = self.data.id,
|
|
npcID = data.id,
|
|
npcUID = data.uid,
|
|
}
|
|
cmd = MissionCommandFactory.CreateCommand(cmdArgs, MissionCommandVisitNpc)
|
|
elseif(data.type == MapInfoType.ExitPoint)then
|
|
local cmdArgs = {
|
|
targetMapID = data.id,
|
|
}
|
|
cmd = MissionCommandFactory.CreateCommand(cmdArgs, MissionCommandMove)
|
|
end
|
|
if(cmd)then
|
|
Game.Myself:Client_SetMissionCommand( cmd );
|
|
self:PassEvent(WorldMapMenuEvent.StartTrace);
|
|
end
|
|
end
|
|
|
|
function WorldMapMenuCell:clickMonsterCell(monsterCell)
|
|
local data = monsterCell.data;
|
|
if(data)then
|
|
helplog("ClickMonsterCell:", tostring(data.id), Table_Monster[data.id] and Table_Monster[data.id].NameZh);
|
|
local oriMonster = Table_MonsterOrigin[ data.id ] or {};
|
|
local oriPos = nil;
|
|
for i=1,#oriMonster do
|
|
if(oriMonster[i].mapID == self.data.id)then
|
|
oriPos = oriMonster[i].pos;
|
|
end
|
|
end
|
|
if(oriPos)then
|
|
local cmdArgs = {
|
|
targetMapID = self.data.id,
|
|
npcID = data.id,
|
|
targetPos = TableUtil.Array2Vector3(oriPos),
|
|
}
|
|
local cmd = MissionCommandFactory.CreateCommand(cmdArgs, MissionCommandSkill)
|
|
if(cmd)then
|
|
Game.Myself:Client_SetMissionCommand( cmd );
|
|
self:PassEvent(WorldMapMenuEvent.StartTrace);
|
|
end
|
|
else
|
|
errorLog(string.format("Monster:%s Not Find In MonsterOriginal", data.id));
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
function WorldMapMenuCell:SetData(data)
|
|
self.data = data
|
|
|
|
self.mapname.text = data.NameZh;
|
|
if(data.LvRange and data.LvRange[2])then
|
|
self.lvname.text = string.format(ZhString.WorldMapMenuCell_LvTip, data.LvRange[1], data.LvRange[2]);
|
|
self:Show(self.lvname);
|
|
self.table.transform.localPosition = Vector3(7.4,77.5,0);
|
|
else
|
|
self:Hide(self.lvname);
|
|
self.table.transform.localPosition = Vector3(7.4,99.5,0);
|
|
end
|
|
|
|
local nowScene = SceneProxy.Instance.currentScene;
|
|
local nowMapId = nowScene.mapID;
|
|
|
|
self.goBtn:SetActive(nowMapId ~= data.id );
|
|
-- self.buttonActive = nowMapId ~= data.id;
|
|
-- local sprite = self.goBtn:GetComponent(UISprite);
|
|
-- sprite.color = self.buttonActive and Color(1,1,1) or Color(1/255,2/255,3/255);
|
|
|
|
self:UpdateMapInfo();
|
|
|
|
self:UpdateQuestSymbol();
|
|
self:UpdateSealSymbol();
|
|
self.table:Reposition();
|
|
end
|
|
|
|
function WorldMapMenuCell:UpdateMapInfo()
|
|
local id = self.data and self.data.id;
|
|
if(not id or not Table_MapInfo)then
|
|
return;
|
|
end
|
|
|
|
local upInfos, monsters = {}, {};
|
|
-- event Info
|
|
local eventInfos = self:GetEventInfos(id);
|
|
if(eventInfos)then
|
|
for i=1,#eventInfos do
|
|
table.insert(upInfos, eventInfos[i]);
|
|
end
|
|
end
|
|
|
|
local mapInfo = Table_MapInfo[id];
|
|
if(mapInfo)then
|
|
local units = mapInfo.units;
|
|
if(units == nil)then
|
|
helplog("Mapid:" .. id .. " Not Find AreaData.");
|
|
return;
|
|
end
|
|
self.hasDailyFunc = false;
|
|
local monsterIDMap = {};
|
|
for id,unit in pairs(units) do
|
|
local idShadow = unit[1];
|
|
local npcdata = id and Table_Npc[ id ];
|
|
if(npcdata)then
|
|
if(not self.hasDailyFunc)then
|
|
self.hasDailyFunc = QuestSymbolCheck.HasDailySymbol(npcdata);
|
|
end
|
|
if(npcdata.MapIcon~='')then
|
|
local temp = {
|
|
id = id,
|
|
uid = idShadow,
|
|
type = MapInfoType.Npc,
|
|
icon = npcdata.MapIcon,
|
|
label = npcdata.NameZh,
|
|
};
|
|
table.insert(upInfos, temp);
|
|
end
|
|
else
|
|
local monsterdata = id and Table_Monster[id];
|
|
if(monsterdata and monsterdata.Hide~=1 and monsterdata.WmapHide~=1)then
|
|
if(not monsterIDMap[id])then
|
|
monsterIDMap[id] = 1;
|
|
table.insert(monsters, monsterdata);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local exitPoints = mapInfo.exitPoints;
|
|
if(exitPoints)then
|
|
for i=1,#exitPoints do
|
|
if(exitPoints[i]~=id)then
|
|
local mapdata = Table_Map[exitPoints[i]];
|
|
if(mapdata)then
|
|
local temp = {
|
|
id = exitPoints[i],
|
|
type = MapInfoType.ExitPoint,
|
|
icon = "map_portal",
|
|
label = mapdata.NameZh,
|
|
};
|
|
table.insert(upInfos, temp);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
self.infoCtl:ResetDatas(upInfos);
|
|
self.monsterCtl:ResetDatas(monsters);
|
|
end
|
|
|
|
function WorldMapMenuCell:UpdateQuestSymbol()
|
|
local hasMain, hasBranch, hasDaily = false, false, false;
|
|
if(self.data)then
|
|
local list = QuestProxy.Instance:getQuestListByMapAndSymbol(self.data.id) or {};
|
|
for i=1,#list do
|
|
local quest = list[i];
|
|
if(quest.type == QuestDataType.QuestDataType_MAIN)then
|
|
hasMain = true;
|
|
elseif(quest.type == QuestDataType.QuestDataType_DAILY)then
|
|
hasDaily = true;
|
|
else
|
|
hasBranch = true;
|
|
end
|
|
|
|
if(hasMain and hasBranch and hasDaily)then
|
|
break;
|
|
end
|
|
end
|
|
end
|
|
|
|
if(hasMain == false or hasBranch == false or hasDaily == false)then
|
|
local questMapInfo = WorldMapProxy.Instance:GetWorldQuestInfo(self.data.id);
|
|
if(questMapInfo)then
|
|
hasMain = questMapInfo[1] == true;
|
|
hasBranch = questMapInfo[2] == true;
|
|
hasDaily = questMapInfo[3] == true;
|
|
end
|
|
end
|
|
|
|
if(hasDaily == false)then
|
|
hasDaily = self.hasDailyFunc == true;
|
|
end
|
|
|
|
self.questSymbol1:SetActive(hasMain);
|
|
self.questSymbol2:SetActive(hasBranch);
|
|
self.questSymbol3:SetActive(hasDaily);
|
|
self.questSymbolGrid:Reposition();
|
|
end
|
|
|
|
function WorldMapMenuCell:UpdateSealSymbol()
|
|
local hasSeal, issealing = false, false;
|
|
if(type(self.data)~="table")then
|
|
return;
|
|
end
|
|
local mapid = self.data and self.data.id;
|
|
if(mapid)then
|
|
hasSeal, issealing = self:CheckHasSealByMapId(mapid);
|
|
end
|
|
if(hasSeal)then
|
|
self.sealSymbol.gameObject:SetActive(true);
|
|
if(issealing)then
|
|
self.sealSymbol.spriteName = "seal_icon_02";
|
|
else
|
|
self.sealSymbol.spriteName = "seal_icon_01";
|
|
end
|
|
self.questSymbolGrid:Reposition();
|
|
else
|
|
self.sealSymbol.gameObject:SetActive(false);
|
|
end
|
|
end
|
|
|
|
function WorldMapMenuCell:CheckHasSealByMapId(mapid)
|
|
local hasSeal, issealing;
|
|
local sealData = SealProxy.Instance:GetSealData(mapid);
|
|
if(sealData)then
|
|
for _,item in pairs(sealData.itemMap)do
|
|
hasSeal = true;
|
|
if(item.issealing)then
|
|
issealing = true;
|
|
break;
|
|
end
|
|
end
|
|
end
|
|
return hasSeal, issealing;
|
|
end
|
|
|
|
function WorldMapMenuCell:SetCellInfoActive(b)
|
|
self.questSymbolGrid.gameObject:SetActive(b);
|
|
end
|
|
|
|
function WorldMapMenuCell:GetEventInfos(mapid)
|
|
TableUtility.ArrayClear(tempArray);
|
|
|
|
local events = FunctionActivity.Me():GetMapEvents(mapid);
|
|
for i=1,#events do
|
|
if(events[i].running)then
|
|
local mapInfo = events[i]:GetMapInfo();
|
|
if(mapInfo)then
|
|
local info = {
|
|
type = MapInfoType.Event,
|
|
id = events[i].id;
|
|
icon = mapInfo.icon;
|
|
label = mapInfo.label;
|
|
iconScale = mapInfo.iconScale;
|
|
};
|
|
table.insert(tempArray, info)
|
|
end
|
|
end
|
|
end
|
|
return tempArray;
|
|
end
|