145 lines
4.0 KiB
Lua
145 lines
4.0 KiB
Lua
|
|
||
|
local showbundle = TUNING.HUAMINISIGN_BUNDLE
|
||
|
local changeskin = TUNING.HUAMINISIGN_SKIN
|
||
|
local candig = TUNING.HUAMINISIGN_DIG
|
||
|
|
||
|
local function newminisign(inst,self)
|
||
|
if inst.components.drawable then
|
||
|
inst.components.drawable.candraw = false
|
||
|
end
|
||
|
|
||
|
if inst.components.workable then
|
||
|
if not candig then
|
||
|
inst:RemoveComponent("workable")
|
||
|
else
|
||
|
inst.components.workable:SetOnFinishCallback(function()
|
||
|
self.nohuaminisign = true
|
||
|
inst:Remove()
|
||
|
end)
|
||
|
end
|
||
|
end
|
||
|
if inst.components.burnable then
|
||
|
inst:RemoveComponent("burnable")
|
||
|
end
|
||
|
if inst.components.propagator then
|
||
|
inst:RemoveComponent("propagator")
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local Smart_Minisign = Class(function(self, inst)
|
||
|
self.inst = inst
|
||
|
self.nohuaminisign = false
|
||
|
self.sign = nil
|
||
|
self.onclose = nil
|
||
|
inst:ListenForEvent("onclose", function(...) self:OnClose() end)
|
||
|
inst:DoTaskInTime(0.1,function (inst) --load or build
|
||
|
if not self.nohuaminisign then
|
||
|
self:SpawnSign()
|
||
|
self:OnClose()
|
||
|
end
|
||
|
end)
|
||
|
self._onremove = function(pet)
|
||
|
self.sign = nil
|
||
|
end
|
||
|
if inst.components.burnable ~= nil then --remove the fx after burnt
|
||
|
local onburnt = inst.components.burnable.onburnt or nil
|
||
|
inst.components.burnable.onburnt = function()
|
||
|
if onburnt ~= nil then
|
||
|
onburnt(inst)
|
||
|
end
|
||
|
if self.sign ~= nil then
|
||
|
self.sign:Remove()
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
function Smart_Minisign:SpawnSign()
|
||
|
local inst = self.inst
|
||
|
if inst:HasTag("burnt") then --of course not
|
||
|
return
|
||
|
end
|
||
|
if self.sign ~= nil then --only one
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local sign = SpawnPrefab("minisign")
|
||
|
self:LinkSign(sign)
|
||
|
end
|
||
|
|
||
|
function Smart_Minisign:LinkSign(minisign)
|
||
|
self.sign = minisign
|
||
|
self.inst:AddChild(minisign)
|
||
|
minisign.Transform:SetPosition(0, 0, 0)
|
||
|
self.inst:ListenForEvent("onremove", self._onremove, minisign)
|
||
|
minisign.persists = false
|
||
|
newminisign(minisign,self)
|
||
|
end
|
||
|
|
||
|
function Smart_Minisign:OnClose()
|
||
|
local inst = self.inst
|
||
|
if self.sign ~= nil and inst.components.container~= nil then
|
||
|
local container = inst.components.container
|
||
|
for i = 1, container:GetNumSlots() do
|
||
|
local item = container:GetItemInSlot(i)
|
||
|
if item ~= nil and item.replica.inventoryitem ~= nil then
|
||
|
if changeskin and item.prefab == "minisign_item" then --以旧换新
|
||
|
self.sign:Remove()
|
||
|
local sign = SpawnPrefab("minisign", item.linked_skinname, item.skin_id )
|
||
|
self:LinkSign(sign)
|
||
|
end
|
||
|
local image = item.replica.inventoryitem:GetImage()
|
||
|
local build = item.replica.inventoryitem:GetHuaAtlas()
|
||
|
--for bundle
|
||
|
if showbundle and item.components.unwrappable ~= nil and item.components.unwrappable.itemdata then
|
||
|
for i, v in ipairs(item.components.unwrappable.itemdata) do
|
||
|
if v then
|
||
|
local copy = SpawnPrefab(v.prefab)
|
||
|
if copy then
|
||
|
if copy.replica.inventoryitem ~= nil then
|
||
|
image = copy.replica.inventoryitem:GetImage()
|
||
|
build = copy.replica.inventoryitem:GetHuaAtlas()
|
||
|
end
|
||
|
copy:Remove()
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
self.sign.AnimState:OverrideSymbol("SWAP_SIGN", build, image)
|
||
|
if item.inv_image_bg and item.inv_image_bg.atlas then
|
||
|
self.sign.AnimState:OverrideSymbol("SWAP_SIGN_BG", resolvefilepath(item.inv_image_bg.atlas), item.inv_image_bg.image)
|
||
|
else
|
||
|
self.sign.AnimState:ClearOverrideSymbol("SWAP_SIGN_BG")
|
||
|
end
|
||
|
break
|
||
|
end
|
||
|
if i == container:GetNumSlots() and item == nil then
|
||
|
self.sign.AnimState:ClearOverrideSymbol("SWAP_SIGN")
|
||
|
self.sign.AnimState:ClearOverrideSymbol("SWAP_SIGN_BG")
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function Smart_Minisign:OnSave()
|
||
|
return
|
||
|
{
|
||
|
nohuaminisign = self.nohuaminisign,
|
||
|
sign = self.sign ~= nil and self.sign:GetSaveRecord() or nil
|
||
|
}
|
||
|
end
|
||
|
|
||
|
function Smart_Minisign:OnLoad(data)
|
||
|
if data then
|
||
|
if data.nohuaminisign ~= nil then
|
||
|
self.nohuaminisign = data.nohuaminisign
|
||
|
end
|
||
|
if data.sign ~= nil then
|
||
|
local sign = SpawnSaveRecord(data.sign)
|
||
|
self:LinkSign(sign)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return Smart_Minisign
|