PGRData/Script/matrix/xentity/xguilddorm/role/XGuildDormBaseRole.lua

205 lines
5.8 KiB
Lua
Raw Normal View History

2024-09-01 22:49:41 +02:00
local XRLGuildDormRole = require("XEntity/XGuildDorm/Role/XRLGuildDormRole")
local XGuildDormRoleFSMFactory = require("XEntity/XGuildDorm/Role/FSM/XGuildDormRoleFSMFactory")
local XGDComponentManager = require("XEntity/XGuildDorm/Base/XGDComponentManager")
---@class XGuildDormBaseRole
local XGuildDormBaseRole = XClass(nil, "XGuildDormBaseRole")
function XGuildDormBaseRole:Ctor(id)
self.Id = id
-- 角色表现数据
self.RLGuildDormRole = nil
-- 组件 XGDComponet
self.GDComponentManager = XGDComponentManager.New()
-- 行为代理
self.Agent = nil
-- 移动代理
self.MoveAgent = nil
-- 状态机 XHomeCharFSM
self.StateMachine = nil
-- 当前交互状态
self.InteractStatus = XGuildDormConfig.InteractStatus.End
-- 当前交互信息
self.CurrentInteractInfo = nil
self.FixAlpha = 1
self.TargetAlpha = 1
end
function XGuildDormBaseRole:Dispose()
self.GDComponentManager:Dispose()
self.Agent = nil
self.MoveAgent = nil
self.StateMachine = nil
self.CurrentInteractInfo = nil
if self.RLGuildDormRole then
self.RLGuildDormRole:Dispose()
self.RLGuildDormRole = nil
end
end
function XGuildDormBaseRole:UpdateWithServerData(data)
end
function XGuildDormBaseRole:GetId()
return self.Id
end
---@return XRLGuildDormRole
function XGuildDormBaseRole:GetRLRole()
if self.RLGuildDormRole == nil then
self.RLGuildDormRole = XRLGuildDormRole.New(self.Id)
end
return self.RLGuildDormRole
end
function XGuildDormBaseRole:CheckRLRoleIsCreated()
return self.RLGuildDormRole ~= nil
end
---@return BehaviorTree.XAgent
function XGuildDormBaseRole:GetAgent()
if self.Agent == nil then
local gameObject = self:GetRLRole():GetGameObject()
if XTool.UObjIsNil(gameObject) then return end
self.Agent = gameObject:GetComponent(typeof(CS.BehaviorTree.XAgent))
if XTool.UObjIsNil(self.Agent) then
self.Agent = gameObject:AddComponent(typeof(CS.BehaviorTree.XAgent))
self.Agent.ProxyType = "XGuildDormCharAgent"
self.Agent:InitProxy()
self.Agent.Proxy.LuaAgentProxy:SetRole(self)
end
end
return self.Agent
end
function XGuildDormBaseRole:GetMoveAgent()
if self.MoveAgent == nil then
local gameObject = self:GetRLRole():GetGameObject()
self.MoveAgent = CS.XNavMeshUtility.AddMoveAgent(gameObject)
self.MoveAgent.Radius = 0.35
self.MoveAgent.IsObstacle = false
self.MoveAgent.IsIgnoreCollide = true
self.MoveAgent.CeilSize = 0.3
self.MoveAgent.Speed = XGuildDormConfig.GetRoleMoveSpeed()
end
return self.MoveAgent
end
function XGuildDormBaseRole:GetIsInteracting()
return self.InteractStatus == XGuildDormConfig.InteractStatus.Begin
or self.InteractStatus == XGuildDormConfig.InteractStatus.Playing
end
function XGuildDormBaseRole:GetInteractStatus()
return self.InteractStatus
end
function XGuildDormBaseRole:UpdateInteractStatus(value)
self.InteractStatus = value
end
function XGuildDormBaseRole:EnableCharacterController(value)
if self:GetRLRole():GetCharacterController() == nil then
return
end
self:GetRLRole():GetCharacterController().enabled = value
end
function XGuildDormBaseRole:GetCurrentInteractInfo()
return self.CurrentInteractInfo
end
function XGuildDormBaseRole:UpdateCurrentInteractInfo(value)
self.CurrentInteractInfo = value
end
function XGuildDormBaseRole:AddComponent(compoent, pos)
self.GDComponentManager:AddComponent(compoent, pos)
end
function XGuildDormBaseRole:GetComponent(className)
return self.GDComponentManager:GetComponent(className)
end
function XGuildDormBaseRole:PlayBehavior(id)
local agent=self:GetAgent()
if agent then
agent:PlayBehavior(id)
end
end
function XGuildDormBaseRole:PlayBehaviorByType(behaviorType)
if behaviorType == nil then
XLog.Error("获取角色行为树失败角色id=".. tostring(self.Id) .. ", behaviorType=空")
return
end
self:PlayBehavior(self:GetBehaviorIdByType(behaviorType))
end
function XGuildDormBaseRole:GetBehaviorIdByType(behaviorType)
local behaviorId = XGuildDormConfig.GetRoleBehaviorIdByState(self.Id, behaviorType)
if not behaviorId then
XLog.Error("获取角色行为树失败角色id=".. tostring(self.Id) .. ", state=" .. tostring(behaviorType))
return
end
return behaviorId
end
function XGuildDormBaseRole:Update(dt)
self.GDComponentManager:Update(dt)
end
function XGuildDormBaseRole:ChangeStateMachine(state, isForce)
if not XGuildDormRoleFSMFactory.CheckHasState(state) then
XLog.Error("guild dorm role 切换不存在的状态", state)
return
end
if self.StateMachine and self.StateMachine.name == state and not isForce then
return
end
if self.StateMachine then
self.StateMachine:Exit()
end
self.StateMachine = XGuildDormRoleFSMFactory.New(state, self)
self.StateMachine:Enter()
self.StateMachine:Execute()
end
function XGuildDormBaseRole:CheckIsInStateMachine(state)
if self.StateMachine and self.StateMachine.name == state then
return true
end
return false
end
function XGuildDormBaseRole:GetEntityId()
end
function XGuildDormBaseRole:GetRLEntity()
return self:GetRLRole()
end
function XGuildDormBaseRole:GetNameHeightOffset()
return XGuildDormConfig.GetRoleNameHeightOffset(self:GetId())
end
function XGuildDormBaseRole:GetTalkHeightOffset()
return XGuildDormConfig.GetRoleTalkHeightOffset(self:GetId())
end
function XGuildDormBaseRole:GetName()
end
function XGuildDormBaseRole:GetTriangleType()
return XGuildDormConfig.TriangleType.None
end
function XGuildDormBaseRole:CheckIsSelfPlayer()
return false
end
function XGuildDormBaseRole:GetUiShowDistance()
return 0
end
return XGuildDormBaseRole