diff --git a/test/quickfort/ecosystem.lua b/test/quickfort/ecosystem.lua index 1734a2892..df2e87079 100644 --- a/test/quickfort/ecosystem.lua +++ b/test/quickfort/ecosystem.lua @@ -9,6 +9,7 @@ -- width (required) -- height (required) -- depth (default is 1) +-- start (cursor offset for input blueprints, default is 1,1) -- -- depends on blueprint, buildingplan, and dig-now plugins (as well as the -- quickfort script, of course) @@ -22,6 +23,7 @@ config.mode = 'fortress' +local argparse = require('argparse') local blueprint = require('plugins.blueprint') local quickfort_list = reqscript('internal/quickfort/list') local quickfort_command = reqscript('internal/quickfort/command') @@ -120,6 +122,11 @@ local function get_blueprint_sets() spec.width = get_positive_int(spec.width, 'width', basename) spec.height = get_positive_int(spec.height, 'height', basename) spec.depth = get_positive_int(spec.depth, 'depth', basename) + if spec.start then + local start_spec = argparse.numberList(spec.start, basename, 2) + spec.start = {x=get_positive_int(start_spec[1], 'startx', basename), + y=get_positive_int(start_spec[2], 'starty', basename)} + end end return sets @@ -179,20 +186,22 @@ local function get_test_area(area, spec) end end -local function get_cursor_arg(pos) - return ('--cursor=%d,%d,%d'):format(pos.x, pos.y, pos.z) +local function get_cursor_arg(pos, start) + start = start or {x=1, y=1} + return ('--cursor=%d,%d,%d'):format(pos.x+start.x-1, pos.y+start.y-1, pos.z) end -local function quickfort_cmd(cmd, listnum, pos) - dfhack.run_script('quickfort', cmd, '-q', listnum, get_cursor_arg(pos)) +local function quickfort_cmd(cmd, listnum, pos, start) + dfhack.run_script('quickfort', cmd, '-q', listnum, + get_cursor_arg(pos, start)) end -local function quickfort_run(listnum, pos) - quickfort_cmd('run', listnum, pos) +local function quickfort_run(listnum, pos, start) + quickfort_cmd('run', listnum, pos, start) end -local function quickfort_undo(listnum, pos) - quickfort_cmd('undo', listnum, pos) +local function quickfort_undo(listnum, pos, start) + quickfort_cmd('undo', listnum, pos, start) end local function designate_area(pos, spec) @@ -259,11 +268,13 @@ function test.end_to_end() local area = {width=0, height=0, depth=0} for basename,set in pairs(sets) do + local spec = set.spec + print(('running quickfort ecosystem test: "%s": %s'): - format(basename, set.spec.description)) + format(basename, spec.description)) -- find an unused area of the map that meets requirements, else skip - if not get_test_area(area, set.spec) then + if not get_test_area(area, spec) then print(('cannot find unused map area to test set "%s"; skipping'): format(basename)) goto continue @@ -273,9 +284,9 @@ function test.end_to_end() -- there is no #dig blueprint) local phases = set.phases if phases.dig then - quickfort_run(phases.dig.listnum, area.pos) + quickfort_run(phases.dig.listnum, area.pos, spec.start) else - designate_area(area.pos, set.spec) + designate_area(area.pos, spec) end -- run dig-now to dig out designated tiles @@ -284,7 +295,7 @@ function test.end_to_end() -- quickfort run remaining blueprints for _,phase_name in ipairs(phase_names) do if phase_name ~= 'dig' and phases[phase_name] then - quickfort_run(phases[phase_name].listnum, area.pos) + quickfort_run(phases[phase_name].listnum, area.pos, spec.start) if phase_name == 'track' then run_dig_now(area) end @@ -297,7 +308,7 @@ function test.end_to_end() -- quickfort undo blueprints for _,phase_name in ipairs(phase_names) do if phases[phase_name] then - quickfort_undo(phases[phase_name].listnum, area.pos) + quickfort_undo(phases[phase_name].listnum, area.pos, spec.start) end end