Save this script as LK_AutoShowHideBones.lua in your custom content folder in: /moho pro/scripts/tool/
It won't show up in your tools panel, but it will automatically reveal all shy bones and vitruvian bones on entering frame 0, and it will hide them on leaving frame 0.
Code: Select all
-- **************************************************
-- Provide Moho with the name of this script object
-- **************************************************
ScriptName = "LK_AutoShowHideBones"
-- **************************************************
-- General information about this script
-- **************************************************
LK_AutoShowHideBones = {}
function LK_AutoShowHideBones:Name()
return "LK_AutoShowHideBones"
end
function LK_AutoShowHideBones:Version()
return "0.1"
end
function LK_AutoShowHideBones:Description()
return "LK_AutoShowHideBones"
end
function LK_AutoShowHideBones:Creator()
return "Lukas Krepel, Frame Order"
end
function LK_AutoShowHideBones:UILabel()
return("LK_AutoShowHideBones")
end
-- **************************************************
-- The guts of this script
-- **************************************************
function LK_AutoShowHideBones:IsRelevant(moho)
if MohoMode ~= nil then
if MohoMode:Animation() then
self:Run(moho)
end
else
self:Run(moho)
end
return false
end
function LK_AutoShowHideBones:Run(moho)
-- * Disable in smartbone actions:
local action = moho.document:GetSelectedLayer(i):CurrentAction()
if moho.layer:IsSmartBoneAction(action) then
return
end
local hideBones = true
if moho.frame == 0 and self.prevFrame ~= 0 then
-- * Entered frame 0!
hideBones = false
elseif moho.frame ~= 0 and self.prevFrame == 0 then
-- * Left frame 0!
hideBones = true
else
-- * Do nothing:
return false
end
-- *
local skeletons = self:DocumentSkeletons(moho)
for i = 1, #skeletons do
local skel = skeletons[i]
for j = 0, skel:CountBones() - 1 do
local bone = skel:Bone(j)
if bone.fShy then
bone.fHidden = hideBones
else
bone.fHidden = false
end
end
for j = 0, skel:CountGroups() - 1 do
local group = skel:Group(j)
group.fEnabled = hideBones
end
end
-- *
if hideBones then
moho.layer:UpdateCurFrame()
end
self.prevFrame = moho.frame
end
-- **************************************************
-- Returns a table with all skeletons in the current document
-- **************************************************
function LK_AutoShowHideBones:DocumentSkeletons(moho)
local skeletons = {}
local count = 0
repeat
local layer = moho.document:LayerByAbsoluteID(count)
if layer then
count = count + 1
local skel = layer:ControllingSkeleton()
--
if not skel and layer:IsBoneType() then
skel = moho:LayerAsBone(layer):Skeleton()
end
--
if not table.contains(skeletons, skel) then
table.insert(skeletons, skel)
end
end
until not layer
return skeletons
end
-- **************************************************
-- Check whether a table contains an element
-- **************************************************
function table.contains(table, element)
if table ~= nil then
for _, value in pairs(table) do
if value == element then
return true
end
end
end
return false
end