-- Clone the current uniform template in the military screen. --[[=begin gui/clone-uniform ================= Bind to a key (the example config uses :kbd:`Ctrl`:kbd:`C`), and activate in the Uniforms page of the military screen with the cursor in the leftmost list. When invoked, the script duplicates the currently selected uniform template, and selects the newly created copy. =end]] local utils = require 'utils' local gui = require 'gui' local entity = df.global.ui.main.fortress_entity local args = {...} local vs = dfhack.gui.getCurViewscreen() local vstype = df.viewscreen_layer_militaryst if not vstype:is_instance(vs) then qerror('Call this from the military screen') end local slist = vs.layer_objects[0] if vs.page == vstype.T_page.Uniforms and slist.active and slist.num_entries > 0 and not vs.equip.in_name_uniform then local idx = slist.num_entries if #vs.equip.uniforms ~= idx or #entity.uniforms ~= idx then error('Uniform vector length mismatch') end local uniform = vs.equip.uniforms[slist:getListCursor()] local ucopy = uniform:new() ucopy.id = entity.next_uniform_id ucopy.name = ucopy.name..'(Copy)' for k,v in ipairs(ucopy.uniform_item_info) do for k2,v2 in ipairs(v) do v[k2] = v2:new() end end entity.next_uniform_id = entity.next_uniform_id + 1 entity.uniforms:insert('#',ucopy) vs.equip.uniforms:insert('#',ucopy) slist.num_entries = idx+1 slist.cursor = idx-1 gui.simulateInput(vs, 'STANDARDSCROLL_DOWN') else qerror('Call this with a uniform selected on the Uniforms page of military screen') end