Jump to content

Recommended Posts

I managed to do it in sorf of different way, but it works...

Spoiler

I made another idle animation for displaying items on shelves. (With different pivot_y)

in custom prefab fn()


	inst.bankname =	"name_of_bank"
	inst.buildname = "name_of_build"

in modmain

Spoiler


local function SetImage(inst, ent, slot)

    local src = ent
    local bank = nil
    local build = nil

    if src ~= nil and src.components.inventoryitem ~= nil then
        build = #(ent.buildname or "") > 0 and
            ent.buildname
        bank = #(ent.bankname or "") > 0 and
            ent.bankname
    end 

    if build ~= nil and bank ~= nil then 
        inst.AnimState:OverrideSymbol(slot, build, bank)
        inst.imagename = src ~= nil or ""
    else
        inst.imagename = ""
        inst.AnimState:ClearOverrideSymbol(slot)
    end
end 

AddClassPostConstruct("components/shelfer", function(self, inst)
	if self.buildandbank == nil then	-- to prevent running copies of this in this mod or other ones
		local SetArt = self.SetArt
		function self:SetArt()
			SetArt(self)
			
			local item = self.shelf.components.container:GetItemInSlot(self.slotindex)

			if item and item.buildname ~= nil and item.bankname ~= nil then
				SetImage(self.shelf, item, self.slot)
				self.inst:SetPrefabNameOverride(item.components.inspectable.nameoverride or item.prefab)
			end
		end
		self.buildandbank = true		-- to prevent running copies of this in this mod or other ones
	end
end)

 

 

So, mister Ultroman, it is okay to overrite it like this?

On 8/7/2019 at 11:47 AM, zetake said:

I managed to do it in sorf of different way, but it works...

  Reveal hidden contents

I made another idle animation for displaying items on shelves. (With different pivot_y)

in custom prefab fn()



	inst.bankname =	"name_of_bank"
	inst.buildname = "name_of_build"

in modmain

  Reveal hidden contents



local function SetImage(inst, ent, slot)

    local src = ent
    local bank = nil
    local build = nil

    if src ~= nil and src.components.inventoryitem ~= nil then
        build = #(ent.buildname or "") > 0 and
            ent.buildname
        bank = #(ent.bankname or "") > 0 and
            ent.bankname
    end 

    if build ~= nil and bank ~= nil then 
        inst.AnimState:OverrideSymbol(slot, build, bank)
        inst.imagename = src ~= nil or ""
    else
        inst.imagename = ""
        inst.AnimState:ClearOverrideSymbol(slot)
    end
end 

AddClassPostConstruct("components/shelfer", function(self, inst)
	if self.buildandbank == nil then	-- to prevent running copies of this in this mod or other ones
		local SetArt = self.SetArt
		function self:SetArt()
			SetArt(self)
			
			local item = self.shelf.components.container:GetItemInSlot(self.slotindex)

			if item and item.buildname ~= nil and item.bankname ~= nil then
				SetImage(self.shelf, item, self.slot)
				self.inst:SetPrefabNameOverride(item.components.inspectable.nameoverride or item.prefab)
			end
		end
		self.buildandbank = true		-- to prevent running copies of this in this mod or other ones
	end
end)

 

 

So, mister Ultroman, it is okay to overrite it like this?

Oof, I wish I had found this post sooner to help you with this before you went through so much trouble. Klei actually (albeit possibly unintentionally) implemented a way to add shelf art for modded items awhile back through a simple override which they made to use for items with differing appearence depending on world (ex. logs, snakeskin, bannanas etc.). If memory serves, the line is something like "inst.shelfart = youranimfolder/yourprefabsanim", which you then put in your prefabs main function. You can just check the prefabs for the formerly mentioned items to get the exact line if I'm wrong, but this did the trick for me in a still currently unreleased mod of mine that I should probably get back to at some point. Hope this helped!

EDIT: Ignore this. When I wrote this I was less knowledgable about modding and didn't know exactly how shelfer worked. Turns out the only reason this solution worked for me was because the image I wanted was already in inventoryimages.tex at the time so it was really using that instead of mine. Apologies to whomever I confused with this.

Edited by Portmanteau
Correction on my part.

It doesn't work for me... shelfart is just alternative imagename...

And like I said: in my case AnimState can't access atlas from my mod.

So, animation instead of atlas and texture is my way...

 

Moreover I have more than 1 item texture in texture/animation...

Thus, it requires two names not one the same...

Edited by zetake

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
  • Create New...