Files
Endfield-Data/LuaScripts/Phase/PhaseItem/PhaseCharItem.lua
2025-12-02 20:37:18 +07:00

472 lines
9.6 KiB
Lua

local phaseGameObjectItem = require_ex('Phase/PhaseItem/PhaseGameObjectItem')
PhaseCharItem = HL.Class("PhaseCharItem", phaseGameObjectItem.PhaseGameObjectItem)
PhaseCharItem.m_tmpViewData = HL.Field(HL.Table)
PhaseCharItem.uiModelMono = HL.Field(HL.Userdata)
PhaseCharItem.charId = HL.Field(HL.String) << ""
PhaseCharItem.charInstId = HL.Field(HL.Int) << -1
PhaseCharItem.animator = HL.Field(HL.Userdata)
do
PhaseCharItem._OnInit = HL.Override() << function(self)
PhaseCharItem.Super._OnInit(self)
self.charId = self.arg.charId
self.charInstId = self.arg.charInstId or -1
end
PhaseCharItem._OnDestroy = HL.Override() << function(self)
if self.go then
self.phase.modelLoader:UnloadModel(self.go)
self.go = nil
self.uiModelMono = nil
self.animator = nil
end
end
PhaseCharItem._GameObjectInit = HL.Override() << function(self)
self.m_tmpViewData = {}
PhaseCharItem.Super._GameObjectInit(self)
self.animator = self.go:GetComponent("Animator")
self.animator:Update(0)
local layer = self.arg.layer
local hide = self.arg.hide
local pos = self.arg.pos
if layer ~= nil then
self:SetLayer(layer)
end
if pos ~= nil then
self:SetPos(pos)
end
self.uiModelMono = self.go:GetComponent("CharUIModelMono")
self:SetVisible(not hide)
self:_RefreshView()
end
PhaseCharItem.LoadPotentialEffects = HL.Method() << function(self)
if NotNull(self.uiModelMono) then
self.uiModelMono:LoadPotentialEffects()
end
end
PhaseCharItem.UnloadPotentialEffects = HL.Method() << function(self)
if NotNull(self.uiModelMono) then
self.uiModelMono:UnloadPotentialEffects()
end
end
PhaseCharItem.LoadTargetWeapon = HL.Method(HL.Number) << function(self, instId)
if not instId then
return
end
if self.uiModelMono and NotNull(self.uiModelMono) then
self.uiModelMono:LoadTargetWeapon(instId)
end
end
PhaseCharItem.ReloadWeapon = HL.Method() << function(self)
if self.uiModelMono then
self.uiModelMono:ReloadWeapon(self.charInstId)
end
end
PhaseCharItem.ReloadWeaponDecoEffect = HL.Method(HL.Number) << function(self, weaponInstId)
if self.uiModelMono then
self.uiModelMono:ReloadWeaponDecoEffect(weaponInstId)
end
end
PhaseCharItem.GetAnimator = HL.Method().Return(HL.Userdata) << function(self)
return self.animator
end
PhaseCharItem.PlayAnimByState = HL.Method(HL.String).Return(HL.Boolean) << function(self, state)
if not self.go then
return false
end
if not self.animator then
return false
end
self.animator:Play(state)
return true
end
PhaseCharItem.SetTrigger = HL.Method(HL.String) << function(self, trigger)
self.m_tmpViewData.trigger = trigger
self:_RefreshView()
end
PhaseCharItem._DoSetTrigger = HL.Method(HL.String) << function(self, trigger)
self.animator:SetTrigger(trigger)
if NotNull(self.uiModelMono) then
self.uiModelMono:DecoItemSetTrigger(trigger)
end
end
PhaseCharItem.SetInteger = HL.Method(HL.String, HL.Number) << function(self, name, num)
self.m_tmpViewData.integer = num
self.m_tmpViewData.integerName = name
self:_RefreshView()
end
PhaseCharItem._DoSetInteger = HL.Method(HL.String, HL.Number) << function(self, name, num)
self.animator:SetInteger(name, math.floor(num))
if NotNull(self.uiModelMono) then
self.uiModelMono:DecoItemSetInteger(name, math.floor(num))
end
end
PhaseCharItem.SetBool = HL.Method(HL.String, HL.Boolean) << function(self, name, active)
self.m_tmpViewData.bool = active
self.m_tmpViewData.boolName = name
self:_RefreshView()
end
PhaseCharItem._DoSetBool = HL.Method(HL.String, HL.Boolean) << function(self, name, active)
self.animator:SetBool(name, active)
if NotNull(self.uiModelMono) then
self.uiModelMono:DecoItemSetBool(name, active)
end
end
PhaseCharItem.SwitchWeaponState = HL.Method(HL.Userdata, HL.Opt(HL.Boolean)) << function(self, state, ignoreStatic)
self.m_tmpViewData.weaponState = state
self.m_tmpViewData.ignoreStatic = ignoreStatic
self:_RefreshView()
end
PhaseCharItem._DoSwitchWeaponState = HL.Method(HL.Userdata, HL.Opt(HL.Boolean)) << function(self, state, ignoreStatic)
if self.go and self.uiModelMono then
local uiModelMono = self.uiModelMono
uiModelMono:SwitchWeaponState(state, ignoreStatic)
uiModelMono:ToggleWeaponTick(true)
end
end
PhaseCharItem.SetParent = HL.Method(HL.Userdata) << function(self, parent)
self.m_tmpViewData.parent = parent
self:_RefreshView()
end
PhaseCharItem._DoSetParent = HL.Method(HL.Userdata) << function(self, parent)
local pos = self.go.transform.localPosition
local rot = self.go.transform.localRotation
self.go.transform:SetParent(parent)
self.go.transform.localPosition = pos
self.go.transform.localRotation = rot
end
PhaseCharItem.SetLayer = HL.Method(HL.Number) << function(self, layer)
self.m_tmpViewData.layer = layer
self:_RefreshView()
end
PhaseCharItem._DoSetLayer = HL.Method(HL.Number) << function(self, layer)
self.go.transform:SetLayerOnChildren(layer, true, true)
end
PhaseCharItem.SetPos = HL.Method(Vector3) << function(self, pos)
self.m_tmpViewData.pos = pos
self:_RefreshView()
end
PhaseCharItem._DoSetPos = HL.Method(Vector3) << function(self, pos)
self.go.transform.localPosition = pos
end
PhaseCharItem.SetVisible = HL.Method(HL.Boolean) << function(self, visible)
self.m_tmpViewData.visible = visible
self:_RefreshView()
end
PhaseCharItem.IsVisible = HL.Method().Return(HL.Boolean) << function(self)
if self.go then
return self.go.gameObject.activeSelf
elseif self.m_tmpViewData and self.m_tmpViewData.visible then
return self.m_tmpViewData.visible
else
return true
end
end
PhaseCharItem._DoSetVisible = HL.Method(HL.Boolean) << function(self, visible)
self.uiModelMono:SetVisible(visible)
end
PhaseCharItem._RefreshView = HL.Method() << function(self)
if not self.m_tmpViewData then
return
end
if not next(self.m_tmpViewData) then
return
end
if not self.go then
return
end
local data = self.m_tmpViewData
if data.visible ~= nil then
self:_DoSetVisible(data.visible)
end
if data.pos then
self:_DoSetPos(data.pos)
end
if data.parent then
self:_DoSetParent(data.parent)
end
if data.layer then
self:_DoSetLayer(data.layer)
end
if data.trigger then
self:_DoSetTrigger(data.trigger)
end
if data.integer and not string.isEmpty(data.integerName) then
self:_DoSetInteger(data.integerName, data.integer)
end
if data.bool ~= nil and not string.isEmpty(data.boolName) then
self:_DoSetBool(data.boolName, data.bool)
end
if data.weaponState then
self:_DoSwitchWeaponState(data.weaponState, data.ignoreStatic)
end
self.m_tmpViewData = {}
end
PhaseCharItem.RotateChar = HL.Method(HL.Number) << function(self, deltaAngle)
if self.go then
local localAngle = self.go.transform.localEulerAngles
self.go.transform.localEulerAngles = Vector3(localAngle.x, localAngle.y + deltaAngle, localAngle.z)
end
end
PhaseCharItem.ResetChar = HL.Method() << function(self)
if self.go then
self.go.transform.localEulerAngles = Vector3.zero
end
end
PhaseCharItem.GetName = HL.Method().Return(HL.String) << function(self)
local name
if self.go then
name = self.go.name
end
return name
end
PhaseCharItem.SetName = HL.Method(HL.String) << function(self, name)
if self.go then
self.go.name = name
end
end
end
do
PhaseCharItem._DoTransitionInCoroutine = HL.Override(HL.Boolean, HL.Opt(HL.Table)) << function(self, fastMode, args)
end
PhaseCharItem._DoTransitionBehindCoroutine = HL.Override(HL.Boolean, HL.Opt(HL.Table)) << function(self, fastMode, args)
end
PhaseCharItem._DoTransitionOutCoroutine = HL.Override(HL.Boolean, HL.Opt(HL.Table)) << function(self, fastMode, args)
end
PhaseCharItem._CheckAllTransitionDone = HL.Override().Return(HL.Boolean) << function(self)
return true
end
end
HL.Commit(PhaseCharItem)