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

143 lines
No EOL
5.5 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 = {
_ElectricStatus = 1, --状态1开启0关闭
}
---电网对象
---@class XRpgMakerGameElectricFence:XRpgMakerGameObject
local XRpgMakerGameElectricFence = XClass(XRpgMakerGameObject, "XRpgMakerGameElectricFence")
function XRpgMakerGameElectricFence:Ctor(id)
for key, value in pairs(Default) do
if type(value) == "table" then
self[key] = {}
else
self[key] = value
end
end
self:InitData()
end
function XRpgMakerGameElectricFence:Dispose()
if self.ElectricFenceEffect then
CS.UnityEngine.GameObject.Destroy(self.ElectricFenceEffect)
self.ElectricFenceEffect = nil
end
XRpgMakerGameElectricFence.Super.Dispose(self)
end
function XRpgMakerGameElectricFence:InitData()
local id = self:GetId()
-- local pointX = XRpgMakerGameConfigs.GetRpgMakerGameElectricFenceX(id)
-- local pointY = XRpgMakerGameConfigs.GetRpgMakerGameElectricFenceY(id)
-- self:UpdatePosition({PositionX = pointX, PositionY = pointY})
self:SetElectricStatus(XRpgMakerGameConfigs.XRpgMakerGameElectricFenceStatus.Open)
if not XTool.IsTableEmpty(self.MapObjData) then
self:InitDataByMapObjData(self.MapObjData)
end
end
---@param mapObjData XMapObjectData
function XRpgMakerGameElectricFence:InitDataByMapObjData(mapObjData)
self.MapObjData = mapObjData
self:UpdatePosition({PositionX = self.MapObjData:GetX(), PositionY = self.MapObjData:GetY()})
self:SetElectricStatus(XRpgMakerGameConfigs.XRpgMakerGameElectricFenceStatus.Open)
end
--改变方向
function XRpgMakerGameElectricFence:ChangeDirectionAction(action, cb)
local transform = self:GetTransform()
if XTool.UObjIsNil(transform) then
return
end
-- local electricFenceId = self:GetId()
-- local x = XRpgMakerGameConfigs.GetRpgMakerGameElectricFenceX(electricFenceId)
-- local y = XRpgMakerGameConfigs.GetRpgMakerGameElectricFenceY(electricFenceId)
local x = self.MapObjData:GetX()
local y = self.MapObjData:GetY()
local cube = self:GetCubeObj(y, x)
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 XRpgMakerGameElectricFence:SetElectricStatus(electricStatus)
self._ElectricStatus = electricStatus
end
--播放状态切换动画
function XRpgMakerGameElectricFence:PlayElectricFenceStatusChangeAction(cb, isNotPlaySound)
if self.ElectricFenceEffect then
local isShow = self._ElectricStatus == XRpgMakerGameConfigs.XRpgMakerGameElectricFenceStatus.Open and true or false
self.ElectricFenceEffect.gameObject:SetActiveEx(isShow)
end
if cb then
cb()
end
end
--是否会被阻挡
function XRpgMakerGameElectricFence:IsElectricFenceInMiddle(curPosX, curPosY, direction, nextPosX, nextPosY)
if not self:IsSamePoint(curPosX, curPosY) and not self:IsSamePoint(nextPosX, nextPosY) then
return false
end
-- local id = self:GetId()
-- local electricDirection = XRpgMakerGameConfigs.GetRpgMakerGameElectricDirection(id)
local electricDirection = self.MapObjData:GetParams()[1]
if self:IsSamePoint(curPosX, curPosY) and electricDirection == direction then
return true
end
--下一个坐标和电墙位置相同,且方向相反
if self:IsSamePoint(nextPosX, nextPosY)
and ((electricDirection == XRpgMakerGameConfigs.RpgMakerGapDirection.GridLeft and direction == XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveRight)
or (electricDirection == XRpgMakerGameConfigs.RpgMakerGapDirection.GridRight and direction == XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveLeft)
or (electricDirection == XRpgMakerGameConfigs.RpgMakerGapDirection.GridTop and direction == XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveDown)
or (electricDirection == XRpgMakerGameConfigs.RpgMakerGapDirection.GridBottom and direction == XRpgMakerGameConfigs.RpgMakerGameMoveDirection.MoveUp)) then
return true
end
return false
end
function XRpgMakerGameElectricFence:OnLoadComplete()
local key = XRpgMakerGameConfigs.ModelKeyMaps.ElectricFenceEffect
local modelPath = XRpgMakerGameConfigs.GetRpgMakerGameModelPath(key)
local resource = self:ResourceManagerLoad(modelPath)
local asset = resource and resource.Asset
if asset then
self.ElectricFenceEffect = self:LoadEffect(asset)
end
XRpgMakerGameElectricFence.Super.OnLoadComplete(self)
end
return XRpgMakerGameElectricFence