implement new autochop
parent
b3909f61a3
commit
2877f87d78
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,111 @@
|
||||
local _ENV = mkmodule('plugins.autochop')
|
||||
|
||||
local argparse = require('argparse')
|
||||
|
||||
local function process_args(opts, args)
|
||||
if args[1] == 'help' then
|
||||
opts.help = true
|
||||
return
|
||||
end
|
||||
|
||||
return argparse.processArgsGetopt(args, {
|
||||
{'h', 'help', handler=function() opts.help = true end},
|
||||
})
|
||||
end
|
||||
|
||||
function setTargets(max, min)
|
||||
max = tonumber(max)
|
||||
max = max and math.floor(max) or nil
|
||||
if not max or max < 0 then
|
||||
qerror('target maximum must be a non-negative integer')
|
||||
end
|
||||
|
||||
min = tonumber(min)
|
||||
min = min and math.floor(min) or nil
|
||||
if min and (min < 0 or min > max) then
|
||||
qerror('target minimum must be between 0 and the maximum, inclusive')
|
||||
end
|
||||
if not min then
|
||||
min = math.floor(max * 0.8)
|
||||
end
|
||||
autochop_setTargets(max, min)
|
||||
end
|
||||
|
||||
local function do_set_burrow_config(var_name, val, burrows)
|
||||
for _,bspec in ipairs(argparse.stringList(burrows)) do
|
||||
local config = autochop_getBurrowConfig(bspec)
|
||||
config[var_name] = val
|
||||
autochop_setBurrowConfig(config.id, config.chop, config.clearcut,
|
||||
config.protect_brewable, config.protect_edible,
|
||||
config.protect_cookable)
|
||||
end
|
||||
end
|
||||
|
||||
local function do_set_burrow_protect_config(types, val, burrows)
|
||||
for _,tname in ipairs(argparse.stringList(types)) do
|
||||
do_set_burrow_config('protect_'..tname, val, burrows)
|
||||
end
|
||||
end
|
||||
|
||||
function parse_commandline(...)
|
||||
local args, opts = {...}, {}
|
||||
local positionals = process_args(opts, args)
|
||||
|
||||
if opts.help then
|
||||
return false
|
||||
end
|
||||
|
||||
local command = positionals[1]
|
||||
if not command or command == 'status' then
|
||||
autochop_printStatus()
|
||||
elseif command == 'designate' then
|
||||
autochop_designate()
|
||||
elseif command == 'undesignate' then
|
||||
autochop_undesignate()
|
||||
elseif command == 'target' then
|
||||
setTarget(args[2], args[3])
|
||||
elseif command == 'chop' then
|
||||
do_set_burrow_config('chop', true, args[2])
|
||||
elseif command == 'nochop' then
|
||||
do_set_burrow_config('chop', false, args[2])
|
||||
elseif command == 'clearcut' or command == 'clear' then
|
||||
do_set_burrow_config('clearcut', true, args[2])
|
||||
elseif command == 'noclearcut' or command == 'noclear' then
|
||||
do_set_burrow_config('clearcut', false, args[2])
|
||||
elseif command == 'protect' then
|
||||
do_set_burrow_protect_config(args[2], true, args[3])
|
||||
elseif command == 'unprotect' or command == 'noprotect' then
|
||||
do_set_burrow_protect_config(args[2], false, args[3])
|
||||
else
|
||||
return false
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
-- used by gui/autochop
|
||||
function setBurrowConfig(config)
|
||||
autochop_setBurrowConfig(config.id, config.chop, config.clearcut,
|
||||
config.protect_brewable, config.protect_edible,
|
||||
config.protect_cookable)
|
||||
end
|
||||
|
||||
function getTreeCountsAndBurrowConfigs()
|
||||
local data = {autochop_getTreeCountsAndBurrowConfigs()}
|
||||
local ret = {}
|
||||
ret.summary = table.remove(data, 1)
|
||||
ret.tree_counts = table.remove(data, 1)
|
||||
ret.designated_tree_counts = table.remove(data, 1)
|
||||
ret.burrow_configs = data
|
||||
for _,c in ipairs(ret.burrow_configs) do
|
||||
c.name = df.burrow.find(c.id).name
|
||||
c.chop = c.chop ~= 0
|
||||
c.clearcut = c.clearcut ~= 0
|
||||
c.protect_brewable = c.protect_brewable ~= 0
|
||||
c.protect_edible = c.protect_edible ~= 0
|
||||
c.protect_cookable = c.protect_cookable ~= 0
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
return _ENV
|
Loading…
Reference in New Issue