fceux/output/luaScripts/taseditor/InvertSelection.lua

56 lines
1.8 KiB
Lua

---------------------------------------------------------------------------
-- Invert Selection
-- by AnS, 2012
---------------------------------------------------------------------------
-- Showcases following functions:
-- * taseditor.getselection()
-- * taseditor.setselection()
---------------------------------------------------------------------------
-- Usage:
-- Run the script, unpause emulation (or simply Frame Advance once).
-- Now you can press "Invert Selection" button to invert current Selection.
-- Previously selected frames become deselected, all other frames become selected.
---------------------------------------------------------------------------
function display_selection()
if (taseditor.engaged()) then
selection_table = taseditor.getselection();
if (selection_table ~= nil) then
selection_size = #selection_table;
gui.text(0, 10, "Selection: " .. selection_size .. " rows");
else
gui.text(0, 10, "Selection: no");
end
else
gui.text(1, 9, "TAS Editor is not engaged.");
end
end
function invert_selection()
old_sel = taseditor.getselection();
new_sel = {};
-- Select all
movie_size = movie.length();
for i = 0, movie_size do
new_sel[i + 1] = i;
end
if (selection_table ~= nil) then
-- Substract old selection from new selection set
for i = #old_sel, 1, -1 do
selected_frame = old_sel[i];
-- we're taking advantage of the fact that "old_sel" is sorted in ascending order
-- so we can safely use table.remove to remove indexes from the end to the beginning
table.remove(new_sel, selected_frame + 1);
end
end
-- Apply new set to TAS Editor selection
taseditor.setselection(new_sel);
end
taseditor.registerauto(display_selection);
taseditor.registermanual(invert_selection, "Invert Selection");