85 lines
4.0 KiB
Lua
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)
|