Move all visibility management to PartsManager

This commit is contained in:
NullBite 2022-03-21 23:08:29 -04:00
parent aa4772ca02
commit f1ad854993
Signed by: nullbite
GPG Key ID: 6C4D545385D4925A

View File

@ -185,6 +185,9 @@ function setState(name, state)
end
data.save(name, skin_state[name])
end
-- Local State (these are copied by pings at runtime) --
local_state={}
-- }}}
-- Parts management -- {{{
@ -243,7 +246,11 @@ do
PartsManager.refreshPart(v.part)
end
end
function PartsManager.addPartGroupFunction(group, func)
for _, v in ipairs(group) do
PartsManager.addPartFunction(v, func)
end
end
end
-- }}}
@ -259,24 +266,65 @@ VANILLA_GROUPS={
["RIGHT_LEG"]={vanilla_model.RIGHT_LEG, vanilla_model.RIGHT_PANTS_LEG},
["OUTER"]={ vanilla_model.HAT, vanilla_model.JACKET, vanilla_model.LEFT_SLEEVE, vanilla_model.RIGHT_SLEEVE, vanilla_model.LEFT_PANTS_LEG, vanilla_model.RIGHT_PANTS_LEG },
["INNER"]={ vanilla_model.HEAD, vanilla_model.TORSO, vanilla_model.LEFT_ARM, vanilla_model.RIGHT_ARM, vanilla_model.LEFT_LEG, vanilla_model.RIGHT_LEG },
["ALL"]={}
["ALL"]={},
["ARMOR"]={}
}
for _, v in pairs(VANILLA_GROUPS.INNER) do table.insert(VANILLA_GROUPS.ALL,v) end
for _, v in pairs(VANILLA_GROUPS.OUTER) do table.insert(VANILLA_GROUPS.ALL,v) end
for _, v in pairs(armor_model) do table.insert(VANILLA_GROUPS.ARMOR, v) end
CUSTOM_GROUPS={} -- RightArm LeftArm RightLeg LeftLeg Body Head
for _, v in pairs(model) do table.insert(CUSTOM_GROUPS, v) end
-- }}}
-- PartsManager rules {{{
-- Vanilla rules
for _, v in pairs(VANILLA_GROUPS.ALL) do
PartsManager.addPartFunction(v, function() return skin_state.vanilla_enabled end)
do
local function aquaticTailVisible()
return local_state.aquatic_enabled and player.isUnderwater() end
local function vanillaPartial()
if local_state.vanilla_enabled then
return false
end
return local_state.vanilla_partial
end
--- Vanilla state
-- Show all in vanilla partial
PartsManager.addPartGroupFunction(VANILLA_GROUPS.ALL, function() return
vanillaPartial() end)
-- no legs in water if tail enabled
PartsManager.addPartGroupFunction(VANILLA_GROUPS.LEFT_LEG, function(last) return last and not aquaticTailVisible() end)
PartsManager.addPartGroupFunction(VANILLA_GROUPS.RIGHT_LEG, function(last) return last and not aquaticTailVisible() end)
-- no vanilla head in partial vanilla
PartsManager.addPartGroupFunction(VANILLA_GROUPS.HEAD, function(last)
return last and not vanillaPartial() end)
-- Always true if vanilla_enabled
PartsManager.addPartGroupFunction(VANILLA_GROUPS.ALL,
function(last) return last or local_state.vanilla_enabled end)
--- Armor state
PartsManager.addPartGroupFunction(VANILLA_GROUPS.ARMOR,
function(last) return local_state.armor_enabled end)
--- Custom state
-- Disable model in vanilla partial
PartsManager.addPartGroupFunction(CUSTOM_GROUPS, function(last) return not vanillaPartial() end)
-- no legs in water if tail enabled
PartsManager.addPartFunction(model.LeftLeg, function(last) return last and not aquaticTailVisible() end)
PartsManager.addPartFunction(model.RightLeg, function(last) return last and not aquaticTailVisible() end)
-- Enable head in vanilla partial
PartsManager.addPartFunction(model.Head, function(last) return last or vanillaPartial() end)
-- Disable when vanilla_enabled
PartsManager.addPartGroupFunction(CUSTOM_GROUPS, function(last) return last and not local_state.vanilla_enabled end)
end
for _, v in pairs(VANILLA_GROUPS.HEAD) do
PartsManager.addPartFunction(v, function(last)
return last and not skin_state.vanilla_partial end) end
print(PartsManager.evaluatePart(vanilla_model.TORSO))
print(PartsManager.evaluatePart(VANILLA_GROUPS.HEAD[1]))
PartsManager.refreshAll()
SNORES={"snore-1", "snore-2", "snore-3"}
-- }}}
@ -346,12 +394,7 @@ end
--- Toggle Armor ---
function setArmor(state)
setState("armor_enabled", state)
ping.setArmor(skin_state.armor_enabled)
end
function ping.setArmor(state)
for key, value in pairs(armor_model) do
value.setEnabled(state)
end
syncState()
end
do
@ -378,23 +421,20 @@ end
--- Toggle Vanilla ---
function setVanilla(state)
setState("vanilla_enabled", state)
ping.setVanilla(skin_state.vanilla_enabled)
syncState()
end
function ping.setVanilla(state)
if not meta.getCanModifyVanilla() then return end
for _, v in pairs(VANILLA_GROUPS.ALL) do
v.setEnabled(state)
end
for _, v in pairs(model) do
v.setEnabled(not state)
end
end
function syncState()
ping.setArmor(skin_state.armor_enabled)
ping.setVanilla(skin_state.vanilla_enabled)
ping.setSnoring(skin_state.snore_enabled)
ping.syncState(skin_state)
end
function ping.syncState(tbl)
for k, v in pairs(tbl) do
local_state[k]=v
end
PartsManager.refreshAll()
end
-- }}}
@ -555,10 +595,15 @@ function onCommand(input)
if skin_state[input[2]] ~= nil then
setState(input[2], unstring(input[3]))
log(tostring(input[2]) .. " is now " .. tostring(skin_state[input[2]]))
syncState()
else
log(tostring(input[2]) .. ": no such setting")
end
end
end
if input[1] == chat_prefix .. "pv" then
setState("vanilla_partial")
syncState()
end
end
--}}}