Icon representing a recipe

Recipe: Advanced Rebuild

created by PieThrower

Profile


Name
Advanced Rebuild
ID
104406
Shared with
Public
Parent
None
Children
None
Created on
January 25, 2021 at 23:55 PM UTC
Updated on
January 25, 2021 at 23:55 PM UTC
Description

Rebuilds and wiggles the selected segments. Repeats a given number of times, starting from the recent best.

Best for


Code


-------------------------------------------------------------------------------- -- Advanced Rebuild -- -- Rebuilds and wiggles the selected segments -- Repeats a given number of times, starting from the recent best -------------------------------------------------------------------------------- rebuildIters = 3 localWiggleIters = 25 localShakeIters = 5 numIters = 20 lowClash = 0.3 highClash = 1.0 --[[ TODO - add header comment - add nearby (or global) wiggle - figure out what the deal is with variable scope ]]-- initialScore = 0 tempScore = 0 function getParameters() dlg = dialog.CreateDialog("Advanced Rebuild") dlg.lowClash = dialog.AddSlider("Low Clash Importance", 0.3, 0, 1, 2) dlg.highClash = dialog.AddSlider("High Clash Importance", 1.0, 0, 1, 2) dlg.rebuildIters = dialog.AddSlider("Rebuild Iterations", 3, 1, 5, 0) dlg.wiggleIters = dialog.AddSlider("Wiggle Iterations", 25, 1, 50, 0) dlg.shakeIters = dialog.AddSlider("Shake Iterations", 5, 1, 20, 0) dlg.numIters = dialog.AddSlider("Program Iterations", 20, 1, 100, 0) dlg.ok = dialog.AddButton("OK", 1) dlg.cancel = dialog.AddButton("Cancel", 0) if dialog.Show(dlg) > 0 then lowClash = dlg.lowClash.value highClash = dlg.highClash.value rebuildIters = dlg.rebuildIters.value wiggleIters = dlg.wiggleIters.value shakeIters = dlg.shakeIters.value numIters = dlg.numIters.value return true else print("Program Cancelled") end return false end function getSelection() userSelected = dialog.SelectSegments() selection.DeselectAll() for i = 1, #userSelected do selection.Select(userSelected[i]) end end function rebuild() -- rebuild structure.RebuildSelected(rebuildIters) -- low clash wiggle and shake behavior.SetClashImportance(lowClash) structure.WiggleSelected(localWiggleIters / 2, true, true) structure.ShakeSidechainsSelected(localShakeIters / 2) -- high clash wiggle and shake behavior.SetClashImportance(highClash) structure.WiggleSelected(localWiggleIters, true, true) structure.ShakeSidechainsSelected(localShakeIters) end function updateScore() curScore = current.GetScore() if curScore > tempScore then print("Score improved by", curScore - tempScore) tempScore = curScore else recentbest.Restore() end end function cleanup() recentbest.Restore() behavior.SetClashImportance(1.0) print("Script complete. Score changed by", current.GetScore() - initialScore) print("Ending score:", current.GetScore()) end function main() if not getParameters() then return false end initialScore = recentbest.GetScore() tempScore = initialScore print("Starting score:", initialScore) getSelection() for i = 1, numIters do print("Starting Iteration", i) rebuild() updateScore() end cleanup() return true end xpcall(main, cleanup)

Comments