mirror of
https://github.com/peter-tanner/spidertron-squad-control.git
synced 2024-11-30 19:10:18 +08:00
Add spidertron gui to save/load squad configs.
This commit is contained in:
parent
3840ea92cc
commit
6677ac9b29
|
@ -53,10 +53,10 @@ Date: 2020-11-28
|
||||||
Features:
|
Features:
|
||||||
- NOTE: BETA RELEASE - USE AT YOUR OWN RISK!
|
- NOTE: BETA RELEASE - USE AT YOUR OWN RISK!
|
||||||
- Update mod to Factorio 1.1
|
- Update mod to Factorio 1.1
|
||||||
- Completely refactor code
|
- Completely refactor code to be cleaner
|
||||||
- Attempt at Spidertron Waypoints compatibility
|
- Spidertron Waypoints mod compatibility
|
||||||
- 0NOTICE: THIS VERSION IS A WORK IN PROGRESS - CHANGELOG IS NOT FINAL
|
- Added menu/gui to save and load squad configurations
|
||||||
- 1NOTICE: THIS VERSION IS A WORK IN PROGRESS - CHANGELOG IS NOT FINAL
|
- Spidertron link tool (Link squads to an entity)
|
||||||
- 2NOTICE: THIS VERSION IS A WORK IN PROGRESS - CHANGELOG IS NOT FINAL
|
- 2NOTICE: THIS VERSION IS A WORK IN PROGRESS - CHANGELOG IS NOT FINAL
|
||||||
- 3NOTICE: THIS VERSION IS A WORK IN PROGRESS - CHANGELOG IS NOT FINAL
|
- 3NOTICE: THIS VERSION IS A WORK IN PROGRESS - CHANGELOG IS NOT FINAL
|
||||||
- 4NOTICE: THIS VERSION IS A WORK IN PROGRESS - CHANGELOG IS NOT FINAL
|
- 4NOTICE: THIS VERSION IS A WORK IN PROGRESS - CHANGELOG IS NOT FINAL
|
||||||
|
|
17
control.lua
17
control.lua
|
@ -14,7 +14,7 @@ require("control.debug")
|
||||||
-- REMEMBER TO COMMENT DEBUG OUT IN RELEASE!!
|
-- REMEMBER TO COMMENT DEBUG OUT IN RELEASE!!
|
||||||
-- REMEMBER TO COMMENT DEBUG OUT IN RELEASE!!
|
-- REMEMBER TO COMMENT DEBUG OUT IN RELEASE!!
|
||||||
-- REMEMBER TO COMMENT DEBUG OUT IN RELEASE!!
|
-- REMEMBER TO COMMENT DEBUG OUT IN RELEASE!!
|
||||||
|
require("control.gui")
|
||||||
require("control.init")
|
require("control.init")
|
||||||
require("control.remote")
|
require("control.remote")
|
||||||
require("control.give_remote")
|
require("control.give_remote")
|
||||||
|
@ -41,14 +41,22 @@ script.on_event("squad-spidertron-link-tool", function(event)
|
||||||
GiveLinkTool(event.player_index)
|
GiveLinkTool(event.player_index)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
script.on_event("squad-spidertron-list", function(event)
|
||||||
|
ToggleGuiList(event.player_index)
|
||||||
|
end)
|
||||||
|
|
||||||
script.on_event(defines.events.on_lua_shortcut, function (event)
|
script.on_event(defines.events.on_lua_shortcut, function (event)
|
||||||
local name = event.prototype_name
|
local name = event.prototype_name
|
||||||
if name == "squad-spidertron-follow" then
|
if name == "squad-spidertron-remote" then
|
||||||
|
GiveStack(game.players[event.player_index], {name = "squad-spidertron-remote-sel", count = 1})
|
||||||
|
elseif name == "squad-spidertron-follow" then
|
||||||
local index = event.player_index
|
local index = event.player_index
|
||||||
-- squad_leader_state(index)
|
-- squad_leader_state(index)
|
||||||
SpiderbotFollow(game.players[index])
|
SpiderbotFollow(game.players[index])
|
||||||
elseif name == "squad-spidertron-link-tool" then
|
elseif name == "squad-spidertron-link-tool" then
|
||||||
GiveLinkTool(event.player_index)
|
GiveLinkTool(event.player_index)
|
||||||
|
elseif name == "squad-spidertron-list" then
|
||||||
|
ToggleGuiList(event.player_index)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
@ -56,6 +64,11 @@ script.on_nth_tick(settings.global["spidertron-follow-update-interval"].value, f
|
||||||
UpdateFollow()
|
UpdateFollow()
|
||||||
UpdateFollowEntity()
|
UpdateFollowEntity()
|
||||||
end)
|
end)
|
||||||
|
script.on_nth_tick(60, function(event)
|
||||||
|
for _, player in pairs(game.players) do
|
||||||
|
UpdateGuiList(player)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
|
||||||
-- script.on_event(defines.events.on_spider_command_completed, function (event)
|
-- script.on_event(defines.events.on_spider_command_completed, function (event)
|
||||||
|
|
|
@ -1,4 +1,10 @@
|
||||||
|
--[[ Copyright (c) 2020 npc_strider
|
||||||
|
* For direct use of code or graphics, credit is appreciated. See LICENSE.txt for more information.
|
||||||
|
* This mod may contain modified code sourced from base/core Factorio
|
||||||
|
*
|
||||||
|
* control/2dvec.lua
|
||||||
|
* 2d vectors stuff. Some are specific to this mod
|
||||||
|
--]]
|
||||||
|
|
||||||
function IJMean(vectors)
|
function IJMean(vectors)
|
||||||
local sumx = 0
|
local sumx = 0
|
||||||
|
|
|
@ -1,9 +1,16 @@
|
||||||
|
--[[ Copyright (c) 2020 npc_strider
|
||||||
|
* For direct use of code or graphics, credit is appreciated. See LICENSE.txt for more information.
|
||||||
|
* This mod may contain modified code sourced from base/core Factorio
|
||||||
|
*
|
||||||
|
* control/debug.lua
|
||||||
|
* REMEMBER TO DISABLE THIS MODULE IN RELEASE!!!
|
||||||
|
--]]
|
||||||
|
|
||||||
commands.add_command(
|
-- commands.add_command(
|
||||||
"dvars",
|
-- "dvars",
|
||||||
"debug: dump spider control vars",
|
-- "debug: dump spider control vars",
|
||||||
function (cmd)
|
-- function (cmd)
|
||||||
-- game.print(serpent.block(global.spidercontrol_player_s[cmd.player_index]))
|
-- -- game.print(serpent.block(global.spidercontrol_player_s[cmd.player_index]))
|
||||||
game.print(serpent.block(global.spidercontrol_linked_s))
|
-- game.print(serpent.block(global.spidercontrol_linked_s))
|
||||||
end
|
-- end
|
||||||
)
|
-- )
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
--[[ Copyright (c) 2020 npc_strider
|
||||||
|
* For direct use of code or graphics, credit is appreciated. See LICENSE.txt for more information.
|
||||||
|
* This mod may contain modified code sourced from base/core Factorio
|
||||||
|
*
|
||||||
|
* control/entity_follow.lua
|
||||||
|
* Runs periodically to designate commands for each linked squad to move to the target entity's position.
|
||||||
|
--]]
|
||||||
|
|
||||||
require("control.2dvec")
|
require("control.2dvec")
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
--[[ Copyright (c) 2020 npc_strider
|
||||||
|
* For direct use of code or graphics, credit is appreciated. See LICENSE.txt for more information.
|
||||||
|
* This mod may contain modified code sourced from base/core Factorio
|
||||||
|
*
|
||||||
|
* control/functions.lua
|
||||||
|
* General/commonly used/important functions.
|
||||||
|
--]]
|
||||||
|
|
||||||
function SpidertronWaypointsCompatibility()
|
function SpidertronWaypointsCompatibility()
|
||||||
-- Compatability for Spidertron Waypoints
|
-- Compatability for Spidertron Waypoints
|
||||||
|
@ -42,6 +49,7 @@ end
|
||||||
function Goto(spiders, center)
|
function Goto(spiders, center)
|
||||||
local invalid = {}
|
local invalid = {}
|
||||||
for i = 1, #spiders do
|
for i = 1, #spiders do
|
||||||
|
if spiders[i] then
|
||||||
local spider = spiders[i].spider
|
local spider = spiders[i].spider
|
||||||
local d = spiders[i].delta
|
local d = spiders[i].delta
|
||||||
if spider.valid then
|
if spider.valid then
|
||||||
|
@ -50,6 +58,7 @@ function Goto(spiders, center)
|
||||||
invalid[#invalid+1] = i
|
invalid[#invalid+1] = i
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
return Remove(spiders, invalid) -- We return an updated spider list (Remove any invalid spiders)
|
return Remove(spiders, invalid) -- We return an updated spider list (Remove any invalid spiders)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -111,6 +120,7 @@ local function GotoPlayerSW(index, position)
|
||||||
end
|
end
|
||||||
resetSprites(patrol)
|
resetSprites(patrol)
|
||||||
global.spidercontrol_player_s[index].active = {}
|
global.spidercontrol_player_s[index].active = {}
|
||||||
|
UpdateGuiList(player)
|
||||||
GiveStack(player, {name="squad-spidertron-remote-sel",count=1})
|
GiveStack(player, {name="squad-spidertron-remote-sel",count=1})
|
||||||
player.set_shortcut_toggled("spidertron-remote-patrol", false)
|
player.set_shortcut_toggled("spidertron-remote-patrol", false)
|
||||||
patrol = nil
|
patrol = nil
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
--[[ Copyright (c) 2020 npc_strider
|
||||||
|
* For direct use of code or graphics, credit is appreciated. See LICENSE.txt for more information.
|
||||||
|
* This mod may contain modified code sourced from base/core Factorio
|
||||||
|
*
|
||||||
|
* control/give_remote.lua
|
||||||
|
* Gives the various remotes (link tool, unlink tool, squad remote, selection tool) to the player.
|
||||||
|
--]]
|
||||||
|
|
||||||
require("control.functions")
|
require("control.functions")
|
||||||
|
|
||||||
function GiveLinkTool(index)
|
function GiveLinkTool(index)
|
||||||
|
|
222
control/gui.lua
Normal file
222
control/gui.lua
Normal file
|
@ -0,0 +1,222 @@
|
||||||
|
--[[ Copyright (c) 2020 npc_strider
|
||||||
|
* For direct use of code or graphics, credit is appreciated. See LICENSE.txt for more information.
|
||||||
|
* This mod may contain modified code sourced from base/core Factorio
|
||||||
|
*
|
||||||
|
* control/gui.lua
|
||||||
|
* I fucking hate gui code!
|
||||||
|
--]]
|
||||||
|
|
||||||
|
local mod_gui = require("mod-gui")
|
||||||
|
local function get_frame_flow_(player, direction)
|
||||||
|
local gui = player.gui[direction] -- Left in mod-gui implementation (hardcoded.)
|
||||||
|
local frame_flow = gui.mod_gui_frame_flow
|
||||||
|
if not frame_flow then
|
||||||
|
frame_flow = gui.add{type = "flow", name = "mod_gui_frame_flow", direction = "horizontal", style = "mod_gui_spacing_horizontal_flow"}
|
||||||
|
end
|
||||||
|
return frame_flow
|
||||||
|
end -- Adopted from 'mod-gui'
|
||||||
|
|
||||||
|
|
||||||
|
local function getOrigin(s)
|
||||||
|
for i = 1, #s do
|
||||||
|
local spider = s[i].spider
|
||||||
|
if (spider.valid) then
|
||||||
|
return util.positiontostr(IJSub(spider.position, s[i].delta))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return "_invalid_" -- This should never occur
|
||||||
|
end
|
||||||
|
|
||||||
|
local function destroyRenameGui(frame_flow)
|
||||||
|
if (frame_flow["squad-spidertron-list-frame"]) then
|
||||||
|
return frame_flow["squad-spidertron-list-frame"].destroy()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function renameGui(num, frame_flow, index)
|
||||||
|
local frame = frame_flow.add({
|
||||||
|
type = "frame",
|
||||||
|
name = "squad-spidertron-list-frame",
|
||||||
|
direction = "vertical",
|
||||||
|
caption = {"gui-map-editor-force-data-editor.edit-modifier-category", {"gui-mod-info.name"}},
|
||||||
|
style = mod_gui.frame_style
|
||||||
|
})
|
||||||
|
|
||||||
|
local inner = frame.add{type = "frame", name = "inner", style = "inside_deep_frame"}
|
||||||
|
inner.add({type = "textfield", name = "textfield", text = global.spidercontrol_player_s[index].inactive[num].name})
|
||||||
|
inner.add({type = "sprite-button", name = "rename-accept-"..num, sprite = "utility/check_mark_white", style = "tool_button_green"})
|
||||||
|
end
|
||||||
|
|
||||||
|
local function guiTable(parent, player)
|
||||||
|
local table = parent.add({
|
||||||
|
type = "table",
|
||||||
|
name = "table",
|
||||||
|
column_count = 7,
|
||||||
|
style = "removed_content_table"
|
||||||
|
})
|
||||||
|
for i = 2, 7 do
|
||||||
|
table.style.column_alignments[i] = "center"
|
||||||
|
end
|
||||||
|
|
||||||
|
local t = global.spidercontrol_player_s[player.index].active
|
||||||
|
table.add({type = "label", caption = {"gui-mod-info.name"}})
|
||||||
|
table.add({type = "label", caption = {"gui-map-editor-script-editor.current-positions"}})
|
||||||
|
table.add({type = "label", caption = "ID"})
|
||||||
|
table.add({type = "label", caption = "#"})
|
||||||
|
table.add({type = "label", caption = {"gui.save"}})
|
||||||
|
table.add({type = "empty-widget"})
|
||||||
|
table.add({type = "label", caption = {"gui-mod-info.delete"}})
|
||||||
|
|
||||||
|
table.add({type = "label", caption = "ACTIVE"})
|
||||||
|
table.add({type = "label", caption = getOrigin(t)})
|
||||||
|
table.add({type = "label", caption = "ACTIVE"})
|
||||||
|
table.add({type = "label", caption = #t})
|
||||||
|
table.add({type = "sprite-button", name = "save-active-to-list", sprite = "utility/reassign", style = "tool_button_green"})
|
||||||
|
table.add({type = "empty-widget"})
|
||||||
|
table.add({type = "sprite-button", name = "delete-active", sprite = "utility/trash", style = "tool_button_red"})
|
||||||
|
|
||||||
|
-- local frame = game.player.gui.top.add({type = "frame", style = "outer_frame"})
|
||||||
|
-- local frame = frame.add({type = "frame", caption = "Change active squad", style = "inner_frame_in_outer_frame"})
|
||||||
|
-- local table = frame.add({type="table", column_count = 3, style = "removed_content_table"})
|
||||||
|
|
||||||
|
-- Headers
|
||||||
|
table.add({type = "label", caption = {"gui-mod-info.name"}})
|
||||||
|
table.add({type = "label", caption = "Saved Position"})
|
||||||
|
table.add({type = "label", caption = "ID"})
|
||||||
|
table.add({type = "label", caption = "#"})
|
||||||
|
table.add({type = "label", caption = {"gui.load"}})
|
||||||
|
table.add({type = "label", caption = {"gui-map-editor-force-data-editor.edit-modifier-category", {"gui-mod-info.name"}}})
|
||||||
|
table.add({type = "label", caption = {"gui-mod-info.delete"}})
|
||||||
|
|
||||||
|
local t = global.spidercontrol_player_s[player.index].inactive
|
||||||
|
for i = 1, #t do
|
||||||
|
table.add({type = "label", caption = t[i].name})
|
||||||
|
table.add({type = "label", caption = t[i].position})
|
||||||
|
table.add({type = "label", caption = i})
|
||||||
|
table.add({type = "label", caption = #t[i].s})
|
||||||
|
table.add({type = "sprite-button", name = "make-active-"..i, sprite = "utility/upgrade_blueprint", style = "tool_button_green"})
|
||||||
|
table.add({type = "sprite-button", name = "rename-inactive-"..i, sprite = "utility/rename_icon_small_white", style = "tool_button_blue"})
|
||||||
|
table.add({type = "sprite-button", name = "delete-inactive-"..i, sprite = "utility/trash", style = "tool_button_red"})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function gui(player)
|
||||||
|
local frame_flow = mod_gui.get_frame_flow(player)
|
||||||
|
frame_flow.style.left_padding = 4
|
||||||
|
frame_flow.style.top_padding = 4
|
||||||
|
|
||||||
|
local frame = frame_flow.add({
|
||||||
|
type = "frame",
|
||||||
|
name = "squad-spidertron-list-frame",
|
||||||
|
direction = "vertical",
|
||||||
|
caption = {"", {"gui.save"}, " ", {"and"}, " ", {"gui.load"}},
|
||||||
|
style = mod_gui.frame_style
|
||||||
|
})
|
||||||
|
|
||||||
|
local inner = frame.add{type = "frame", name = "inner", style = "inside_deep_frame"}
|
||||||
|
local scroll = inner.add{type = "scroll-pane", name = "scroll", direction = "vertical"}
|
||||||
|
guiTable(scroll, player)
|
||||||
|
end
|
||||||
|
|
||||||
|
function UpdateGuiList(player)
|
||||||
|
local gui_frame = mod_gui.get_frame_flow(player)
|
||||||
|
if (gui_frame["squad-spidertron-list-frame"]) then
|
||||||
|
local parent = gui_frame["squad-spidertron-list-frame"].inner.scroll
|
||||||
|
parent.table.destroy()
|
||||||
|
guiTable(parent, player)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function ToggleGuiList(index)
|
||||||
|
local player = game.players[index]
|
||||||
|
local gui_frame = mod_gui.get_frame_flow(player)
|
||||||
|
if (gui_frame["squad-spidertron-list-frame"]) then
|
||||||
|
gui_frame["squad-spidertron-list-frame"].destroy()
|
||||||
|
else
|
||||||
|
gui(player)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
commands.add_command("ssc_gui", "Create gui", function(cmd)
|
||||||
|
gui(game.players[cmd.player_index])
|
||||||
|
end)
|
||||||
|
|
||||||
|
script.on_event(defines.events.on_gui_click, function(event)
|
||||||
|
local gui = event.element
|
||||||
|
local index = event.player_index
|
||||||
|
local player = game.players[index]
|
||||||
|
local limit = 20
|
||||||
|
if not (player and player.valid and gui and gui.valid) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local name = gui.name
|
||||||
|
if (name == "save-active-to-list") then
|
||||||
|
local s = global.spidercontrol_player_s[index]
|
||||||
|
if (#s.active > 0) then
|
||||||
|
if (#s.inactive < limit) then
|
||||||
|
global.spidercontrol_player_s[index].inactive[#s.inactive+1] = {
|
||||||
|
name = game.tick,
|
||||||
|
position = getOrigin(s.active),
|
||||||
|
s = table.deepcopy(s.active)
|
||||||
|
}
|
||||||
|
UpdateGuiList(player)
|
||||||
|
destroyRenameGui(get_frame_flow_(player, "center"))
|
||||||
|
else
|
||||||
|
player.print("You have too many saved templates! Remove some before adding more. Maximum amount is "..limit)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elseif (name == "delete-active") then
|
||||||
|
global.spidercontrol_player_s[index].active = {}
|
||||||
|
local cursor_stack = player.cursor_stack
|
||||||
|
if (cursor_stack and cursor_stack.valid_for_read and cursor_stack.name == "squad-spidertron-remote") then
|
||||||
|
player.clear_cursor()
|
||||||
|
end
|
||||||
|
UpdateGuiList(player)
|
||||||
|
else
|
||||||
|
local num = tonumber(string.match(name, '[0-9]+'))
|
||||||
|
if num == nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if name == "make-active-"..num then -- string.match(name, 'make[-]active[-][0-9]+') then
|
||||||
|
destroyRenameGui(get_frame_flow_(player, "center"))
|
||||||
|
local s = global.spidercontrol_player_s[index].inactive[num].s
|
||||||
|
local spiders = {}
|
||||||
|
for i = 1, #s do
|
||||||
|
spiders[#spiders+1] = s[i].spider
|
||||||
|
end
|
||||||
|
SpiderDeSelect(spiders, player.force.index)
|
||||||
|
global.spidercontrol_player_s[index].active = s
|
||||||
|
global.spidercontrol_player_s[index].inactive[num].position = getOrigin(global.spidercontrol_player_s[index].inactive[num].s)
|
||||||
|
UpdateGuiList(player)
|
||||||
|
elseif name == "delete-inactive-"..num then -- string.match(name, 'delete[-]inactive[-][0-9]+') then
|
||||||
|
destroyRenameGui(get_frame_flow_(player, "center"))
|
||||||
|
global.spidercontrol_player_s[index].inactive = Remove(global.spidercontrol_player_s[index].inactive, {num})
|
||||||
|
UpdateGuiList(player)
|
||||||
|
elseif name == "rename-inactive-"..num then -- string.match(name, 'rename[-]inactive[-][0-9]+') then
|
||||||
|
local frame_flow = get_frame_flow_(player, "center")
|
||||||
|
destroyRenameGui(frame_flow)
|
||||||
|
UpdateGuiList(player)
|
||||||
|
renameGui(num, frame_flow, index)
|
||||||
|
elseif name == "rename-accept-"..num then
|
||||||
|
local frame_flow = get_frame_flow_(player, "center")
|
||||||
|
if (frame_flow["squad-spidertron-list-frame"]) then
|
||||||
|
local str = frame_flow["squad-spidertron-list-frame"].inner.textfield.text
|
||||||
|
if global.spidercontrol_player_s[index].inactive[num] then
|
||||||
|
global.spidercontrol_player_s[index].inactive[num].name = str
|
||||||
|
UpdateGuiList(player)
|
||||||
|
end
|
||||||
|
frame_flow["squad-spidertron-list-frame"].destroy()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
script.on_event(defines.events.on_gui_text_changed, function(event)
|
||||||
|
local elem = event.element
|
||||||
|
if string.match(elem.name, "inactive[-]name[-][0-9]+") then
|
||||||
|
local num = tonumber(string.match(elem.name, '[0-9]+'))
|
||||||
|
global.spidercontrol_player_s[event.player_index].inactive[num].name = event.text
|
||||||
|
end
|
||||||
|
end)
|
|
@ -1,17 +1,35 @@
|
||||||
|
--[[ Copyright (c) 2020 npc_strider
|
||||||
|
* For direct use of code or graphics, credit is appreciated. See LICENSE.txt for more information.
|
||||||
|
* This mod may contain modified code sourced from base/core Factorio
|
||||||
|
*
|
||||||
|
* control/init.lua
|
||||||
|
* Runs when installed/config changes. Incorporate intermod compatibility here.
|
||||||
|
--]]
|
||||||
|
|
||||||
local function initialize()
|
function Initialize()
|
||||||
if global.spidercontrol_spidersquad == nil then
|
|
||||||
game.print("Create tables for spidertron control mod")
|
game.print("Create tables for spidertron control mod")
|
||||||
|
if global.spidercontrol_linked_s == nil then
|
||||||
global.spidercontrol_linked_s = {}
|
global.spidercontrol_linked_s = {}
|
||||||
|
end
|
||||||
|
if global.spidercontrol_player_s == nil then
|
||||||
global.spidercontrol_player_s = {}
|
global.spidercontrol_player_s = {}
|
||||||
global.spidercontrol_spidertronwaypoints_patrol = {}
|
|
||||||
for _, player in pairs(game.players) do
|
for _, player in pairs(game.players) do
|
||||||
global.spidercontrol_player_s[player.index] = {active = {}, inactive = {}} -- Some future-proofing here
|
global.spidercontrol_player_s[player.index] = {active = {}, inactive = {}} -- Some future-proofing here
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if global.spidercontrol_spidertronwaypoints_patrol == nil then
|
||||||
|
global.spidercontrol_spidertronwaypoints_patrol = {}
|
||||||
|
end
|
||||||
SpidertronWaypointsCompatibility()
|
SpidertronWaypointsCompatibility()
|
||||||
end
|
end
|
||||||
|
|
||||||
script.on_init(initialize)
|
script.on_init(Initialize)
|
||||||
script.on_configuration_changed(initialize)
|
script.on_configuration_changed(Initialize)
|
||||||
-- commands.add_command("spiderbot_initialize_variables", "debug: ensure that all global tables are not nil (should not happen in a normal game)", initialize)
|
-- commands.add_command("spiderbot_Initialize_variables", "debug: ensure that all global tables are not nil (should not happen in a normal game)", Initialize)
|
||||||
|
|
||||||
|
script.on_event(defines.events.on_player_created, function (event)
|
||||||
|
if global.spidercontrol_player_s == nil then
|
||||||
|
Initialize()
|
||||||
|
end
|
||||||
|
global.spidercontrol_player_s[event.player_index] = {active = {}, inactive = {}}
|
||||||
|
end)
|
|
@ -1,3 +1,10 @@
|
||||||
|
--[[ Copyright (c) 2020 npc_strider
|
||||||
|
* For direct use of code or graphics, credit is appreciated. See LICENSE.txt for more information.
|
||||||
|
* This mod may contain modified code sourced from base/core Factorio
|
||||||
|
*
|
||||||
|
* control/player_follow.lua
|
||||||
|
* Stuff here runs periodically to move the player's active squad to their position in follow mode. Also incorporate some comaptibility with spidertron waypoints.
|
||||||
|
--]]
|
||||||
|
|
||||||
local function spidertronWaypointsOverride(s)
|
local function spidertronWaypointsOverride(s)
|
||||||
if SPIDERTRON_WAYPOINTS then
|
if SPIDERTRON_WAYPOINTS then
|
||||||
|
|
|
@ -1,6 +1,14 @@
|
||||||
|
--[[ Copyright (c) 2020 npc_strider
|
||||||
|
* For direct use of code or graphics, credit is appreciated. See LICENSE.txt for more information.
|
||||||
|
* This mod may contain modified code sourced from base/core Factorio
|
||||||
|
*
|
||||||
|
* control/player_man_designate.lua
|
||||||
|
* Stuff happens here when a player calls a squad to a position.
|
||||||
|
--]]
|
||||||
|
|
||||||
require("control.functions")
|
require("control.functions")
|
||||||
|
|
||||||
local function moveTo(player, index, position)
|
local function moveTo(index, position)
|
||||||
game.players[index].set_shortcut_toggled("squad-spidertron-follow", false)
|
game.players[index].set_shortcut_toggled("squad-spidertron-follow", false)
|
||||||
GotoPlayer(index, position)
|
GotoPlayer(index, position)
|
||||||
end
|
end
|
||||||
|
@ -64,6 +72,7 @@ local function link(index, vehicle)
|
||||||
global.spidercontrol_player_s[index].active = {} -- We're taking away player control of this squad!
|
global.spidercontrol_player_s[index].active = {} -- We're taking away player control of this squad!
|
||||||
-- Probably should print the squad ID, the target entity id and other information
|
-- Probably should print the squad ID, the target entity id and other information
|
||||||
GiveStack(player, {name="squad-spidertron-unlink-tool",count=1})
|
GiveStack(player, {name="squad-spidertron-unlink-tool",count=1})
|
||||||
|
UpdateGuiList(player)
|
||||||
end
|
end
|
||||||
vehicle.autopilot_destination = vehicle.position -- Just to look better
|
vehicle.autopilot_destination = vehicle.position -- Just to look better
|
||||||
end
|
end
|
||||||
|
@ -77,7 +86,7 @@ script.on_event(defines.events.on_player_used_spider_remote, function(event)
|
||||||
if cursor_stack.valid_for_read and event.success then
|
if cursor_stack.valid_for_read and event.success then
|
||||||
local cname = cursor_stack.name
|
local cname = cursor_stack.name
|
||||||
if cname == "squad-spidertron-remote" then
|
if cname == "squad-spidertron-remote" then
|
||||||
moveTo(player, index, event.position)
|
moveTo(index, event.position)
|
||||||
elseif cname == "spidertron-remote" then -- WARNING: We're only overriding for the player's spidertron if it's the vanilla spidertron remote. Does not cover modded remotes!
|
elseif cname == "spidertron-remote" then -- WARNING: We're only overriding for the player's spidertron if it's the vanilla spidertron remote. Does not cover modded remotes!
|
||||||
local vehicle = event.vehicle
|
local vehicle = event.vehicle
|
||||||
local position = event.position
|
local position = event.position
|
||||||
|
|
|
@ -1,3 +1,10 @@
|
||||||
|
--[[ Copyright (c) 2020 npc_strider
|
||||||
|
* For direct use of code or graphics, credit is appreciated. See LICENSE.txt for more information.
|
||||||
|
* This mod may contain modified code sourced from base/core Factorio
|
||||||
|
*
|
||||||
|
* control/player_select.lua
|
||||||
|
* Handles selection tools for link and squad select.
|
||||||
|
--]]
|
||||||
|
|
||||||
require("control.functions")
|
require("control.functions")
|
||||||
require("control.2dvec")
|
require("control.2dvec")
|
||||||
|
@ -40,7 +47,7 @@ local function unitNumbers(entities)
|
||||||
return ids
|
return ids
|
||||||
end
|
end
|
||||||
|
|
||||||
local function spiderDeSelect(spiders, force)
|
function SpiderDeSelect(spiders, force)
|
||||||
local ids = unitNumbers(spiders)
|
local ids = unitNumbers(spiders)
|
||||||
local t = global.spidercontrol_linked_s
|
local t = global.spidercontrol_linked_s
|
||||||
local rem_t = {} --This part is really bad - I think it's O(N^3) worst case?
|
local rem_t = {} --This part is really bad - I think it's O(N^3) worst case?
|
||||||
|
@ -97,18 +104,17 @@ end
|
||||||
local function spiderSelect(spiders, index)
|
local function spiderSelect(spiders, index)
|
||||||
|
|
||||||
local player = game.players[index]
|
local player = game.players[index]
|
||||||
local force = player.force.index
|
|
||||||
local mean = IJMeanEntity(spiders)
|
local mean = IJMeanEntity(spiders)
|
||||||
global.spidercontrol_player_s[index].active = {}
|
global.spidercontrol_player_s[index].active = {}
|
||||||
|
|
||||||
spiderDeSelect(spiders, force) -- TO prevent double-linking (linking the same spider to 2 or more entities)
|
SpiderDeSelect(spiders, player.force.index) -- TO prevent double-linking (linking the same spider to 2 or more entities)
|
||||||
if SPIDERTRON_WAYPOINTS then
|
if SPIDERTRON_WAYPOINTS then
|
||||||
for i = 1, #spiders do
|
for i = 1, #spiders do
|
||||||
remote.call("SpidertronWaypoints", "clear_waypoints", spiders[i].unit_number)
|
remote.call("SpidertronWaypoints", "clear_waypoints", spiders[i].unit_number)
|
||||||
spiders[i].autopilot_destination = nil
|
spiders[i].autopilot_destination = nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- spiderDeSelectPlayers(spiders, force) -- Y'know what, not sure if i can be arsed to deselect player squads...
|
-- spiderDeSelectPlayers(spiders, player.force.index) -- Y'know what, not sure if i can be arsed to deselect player squads...
|
||||||
|
|
||||||
for i=1, #spiders do
|
for i=1, #spiders do
|
||||||
table.insert(global.spidercontrol_player_s[index].active, {
|
table.insert(global.spidercontrol_player_s[index].active, {
|
||||||
|
@ -130,8 +136,10 @@ local function areaSelection(event)
|
||||||
if #spiders > 0 then
|
if #spiders > 0 then
|
||||||
if item == "squad-spidertron-remote-sel" then
|
if item == "squad-spidertron-remote-sel" then
|
||||||
spiderSelect(spiders, index)
|
spiderSelect(spiders, index)
|
||||||
|
UpdateGuiList(game.players[index])
|
||||||
elseif item == "squad-spidertron-unlink-tool" then
|
elseif item == "squad-spidertron-unlink-tool" then
|
||||||
spiderDeSelect(spiders, spiders[1].force.index)
|
SpiderDeSelect(spiders, spiders[1].force.index)
|
||||||
|
UpdateGuiList(game.players[index])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,2 +1,9 @@
|
||||||
-- Just need to claim this interface name.
|
--[[ Copyright (c) 2020 npc_strider
|
||||||
|
* For direct use of code or graphics, credit is appreciated. See LICENSE.txt for more information.
|
||||||
|
* This mod may contain modified code sourced from base/core Factorio
|
||||||
|
*
|
||||||
|
* control/remote.lua
|
||||||
|
* Just need to claim this interface name.
|
||||||
|
--]]
|
||||||
|
|
||||||
remote.add_interface("SpiderControl", {})
|
remote.add_interface("SpiderControl", {})
|
|
@ -2,7 +2,7 @@
|
||||||
"name": "Spider_Control",
|
"name": "Spider_Control",
|
||||||
"version": "0.5.0",
|
"version": "0.5.0",
|
||||||
"factorio_version": "1.1",
|
"factorio_version": "1.1",
|
||||||
"title": "Spidertron squad control",
|
"title": "Spidertron squad control [BETA RELEASE]",
|
||||||
"author": "npc_strider(morley376)",
|
"author": "npc_strider(morley376)",
|
||||||
"contact": "",
|
"contact": "",
|
||||||
"homepage": "http://steamcommunity.com/id/morley376",
|
"homepage": "http://steamcommunity.com/id/morley376",
|
||||||
|
|
18
migrations/Spider_Control_0.5.0.lua
Normal file
18
migrations/Spider_Control_0.5.0.lua
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
|
||||||
|
Initialize()
|
||||||
|
|
||||||
|
game.print("WARNING: Only player-links are being migrated - Spidertron entity-links are NOT being migrated! (As they were only implemented in the experimental 0.4.0 mod release)")
|
||||||
|
|
||||||
|
local player_squads = global.spidercontrol_spidersquad
|
||||||
|
if player_squads then
|
||||||
|
for i, t in pairs(player_squads) do
|
||||||
|
local newsquad = {}
|
||||||
|
for j, s in pairs(t.spiders) do
|
||||||
|
newsquad[#newsquad+1] = {
|
||||||
|
spider = s.spider_entity,
|
||||||
|
delta = {x=s.d[1],y=s.d[2]}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
global.spidercontrol_player_s[i].active = newsquad
|
||||||
|
end
|
||||||
|
end
|
|
@ -71,11 +71,10 @@ local shortcut_remote = {
|
||||||
type = "shortcut",
|
type = "shortcut",
|
||||||
name = "squad-spidertron-remote",
|
name = "squad-spidertron-remote",
|
||||||
order = "a[squad-spidertron-remote]",
|
order = "a[squad-spidertron-remote]",
|
||||||
action = "spawn-item",
|
action = "lua",
|
||||||
localised_name = "Spidertron squad remote",
|
localised_name = "Spidertron squad remote",
|
||||||
associated_control_input = "squad-spidertron-remote",
|
associated_control_input = "squad-spidertron-remote",
|
||||||
technology_to_unlock = "spidertron",
|
technology_to_unlock = "spidertron",
|
||||||
item_to_spawn = "squad-spidertron-remote-sel",
|
|
||||||
style = "red",
|
style = "red",
|
||||||
icon =
|
icon =
|
||||||
{
|
{
|
||||||
|
@ -118,6 +117,13 @@ shortcut_link.localised_name = "Link spidertrons to entity"
|
||||||
shortcut_link.associated_control_input = "squad-spidertron-link-tool"
|
shortcut_link.associated_control_input = "squad-spidertron-link-tool"
|
||||||
shortcut_link.style = "green"
|
shortcut_link.style = "green"
|
||||||
|
|
||||||
|
local shortcut_list = util.table.deepcopy(shortcut_remote)
|
||||||
|
shortcut_list.name = "squad-spidertron-list"
|
||||||
|
shortcut_list.action = "lua"
|
||||||
|
shortcut_list.localised_name = "Manage saved spidertrons"
|
||||||
|
shortcut_list.associated_control_input = "squad-spidertron-list"
|
||||||
|
shortcut_list.style = nil
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
-- CUSTOM INPUT
|
-- CUSTOM INPUT
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
@ -145,6 +151,11 @@ input_link.name = "squad-spidertron-link-tool"
|
||||||
input_link.localised_name = "Link spidertron squad to entity"
|
input_link.localised_name = "Link spidertron squad to entity"
|
||||||
input_link.key_sequence = "ALT + Z"
|
input_link.key_sequence = "ALT + Z"
|
||||||
|
|
||||||
|
local input_list = util.table.deepcopy(input_remote)
|
||||||
|
input_list.name = "squad-spidertron-list"
|
||||||
|
input_list.localised_name = "Manage saved spidertrons"
|
||||||
|
input_list.key_sequence = "ALT + V"
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
-- EXTEND
|
-- EXTEND
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
@ -154,6 +165,7 @@ data:extend(
|
||||||
shortcut_remote,
|
shortcut_remote,
|
||||||
shortcut_follow,
|
shortcut_follow,
|
||||||
shortcut_link,
|
shortcut_link,
|
||||||
|
shortcut_list,
|
||||||
|
|
||||||
item_remote_sel,
|
item_remote_sel,
|
||||||
item_unlink_sel,
|
item_unlink_sel,
|
||||||
|
@ -196,5 +208,6 @@ data:extend(
|
||||||
input_remote,
|
input_remote,
|
||||||
input_follow,
|
input_follow,
|
||||||
input_switch_modes,
|
input_switch_modes,
|
||||||
input_link
|
input_link,
|
||||||
|
input_list
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue
Block a user