-- Bundled by luabundle {"version":"1.6.0"} local __bundle_require, __bundle_loaded, __bundle_register, __bundle_modules = (function(superRequire) local loadingPlaceholder = {[{}] = true} local register local modules = {} local require local loaded = {} register = function(name, body) if not modules[name] then modules[name] = body end end require = function(name) local loadedModule = loaded[name] if loadedModule then if loadedModule == loadingPlaceholder then return nil end else if not modules[name] then if not superRequire then local identifier = type(name) == 'string' and '\"' .. name .. '\"' or tostring(name) error('Tried to require ' .. identifier .. ', but no such module has been registered') else return superRequire(name) end end loaded[name] = loadingPlaceholder loadedModule = modules[name](require, loaded, register, modules) loaded[name] = loadedModule end return loadedModule end return require, loaded, register, modules end)(nil) __bundle_register("__root", function(require, _LOADED, __bundle_register, __bundle_modules) require("util/ConnectionDrawingTool") end) __bundle_register("util/ConnectionDrawingTool", function(require, _LOADED, __bundle_register, __bundle_modules) -- Drawing Tool -- created by: Chr1Z -- original by: Whimsical -- description: draws lines between selected objects information = { version = "1.1", last_updated = "10.10.2022" } -- save "lines" to be able to remove them after loading function onSave() return JSON.encode(lines) end -- load data and add context menu function onload(saved_data) lines = JSON.decode(saved_data) or {} self.addContextMenuItem("More Information", function() printToAll("------------------------------", "White") printToAll("Drawing Tool v" .. information["version"] .. " by Chr1Z", "Orange") printToAll("last updated: " .. information["last_updated"], "White") printToAll("original concept by Whimsical", "White") end) end -- create timer when numpad 0 is pressed function onScriptingButtonDown(index, player_color) if index ~= 10 then return end TimerID = Wait.time(function() draw_from(Player[player_color]) end, 1) end -- called for long press of numpad 0, draws lines from hovered object to selected objects function draw_from(player) local source = player.getHoverObject() if not source then return end for _, item in ipairs(player.getSelectedObjects()) do if item.getGUID() ~= source.getGUID() then if item.getGUID() > source.getGUID() then draw_with_pair(item, source) else draw_with_pair(source, item) end end end process_lines() end -- general drawing of all lines between selected objects function onScriptingButtonUp(index, player_color) if index ~= 10 then return end -- returns true only if there is a timer to cancel. If this is false then we've waited longer than a second. if not Wait.stop(TimerID) then return end local items = Player[player_color].getSelectedObjects() if #items < 2 then broadcastToColor("You must have at least two items selected (currently: " .. #items .. ").", player_color, "Red") return end table.sort(items, function(a, b) return a.getGUID() > b.getGUID() end) for f = 1, #items - 1 do for s = f + 1, #items do draw_with_pair(items[f], items[s]) end end process_lines() end -- adds two objects to table of vector lines function draw_with_pair(first, second) local guid_first = first.getGUID() local guid_second = second.getGUID() if Global.getVectorLines() == nil then lines = {} end if not lines[guid_first] then lines[guid_first] = {} end if lines[guid_first][guid_second] then lines[guid_first][guid_second] = nil else lines[guid_first][guid_second] = { points = { first.getPosition(), second.getPosition() }, color = "White" } end end -- updates the global vector lines based on "lines" function process_lines() local drawing = {} for _, first in pairs(lines) do for _, data in pairs(first) do table.insert(drawing, data) end end Global.setVectorLines(drawing) end end) return __bundle_require("__root")