PGRData/Script/matrix/xentity/xrpgmakergame/object/XRpgMakerGameGap.lua
2024-09-01 22:49:41 +02:00

94 lines
No EOL
3.4 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local XRpgMakerGameObject = require("XEntity/XRpgMakerGame/Object/XRpgMakerGameObject")
local type = type
local pairs = pairs
local Vector3 = CS.UnityEngine.Vector3
local LookRotation = CS.UnityEngine.Quaternion.LookRotation
local Default = {
_BlockStatus = 0, --状态1阻挡0不阻挡
}
---缝隙对象
---@class XRpgMakerGameGap:XRpgMakerGameObject
local XRpgMakerGameGap = XClass(XRpgMakerGameObject, "XRpgMakerGameGap")
function XRpgMakerGameGap:Ctor(id)
for key, value in pairs(Default) do
if type(value) == "table" then
self[key] = {}
else
self[key] = value
end
end
end
---@param mapObjData XMapObjectData
function XRpgMakerGameGap:InitDataByMapObjData(mapObjData)
self.MapObjData = mapObjData
end
--改变方向
function XRpgMakerGameGap:ChangeDirectionAction(action, cb)
local transform = self:GetTransform()
if XTool.UObjIsNil(transform) then
return
end
-- local gapId = self:GetId()
-- local x = XRpgMakerGameConfigs.GetRpgMakerGameGapX(gapId)
-- local y = XRpgMakerGameConfigs.GetRpgMakerGameGapY(gapId)
local x = self.MapObjData:GetX()
local y = self.MapObjData:GetY()
local cube = self:GetCubeObj(y, x)
local cubePosition = cube:GetGameObjUpCenterPosition()
local cubeSize = cube:GetGameObjSize()
local objPosition = transform.position
local direction = action.Direction
local directionPos
if direction == XRpgMakerGameConfigs.RpgMakerGapDirection.GridLeft then
directionPos = objPosition - Vector3(cubeSize.x / 2, 0, 0)
elseif direction == XRpgMakerGameConfigs.RpgMakerGapDirection.GridRight then
directionPos = objPosition + Vector3(cubeSize.x / 2, 0, 0)
elseif direction == XRpgMakerGameConfigs.RpgMakerGapDirection.GridTop then
directionPos = objPosition + Vector3(0, 0, cubeSize.z / 2)
elseif direction == XRpgMakerGameConfigs.RpgMakerGapDirection.GridBottom then
directionPos = objPosition - Vector3(0, 0, cubeSize.z / 2)
end
local transform = self:GetTransform()
local lookRotation = LookRotation(directionPos - objPosition)
self:SetGameObjectRotation(lookRotation)
self:SetGameObjectPosition(directionPos)
if cb then
cb()
end
end
--是否会被阻挡
function XRpgMakerGameGap:IsGapInMiddle(curPosX, curPosY, direction, nextPosX, nextPosY)
if not self:IsSamePoint(curPosX, curPosY) and not self:IsSamePoint(nextPosX, nextPosY) then
return false
end
local curGapDirection = self.MapObjData:GetParams()[1]
if self:IsSamePoint(curPosX, curPosY) and curGapDirection == direction then
return true
end
--下一个坐标和缝隙位置相同,且方向相反
if self:IsSamePoint(nextPosX, nextPosY)
and ((curGapDirection == XRpgMakerGameConfigs.RpgMakerGapDirection.GridLeft and direction == XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveRight)
or (curGapDirection == XRpgMakerGameConfigs.RpgMakerGapDirection.GridRight and direction == XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveLeft)
or (curGapDirection == XRpgMakerGameConfigs.RpgMakerGapDirection.GridTop and direction == XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveDown)
or (curGapDirection == XRpgMakerGameConfigs.RpgMakerGapDirection.GridBottom and direction == XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveUp)) then
return true
end
return false
end
return XRpgMakerGameGap