PGRData/Script/matrix/xentity/xguilddorm/role/XGuildDormBaseRole.lua
2024-09-01 22:49:41 +02:00

205 lines
No EOL
5.8 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 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