Tutorials/Persisting-Variables

From FiguraMC
Revision as of 00:17, 29 September 2024 by Riftlight (talk | contribs) (Move from configapi)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Avatars can use the ConfigAPI to make their variables persist across reloads. This can be used for things such as saving settings across avatars or saving information about an avatar's state.

To begin with, create a config file. This can be done with either a script or a /figura run command; it's safest to use a script in an IDE to have syntax highlighting and avoid errors.

config:setName("variablePersistence")
-- All keys must be strings!
config:save("pantsColor", vec(0.5, 0.8, 0.1))
config:save("hatVisible", true)
config:save("legLength", 5)

Run this script by selecting the avatar it's under. Once it's run, check the existence of the variablePersistence.json file at figura/config. If it's there, that code can be deleted. Next, make some code to read the data in that file when the script is loaded.

config:setName("variablePersistence")
-- The "or (value)" syntax sets the default value if the config:load is nil
local hatVisible = config:load("hatVisible") or true
local legLength = config:load("legLength") or 1
local pantsColor = config:load("pantsColor") or vec(0.9, 0.1, 0.9)

function pings.updateFromConfig(hat, leg, pants)
    models.model.root.Head.Hat:setVisible(hat)

    models.model.root.LeftLeg:setScale(1, leg, 1)
    models.model.root.RightLeg:setScale(1, leg, 1)
    
    models.model.root.LeftLeg["Left Pants"]:setColor(pants)
    models.model.root.RightLeg["Right Pants"]:setColor(pants)
end

pings.updateFromConfig(hatVisible, legLength, pantsColor)

Finally, make some code that updates the config when you change values.

-- Check if host:isHost() to ensure that the config:save only runs for the host
function pings.toggleHat(state)
    models.model.root.Head.Hat:setVisible(state)
    if host:isHost() then
        config:save("hatVisible", state)
    end
end

function pings.scaleLegs(scale)
    models.model.root.LeftLeg:setScale(1, scale, 1)
    models.model.root.RightLeg:setScale(1, scale, 1)
    if host:isHost() then
        config:save("legLength", scale)
    end
end

function pings.colorPants(rgb)
    models.model.root.LeftLeg["Left Pants"]:setColor(rgb)
    models.model.root.RightLeg["Right Pants"]:setColor(rgb)
    if host:isHost() then
        config:save("pantsColor", rgb)
    end
end