85 lines
4.0 KiB
Lua

local Event = require('__stdlib__/stdlib/event/event')
local table = require('__stdlib__/stdlib/utils/table')
local function summon_tree_deconstruction_planner(event)
local player = game.players[event.player_index]
local stack = player.cursor_stack
if player.clear_cursor() and stack.set_stack('deconstruction-planner') then
stack.trees_and_rocks_only = true
end
end
Event.register('picker-summon-trees-deconstruction-planner', summon_tree_deconstruction_planner)
local function toggle_filter_mode(event)
local player = game.players[event.player_index]
local stack = player.cursor_stack
local mode = event.input_name == 'picker-toggle-filter-mode' and 'entity_filter_mode' or 'tile_filter_mode'
if stack.valid_for_read and stack.name == 'deconstruction-planner' then
local whitelist = defines.deconstruction_item[mode].whitelist
local blacklist = defines.deconstruction_item[mode].blacklist
if stack[mode] == whitelist then
stack[mode] = blacklist
player.print({'deconstructor.' .. mode .. '-blacklist'})
else
stack[mode] = whitelist
player.print({'deconstructor.' .. mode .. '-whitelist'})
end
end
end
Event.register({'picker-toggle-filter-mode', 'picker-toggle-tile-filter-mode'}, toggle_filter_mode)
local tile_mode = table.invert(defines.deconstruction_item.tile_selection_mode)
local function cycle_tile_mode(event)
local player = game.players[event.player_index]
local stack = player.cursor_stack
if stack.valid_for_read and stack.name == 'deconstruction-planner' then
local next_mode = (stack.tile_selection_mode + 1 < table.size(tile_mode)) and (stack.tile_selection_mode + 1) or 0
stack.tile_selection_mode = next_mode
player.print({'deconstructor.tile-selection-mode', {'deconstructor.' .. tile_mode[next_mode]}})
end
end
Event.register('picker-cycle-tile-selection-mode', cycle_tile_mode)
--Event.register('picker-pick-deconstruction-filter', pick_deconstruction_filter)
-- On keypress With no decon plan mark item for deconstruction,
-- with an item add the item to the white/black list.
local function mark_for_deconstruction(event)
local player = game.get_player(event.player_index)
local selected = player.selected
if selected then
local stack = player.cursor_stack
if stack.is_deconstruction_item then
if not (selected.type == 'resource' or selected.has_flag('not-deconstructable')) then
local name, count = selected.name, stack.entity_filter_count
local first_empty = 0
local p = selected.position
for i = 1, count do
local filter = stack.get_entity_filter(i)
if name == filter then
stack.set_entity_filter(i, nil)
player.create_local_flying_text {text = {'deconstructor.removed', {'entity-name.' .. selected.name}}, position = p}
return
elseif not filter and first_empty == 0 then
first_empty = i
end
end
if first_empty > 0 and stack.set_entity_filter(first_empty, name) then
player.create_local_flying_text {text = {'deconstructor.added', {'entity-name.' .. selected.name}}, position = p}
else
player.create_local_flying_text {text = {'deconstructor.no-empty-slots'}, position = p}
end
end
elseif not stack.valid_for_read then
local force = player.force
if force == selected.force then
if selected.to_be_deconstructed() then
selected.cancel_deconstruction(force, player)
else
selected.order_deconstruction(force, player)
end
end
end
end
end
Event.register('picker-mark-for-deconstruction', mark_for_deconstruction)