forked from endernon/PGRData
224 lines
No EOL
12 KiB
Lua
224 lines
No EOL
12 KiB
Lua
local XUiGridRpgMakerGameCardMini = XClass(nil, "XUiGridRpgMakerGameCardMini")
|
|
|
|
local Vector2 = CS.UnityEngine.Vector2
|
|
local Vector3 = CS.UnityEngine.Vector3
|
|
local LookRotation = CS.UnityEngine.Quaternion.LookRotation
|
|
local CSUnityEngineObjectInstantiate = CS.UnityEngine.Object.Instantiate
|
|
|
|
--提示说明地图上节点的小图标
|
|
function XUiGridRpgMakerGameCardMini:Ctor(ui, uiRoot)
|
|
self.GameObject = ui.gameObject
|
|
self.Transform = ui.transform
|
|
self.UiRoot = uiRoot
|
|
|
|
XTool.InitUiObject(self)
|
|
self.ImageLineMap = {}
|
|
self.ImageLine.gameObject:SetActiveEx(false)
|
|
self.ImageFirstLineBg.gameObject:SetActiveEx(false)
|
|
end
|
|
|
|
function XUiGridRpgMakerGameCardMini:Refresh(row, colIndex, colDataList, mapId, isNotShowLine)
|
|
-- local row = XRpgMakerGameConfigs.GetRpgMakerGameBlockRow(blockId)
|
|
-- local isBlock = blockStatus == XRpgMakerGameConfigs.XRpgMakerGameBlockStatus.Block
|
|
-- local monsterId = XRpgMakerGameConfigs.GetRpgMakerGameMonsterId(mapId, colIndex, row)
|
|
-- local isStartPoint = XRpgMakerGameConfigs.IsRpgMakerGameStartPoint(mapId, colIndex, row)
|
|
-- local isEndPoint = XRpgMakerGameConfigs.IsRpgMakerGameEndPoint(mapId, colIndex, row)
|
|
-- local triggerId = XRpgMakerGameConfigs.GetRpgMakerGameTriggerId(mapId, colIndex, row)
|
|
-- local shadowId = XRpgMakerGameConfigs.GetRpgMakerGameShadowId(mapId, colIndex, row)
|
|
-- local trapId = XRpgMakerGameConfigs.GetRpgMakerGameTrapId(mapId, colIndex, row)
|
|
-- local transferPointId = XRpgMakerGameConfigs.GetRpgMakerGameTransferPointId(mapId, colIndex, row)
|
|
-- local entityTypeList = XRpgMakerGameConfigs.GetRpgMakerGameEntityTypeListByXY(mapId, colIndex, row)
|
|
|
|
local isBlock = XRpgMakerGameConfigs.GetMixBlockInPositionByType(mapId, colIndex, row, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.BlockType)
|
|
local monsterId = XRpgMakerGameConfigs.GetMixBlockInPositionByType(mapId, colIndex, row, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Moster)
|
|
local isStartPoint = XRpgMakerGameConfigs.GetMixBlockInPositionByType(mapId, colIndex, row, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.StartPoint)
|
|
local isEndPoint = XRpgMakerGameConfigs.GetMixBlockInPositionByType(mapId, colIndex, row, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.EndPoint)
|
|
local triggerId = XRpgMakerGameConfigs.GetMixBlockInPositionByType(mapId, colIndex, row, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Trigger)
|
|
local shadowId = XRpgMakerGameConfigs.GetMixBlockInPositionByType(mapId, colIndex, row, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Shadow)
|
|
local trapId = XRpgMakerGameConfigs.GetMixBlockInPositionByType(mapId, colIndex, row, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Trap)
|
|
local transferPointId = XRpgMakerGameConfigs.GetMixBlockInPositionByType(mapId, colIndex, row, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.TransferPoint)
|
|
|
|
local bubble = XRpgMakerGameConfigs.GetMixBlockInPositionByType(mapId, colIndex, row, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Bubble)
|
|
local drop = XRpgMakerGameConfigs.GetMixBlockInPositionByType(mapId, colIndex, row, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Drop)
|
|
local magic = XRpgMakerGameConfigs.GetMixBlockInPositionByType(mapId, colIndex, row, XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Magic)
|
|
|
|
local entityTypeList = XRpgMakerGameConfigs.GetEntityInPositionByType(mapId, colIndex, row)
|
|
local sameXYGapIdList = XRpgMakerGameConfigs.GetGapInPositionByType(mapId, colIndex, row)
|
|
local sameXYElectricFenceIdList = XRpgMakerGameConfigs.GetElectricFenceInPositionByType(mapId, colIndex, row)
|
|
|
|
--设置移动路线
|
|
if not isNotShowLine then
|
|
local lineParams = self.UiRoot:GetHintLineMapParams(row, colIndex)
|
|
for i, param in ipairs(lineParams or {}) do
|
|
local isStart = param.IsStart --是否是起点
|
|
local widthPercent = param.WidthPercent --格子宽度百分比,用来计算线在格子中的起始位置,左下角为原点
|
|
local heightPercent = param.HeightPercent --格子高度百分比,用来计算线在格子中的起始位置,左下角为原点
|
|
local direction = param.Direction --箭头方向
|
|
local id = param.Id
|
|
local endWidthPercent = param.EndWidthPercent --格子宽度百分比,用来计算线在格子中的终点位置
|
|
local endHeightPercent = param.EndHeightPercent --格子高度百分比,用来计算线在格子中的终点位置
|
|
|
|
local imgLine = CSUnityEngineObjectInstantiate(self.ImageLine, self.Transform)
|
|
self.ImageLineMap[id] = imgLine
|
|
|
|
if isStart then
|
|
imgLine.color = XUiHelper.Hexcolor2Color("21f480")
|
|
end
|
|
|
|
--设置线段的起点坐标
|
|
local size = self.Transform:GetComponent("RectTransform").rect.size
|
|
local startPosX = size.x * widthPercent
|
|
local startPoxY = size.y * heightPercent
|
|
|
|
--设置线段的终点坐标
|
|
local imgLineHeight = imgLine.rectTransform.rect.height
|
|
local endPosX = size.x * endWidthPercent
|
|
local endPosY = size.y * endHeightPercent
|
|
|
|
--设置线段的方向
|
|
local originPos = imgLine.transform.localPosition
|
|
local directionPos = self:GetDirectionPos(originPos, direction)
|
|
if directionPos then
|
|
imgLine.transform.right = directionPos - originPos
|
|
end
|
|
|
|
--设置线段的长度
|
|
local imgLineWidth = math.sqrt((endPosY - startPoxY) ^ 2 + (endPosX - startPosX) ^ 2)
|
|
imgLine.rectTransform.anchorMin = Vector2(0, 0)
|
|
imgLine.rectTransform.anchorMax = Vector2(0, 0)
|
|
imgLine.rectTransform.pivot = Vector2(0, 0.5)
|
|
imgLine.rectTransform.sizeDelta = Vector2(math.abs(imgLineWidth), imgLineHeight)
|
|
|
|
--设置线段起始点的坐标
|
|
imgLine.transform.anchoredPosition = Vector2(startPosX, startPoxY)
|
|
|
|
imgLine.gameObject:SetActiveEx(true)
|
|
end
|
|
end
|
|
|
|
-- 图标key队列
|
|
local coverIconKeyList = {}
|
|
if isBlock then
|
|
table.insert(coverIconKeyList, XRpgMakerGameConfigs.RpgMakerGameHintIconKeyMaps.BlockIcon)
|
|
elseif monsterId then
|
|
local id = monsterId:GetParams()[1]
|
|
local monsterType = XRpgMakerGameConfigs.GetRpgMakerGameMonsterType(id)
|
|
local skillType = XRpgMakerGameConfigs.GetRpgMakerGameMonsterSkillType(id)
|
|
table.insert(coverIconKeyList, XRpgMakerGameConfigs.GetMonsterIconKey(monsterType, skillType))
|
|
elseif isStartPoint then
|
|
table.insert(coverIconKeyList, XRpgMakerGameConfigs.RpgMakerGameHintIconKeyMaps.StartPointIcon)
|
|
elseif isEndPoint then
|
|
table.insert(coverIconKeyList, XRpgMakerGameConfigs.RpgMakerGameHintIconKeyMaps.EndPointIcon)
|
|
elseif shadowId then
|
|
table.insert(coverIconKeyList, XRpgMakerGameConfigs.RpgMakerGameHintIconKeyMaps.ShadowIcon)
|
|
elseif transferPointId then
|
|
local transferPointColor = XRpgMakerGameConfigs.GetTransferPointColor(transferPointId:GetParams()[1])
|
|
table.insert(coverIconKeyList, XRpgMakerGameConfigs.GetTransferPointIconKey(transferPointColor))
|
|
end
|
|
if trapId then
|
|
table.insert(coverIconKeyList, XRpgMakerGameConfigs.RpgMakerGameHintIconKeyMaps.TrapIcon)
|
|
end
|
|
if triggerId then
|
|
local triggerType = XRpgMakerGameConfigs.GetRpgMakerGameTriggerType(triggerId:GetParams()[1])
|
|
table.insert(coverIconKeyList, XRpgMakerGameConfigs.GetTriggerIconKey(triggerType))
|
|
end
|
|
|
|
if bubble then
|
|
table.insert(coverIconKeyList, XRpgMakerGameConfigs.RpgMakerGameHintIconKeyMaps.Bubble)
|
|
end
|
|
if drop then
|
|
table.insert(coverIconKeyList, XRpgMakerGameConfigs.GetDropIconKey(drop:GetParams()[2]))
|
|
end
|
|
if magic then
|
|
table.insert(coverIconKeyList, XRpgMakerGameConfigs.RpgMakerGameHintIconKeyMaps.Magic)
|
|
end
|
|
|
|
|
|
if not XTool.IsTableEmpty(entityTypeList) then
|
|
for _, data in ipairs(entityTypeList) do
|
|
if data:GetType() == XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Water then
|
|
table.insert(coverIconKeyList, XRpgMakerGameConfigs.GetEntityIconKey(XRpgMakerGameConfigs.XRpgMakerGameEntityType.Water))
|
|
elseif data:GetType() == XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Ice then
|
|
table.insert(coverIconKeyList, XRpgMakerGameConfigs.GetEntityIconKey(XRpgMakerGameConfigs.XRpgMakerGameEntityType.Ice))
|
|
elseif data:GetType() == XRpgMakerGameConfigs.XRpgMakeBlockMetaType.Grass then
|
|
table.insert(coverIconKeyList, XRpgMakerGameConfigs.GetEntityIconKey(XRpgMakerGameConfigs.XRpgMakerGameEntityType.Grass))
|
|
else
|
|
table.insert(coverIconKeyList, XRpgMakerGameConfigs.GetEntityIconKey(XRpgMakerGameConfigs.XRpgMakerGameEntityType.Steel))
|
|
end
|
|
end
|
|
end
|
|
|
|
--设置缝隙图标列表
|
|
if not XTool.IsTableEmpty(sameXYGapIdList) then
|
|
self:SetGapIcon(sameXYGapIdList, XRpgMakerGameConfigs.RpgMakerGameHintIconKeyMaps.GapIcon, XRpgMakerGameConfigs.GetGapDirection)
|
|
end
|
|
|
|
--设置电墙图标列表
|
|
if not XTool.IsTableEmpty(sameXYElectricFenceIdList) then
|
|
self:SetGapIcon(sameXYElectricFenceIdList, XRpgMakerGameConfigs.RpgMakerGameHintIconKeyMaps.ElectricFenceIcon, XRpgMakerGameConfigs.GetElectricFenceDirection)
|
|
end
|
|
|
|
if not XTool.IsTableEmpty(coverIconKeyList) then
|
|
-- 图标层级排序
|
|
table.sort(coverIconKeyList, function (a,b)
|
|
return XRpgMakerGameConfigs.GetRpgMakerGameHintLayer(a) > XRpgMakerGameConfigs.GetRpgMakerGameHintLayer(b)
|
|
end)
|
|
for index, key in ipairs(coverIconKeyList) do
|
|
if index == 1 then
|
|
self.ImgIcon:SetRawImage(XRpgMakerGameConfigs.GetRpgMakerGameHintIcon(key))
|
|
self.ImgIcon.gameObject:SetActiveEx(true)
|
|
else
|
|
local imgIcon = XUiHelper.Instantiate(self.ImgIcon, self.ImgIcons)
|
|
imgIcon:SetRawImage(XRpgMakerGameConfigs.GetRpgMakerGameHintIcon(key))
|
|
imgIcon.gameObject:SetActiveEx(true)
|
|
end
|
|
end
|
|
else
|
|
self.ImgIcon.gameObject:SetActiveEx(false)
|
|
end
|
|
end
|
|
|
|
function XUiGridRpgMakerGameCardMini:SetGapIcon(idList, hintIconKey, directionFunc)
|
|
local icon = XRpgMakerGameConfigs.GetRpgMakerGameHintIcon(hintIconKey)
|
|
local imgIcon
|
|
local direction
|
|
local gapSize = self.ImgIcon.transform.sizeDelta
|
|
local originPos = self.ImgIcon.transform.localPosition
|
|
local directionPos
|
|
local lookRotation
|
|
|
|
for i, gapId in ipairs(idList) do
|
|
direction = directionFunc(gapId)
|
|
imgIcon = CSUnityEngineObjectInstantiate(self.ImgIcon, self.Transform)
|
|
directionPos = self:GetDirectionPos(originPos, direction, gapSize.x / 2, gapSize.y / 2)
|
|
|
|
if directionPos then
|
|
imgIcon.transform.localPosition = directionPos
|
|
imgIcon.transform.up = originPos - directionPos
|
|
end
|
|
imgIcon:SetRawImage(icon)
|
|
imgIcon.gameObject:SetActiveEx(true)
|
|
end
|
|
end
|
|
|
|
function XUiGridRpgMakerGameCardMini:GetDirectionPos(originLocalPos, direction, changeWidth, changeHeight)
|
|
local directionPos
|
|
local width = changeWidth and Vector3(changeWidth, 0, 0) or Vector3(1, 0, 0)
|
|
local height = changeHeight and Vector3(0, changeHeight, 0) or Vector3(0, 1, 0)
|
|
if direction == XRpgMakerGameConfigs.RpgMakerGapDirection.GridLeft then
|
|
directionPos = originLocalPos - width
|
|
elseif direction == XRpgMakerGameConfigs.RpgMakerGapDirection.GridRight then
|
|
directionPos = originLocalPos + width
|
|
elseif direction == XRpgMakerGameConfigs.RpgMakerGapDirection.GridTop then
|
|
directionPos = originLocalPos + height
|
|
elseif direction == XRpgMakerGameConfigs.RpgMakerGapDirection.GridBottom then
|
|
directionPos = originLocalPos - height
|
|
end
|
|
return directionPos
|
|
end
|
|
|
|
function XUiGridRpgMakerGameCardMini:GetImageLine(id)
|
|
return self.ImageLineMap[id]
|
|
end
|
|
|
|
return XUiGridRpgMakerGameCardMini |