ro-table/Asstes/Resources/Script/Com/Item/SceneDropItem.txt
2025-06-04 05:02:57 +08:00

386 lines
10 KiB
Plaintext

autoImport("SceneLItem")
autoImport("SceneDropNameCell")
SceneDropItem = reusableClass('SceneDropItem',SceneLItem)
SceneDropItem.PoolSize = 20
SceneDropItem.State = {
Wait,
Appear,
OnGround,
Disappear
}
SceneDropItem.ItemResID = {}
SceneDropItem.EffectResID = {}
--玩家揹包數據管理
local tempVector3 = LuaVector3.zero
function SceneDropItem:ctor()
SceneDropItem.super.ctor(self)
end
-- function SceneDropItem:ctor(guid,staticData,equipStaticData,leftTime,pos,owners,config,sourceID)
-- self:ResetData(guid,staticData,equipStaticData,leftTime,pos,owners,config,sourceID)
-- end
function SceneDropItem:ResetData( guid,staticData,equipStaticData,leftTime,pos,owners,config,sourceID,refinelv)
self.id = guid
self.failedGetCount = 0
self.isPicked = false
self.onGroundFunc = nil
self.onFlagFunc = nil
self.onPickSuccessFunc = nil
self:SetState(SceneDropItem.State.Wait)
self.staticData = staticData
self.equipStaticData = equipStaticData
self.privateOwnLeftTime = leftTime
self.pos = LuaVector3(pos.x,pos.y,pos.z)
ProtolUtility.Better_S2C_Vector3(self.pos, self.pos)
-- self.pos = NavMeshAdjustY.Adjust(PosUtil.DevideVector3(pos.x,pos.y,pos.z))
NavMeshUtility.Better_Sample(self.pos, self.pos, 1)
self:SetCanPickUp(false)
self.config = config
self.isskill = config == GameConfig.SceneDropItem.Skill
self.sourceID = sourceID
self.refinelv = refinelv
self:GetConfig()
end
function SceneDropItem:SetState(state)
self.state = state
end
function SceneDropItem:SetCanPickUp(val)
self.iCanPickUp = val
end
function SceneDropItem:SetOnGroundCallBack(func,owner,...)
self.onGroundFunc = ReusableTable.CreateArray()
self.onGroundFunc[1] = func
self.onGroundFunc[2] = owner
self.onGroundFunc[3] = {...}
-- self.onGroundFunc = {Func=func,Owner = owner,Param = {...}}
end
function SceneDropItem:ClearOnGroundCallBack()
ReusableTable.DestroyAndClearArray(self.onGroundFunc)
self.onGroundFunc = nil
end
function SceneDropItem:DropOnGround()
self:CallBack(self.onGroundFunc)
self:CallBack(self.onFlagFunc)
end
function SceneDropItem:CallBack(t)
if(t~=nil) then
if(t[3]~=nil) then
-- print(t.Param[1])
t[1](t[2],self,unpack(t[3]))
else
t[1](t[2],self)
end
end
end
function SceneDropItem:GetConfig()
if(self.config==nil) then
if(self.equipStaticData~=nil) then
self.config = GameConfig.SceneDropItem.EquipBox
else
self.config = GameConfig.SceneDropItem.ItemBox
end
end
end
function SceneDropItem:PlayAnim(state)
if(self.animPlayer~=nil) then
self.animatorHelper:Play(state,1,false)
end
end
function SceneDropItem:PlayAnimForce(state)
if(self.animPlayer~=nil) then
self.animatorHelper:PlayForce(state,1)
end
end
function SceneDropItem:FailGet()
self.failedGetCount = self.failedGetCount + 1
self:PlayAnimForce(GameConfig.SceneDropItem.Anims.WrongItem)
end
function SceneDropItem:Pick(func,owner,...)
if(self.isPicked==false) then
self.isPicked = true
self.onPickSuccessFunc = ReusableTable.CreateArray()
self.onPickSuccessFunc[1] = func
self.onPickSuccessFunc[2] = owner
self.onPickSuccessFunc[3] = {...}
self:PlayAnimForce(GameConfig.SceneDropItem.Anims.ItemOpen)
-- if(self.config.DropPerform==1) then
-- self.onPickSuccessFunc = {Func=func,Owner = owner,Param = {...}}
-- self:PlayAnimForce(GameConfig.SceneDropItem.Anims.ItemOpen)
-- elseif(self.config.DropPerform==2) then
-- func(owner,self,...)
-- end
end
end
function SceneDropItem:GetEffectPoint(index)
if(self.pointSub~=nil) then
return self.pointSub:GetEffectPoint(index).transform.position
else
return self.pos
end
end
function SceneDropItem:CreateModel()
if(self.model==nil) then
self.model = Game.AssetManager_SceneDropItem:CreateSceneDrop(self.config.Model)
if(self.isskill)then
self:SetSkillIcon();
end
self.model.name = "Item_"..self.id
local configScale = self.config.Scale
tempVector3:Set(configScale,configScale,configScale)
self.model.transform.localScale = tempVector3
self.model.transform.localPosition = self.pos
self.animPlayer = self.model:GetComponent(SimpleAnimatorPlayer)
self.animatorHelper = self.animPlayer.animatorHelper
self.pointSub = self.model:GetComponent(PointSubject)
self.animatorHelper.actionEventListener = function (state,eventID,eventData)
if(eventData == GameConfig.SceneDropItem.Anims.ItemOpen) then
self:CallBack(self.onPickSuccessFunc)
end
end
end
end
local tempVector2 = LuaVector2.zero
function SceneDropItem:SetSkillIcon()
if(self.model == nil)then
return;
end
if(self.staticData == nil)then
return;
end
local item_skill = GameConfig.PoliFire.item_skill;
local skillid = item_skill[self.staticData.id];
local icon = nil;
if(skillid == nil)then
icon = self.staticData.Icon;
else
icon = Table_Skill[skillid] and Table_Skill[skillid].Icon or "";
end
if(icon == nil or icon == "")then
return;
end
local atlas, spriteData;
local skillAtlas = IconManager:GetAtlasByType(UIAtlasConfig.IconAtlas.Skill);
for i=1, #skillAtlas do
spriteData = skillAtlas[i]:GetSprite(icon);
if(spriteData ~= nil)then
atlas = skillAtlas[i];
break;
end
end
if(atlas == nil or spriteData == nil)then
return;
end
local texture = atlas.texture;
local offsetX = spriteData.x/texture.width;
local offsetY = (texture.height - spriteData.y - spriteData.height)/texture.height;
local scaleX = spriteData.width/texture.width;
local scaleY = spriteData.height/texture.height;
local go = GameObjectUtil.Instance:DeepFindChild(self.model.gameObject, "Skill");
local renderer = go:GetComponent(Renderer);
renderer.material = Game.Prefab_SceneGuildIcon.sharedMaterial
renderer.material.mainTexture = texture
-- renderer.material.mainTexture = texture;
if nil ~= offsetX and nil ~= offsetY then
tempVector2:Set(offsetX, offsetY)
renderer.material.mainTextureOffset = tempVector2
end
if nil ~= scaleX and nil ~= scaleY then
tempVector2:Set(scaleX, scaleY)
renderer.material.mainTextureScale = tempVector2
end
end
function SceneDropItem:Appear()
self:SetState(SceneDropItem.State.OnGround)
self:CreateModel()
if(self.config.DropPerform==1) then
self:ShowQuality()
-- elseif(self.config.DropPerform==2) then
-- self:PlayAnimForce(GameConfig.SceneDropItem.Anims.ItemDrop)
end
self:PlayAnimForce(GameConfig.SceneDropItem.Anims.ItemDrop)
end
function SceneDropItem:PlayAppear()
self:CreateModel()
self:SetState(SceneDropItem.State.Appear)
-- if(self.config.DropPerform==1) then
-- self.model:SetActive(false)
-- -- self:ShowSmoke()
-- LeanTween.delayedCall(self.model,self.config.Delay/1000,function ()
-- self.model:SetActive(true)
-- self:ShowQuality()
-- self:DropOnGround()
-- end)
-- elseif(self.config.DropPerform==2) then
-- self.animPlayer.animatorHelper.loopCountChangedListener = function (state,old,new)
-- if(state:IsName(GameConfig.SceneDropItem.Anims.ItemBorn) or state:IsName(GameConfig.SceneDropItem.Anims.WrongItem)) then
-- self:PlayAnimForce(GameConfig.SceneDropItem.Anims.ItemDrop)
-- end
-- end
-- self:PlayAnimForce(GameConfig.SceneDropItem.Anims.ItemBorn)
-- self:DropOnGround()
-- end
self.animatorHelper.loopCountChangedListener = function (state,old,new)
if(state:IsName(GameConfig.SceneDropItem.Anims.ItemBorn) or state:IsName(GameConfig.SceneDropItem.Anims.WrongItem)) then
if(self.config.DropPerform==1 and state:IsName(GameConfig.SceneDropItem.Anims.ItemBorn)) then
self:ShowQuality()
end
self:PlayAnimForce(GameConfig.SceneDropItem.Anims.ItemDrop)
end
end
self:PlayAnimForce(GameConfig.SceneDropItem.Anims.ItemBorn)
self:DropOnGround()
end
function SceneDropItem:ShowSmoke()
Asset_Effect.PlayOneShotAt( EffectMap.Maps.ItemSmoke, p)
end
function SceneDropItem:ShowQuality()
local effect
if(self.isskill)then
effect = "Common/Poring_Skill";
else
effect = GameConfig.SceneDropItem.Quality[self.staticData.Quality]
end
if(effect) then
self.qualityEffect = Asset_Effect.PlayAt(effect,self.pos)
end
end
function SceneDropItem:SetDestroyFlag(func,owner)
if(self.onFlagFunc==nil) then
if(self.state==SceneDropItem.State.OnGround) then
func(owner,self)
else
self.onFlagFunc = ReusableTable.CreateArray()
self.onFlagFunc[1] = func
self.onFlagFunc[2] = owner
end
end
end
function SceneDropItem:SetPickUpFlag(func,owner,...)
if(self.state==SceneDropItem.State.OnGround) then
func(owner,self,...)
else
self.onFlagFunc = ReusableTable.CreateArray()
self.onFlagFunc[1] = func
self.onFlagFunc[2] = owner
self.onFlagFunc[3] = ...
end
end
function SceneDropItem:DestorySelf(dontRemoveSceneName)
if(not dontRemoveSceneName and self.config.ShowName) then
self:DestroyUI()
end
if(self.pos) then
self.pos:Destroy()
self.pos = nil
end
-- self:PlayAnimForce("Empty")
if(self.model~=nil) then
LeanTween.cancel(self.model)
Game.AssetManager_SceneDropItem:DestroySceneDrop(self.config.Model,self.model)
-- GameObject.Destroy(self.model)
self.model = nil
end
if(self.qualityEffect~=nil) then
self.qualityEffect:Destroy()
self.qualityEffect = nil
end
self.animPlayer = nil
if(self.animatorHelper) then
self.animatorHelper.loopCountChangedListener = nil
end
self.animatorHelper = nil
self.onFlagFunc = self:ClearCallFunc(self.onFlagFunc)
self.onPickSuccessFunc = self:ClearCallFunc(self.onPickSuccessFunc)
self:ClearOnGroundCallBack()
self:Destroy()
end
function SceneDropItem:ClearCallFunc(funcTable)
if(funcTable) then
TableUtility.ArrayClear(funcTable)
ReusableTable.DestroyArray(funcTable)
end
return nil
end
function SceneDropItem:Client_RegisterFollow(transform, offset, lostCallback, lostCallbackArg)
if nil == offset then
tempVector3:Set(0,0,0)
offset = tempVector3
end
Game.TransformFollowManager:RegisterFollowPos(
transform,
self.model.transform,
offset,
lostCallback,
lostCallbackArg)
end
function SceneDropItem:ShowName()
local ui = SceneDropNameCell.CreateAsTable(self)
self.ui = ui
end
function SceneDropItem:ShowIcon()
self.ui_icon = SceneDropIconCell.CreateAsTable(self);
end
function SceneDropItem:DestroyUI()
if(self.ui) then
self.ui:Destroy()
end
self.ui = nil
if(self.ui_icon)then
self.ui_icon:Destroy();
end
self.ui_icon = nil;
end
-- override begin
function SceneDropItem:DoConstruct(asArray, data)
end
function SceneDropItem:DoDeconstruct(asArray)
self:DestroyUI()
end
function SceneDropItem:OnObserverDestroyed(k, obj)
end
-- override end