mirror of
https://github.com/Refactorio/RedMew.git
synced 2025-07-17 01:32:31 +02:00
added blueprint helper
This commit is contained in:
213
blueprint_helper.lua
Normal file
213
blueprint_helper.lua
Normal file
@ -0,0 +1,213 @@
|
|||||||
|
-- Soft mod version of Blueprint Flipper and Turner https://mods.factorio.com/mods/Marthen/Blueprint_Flip_Turn
|
||||||
|
|
||||||
|
local Event = require 'utils.event'
|
||||||
|
|
||||||
|
local function getBlueprintCursorStack(player)
|
||||||
|
local cursor = player.cursor_stack
|
||||||
|
if
|
||||||
|
cursor.valid_for_read and (cursor.name == 'blueprint' or cursor.name == 'blueprint-book') and
|
||||||
|
cursor.is_blueprint_setup()
|
||||||
|
then --check if is a blueprint, work in book as well
|
||||||
|
return cursor
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local function flip_v(player)
|
||||||
|
local cursor = getBlueprintCursorStack(player)
|
||||||
|
if cursor then
|
||||||
|
if cursor.get_blueprint_entities() ~= nil then
|
||||||
|
local ents = cursor.get_blueprint_entities()
|
||||||
|
for i = 1, #ents do
|
||||||
|
local dir = ents[i].direction or 0
|
||||||
|
if ents[i].name == 'curved-rail' then
|
||||||
|
ents[i].direction = (13 - dir) % 8
|
||||||
|
elseif ents[i].name == 'storage-tank' then
|
||||||
|
if ents[i].direction == 2 or ents[i].direction == 6 then
|
||||||
|
ents[i].direction = 4
|
||||||
|
else
|
||||||
|
ents[i].direction = 2
|
||||||
|
end
|
||||||
|
elseif ents[i].name == 'rail-signal' or ents[i].name == 'rail-chain-signal' then
|
||||||
|
if dir == 1 then
|
||||||
|
ents[i].direction = 7
|
||||||
|
elseif dir == 2 then
|
||||||
|
ents[i].direction = 6
|
||||||
|
elseif dir == 3 then
|
||||||
|
ents[i].direction = 5
|
||||||
|
elseif dir == 5 then
|
||||||
|
ents[i].direction = 3
|
||||||
|
elseif dir == 6 then
|
||||||
|
ents[i].direction = 2
|
||||||
|
elseif dir == 7 then
|
||||||
|
ents[i].direction = 1
|
||||||
|
end
|
||||||
|
elseif ents[i].name == 'train-stop' then
|
||||||
|
if dir == 2 then
|
||||||
|
ents[i].direction = 6
|
||||||
|
elseif dir == 6 then
|
||||||
|
ents[i].direction = 2
|
||||||
|
end
|
||||||
|
else
|
||||||
|
ents[i].direction = (12 - dir) % 8
|
||||||
|
end
|
||||||
|
ents[i].position.y = -ents[i].position.y
|
||||||
|
if ents[i].drop_position then
|
||||||
|
ents[i].drop_position.y = -ents[i].drop_position.y
|
||||||
|
end
|
||||||
|
if ents[i].pickup_position then
|
||||||
|
ents[i].pickup_position.y = -ents[i].pickup_position.y
|
||||||
|
end
|
||||||
|
end
|
||||||
|
cursor.set_blueprint_entities(ents)
|
||||||
|
end
|
||||||
|
if cursor.get_blueprint_tiles() ~= nil then
|
||||||
|
local ents = cursor.get_blueprint_tiles()
|
||||||
|
for i = 1, #ents do
|
||||||
|
local dir = ents[i].direction or 0
|
||||||
|
ents[i].direction = (12 - dir) % 8
|
||||||
|
ents[i].position.y = -ents[i].position.y
|
||||||
|
end
|
||||||
|
cursor.set_blueprint_tiles(ents)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function flip_h(player)
|
||||||
|
local cursor = getBlueprintCursorStack(player)
|
||||||
|
if cursor then
|
||||||
|
if cursor.get_blueprint_entities() ~= nil then
|
||||||
|
local ents = cursor.get_blueprint_entities()
|
||||||
|
for i = 1, #ents do
|
||||||
|
local dir = ents[i].direction or 0
|
||||||
|
if ents[i].name == 'curved-rail' then
|
||||||
|
ents[i].direction = (9 - dir) % 8
|
||||||
|
elseif ents[i].name == 'storage-tank' then
|
||||||
|
if ents[i].direction == 2 or ents[i].direction == 6 then
|
||||||
|
ents[i].direction = 4
|
||||||
|
else
|
||||||
|
ents[i].direction = 2
|
||||||
|
end
|
||||||
|
elseif ents[i].name == 'rail-signal' or ents[i].name == 'rail-chain-signal' then
|
||||||
|
if dir == 0 then
|
||||||
|
ents[i].direction = 4
|
||||||
|
elseif dir == 1 then
|
||||||
|
ents[i].direction = 3
|
||||||
|
elseif dir == 3 then
|
||||||
|
ents[i].direction = 1
|
||||||
|
elseif dir == 4 then
|
||||||
|
ents[i].direction = 0
|
||||||
|
elseif dir == 5 then
|
||||||
|
ents[i].direction = 7
|
||||||
|
elseif dir == 7 then
|
||||||
|
ents[i].direction = 5
|
||||||
|
end
|
||||||
|
elseif ents[i].name == 'train-stop' then
|
||||||
|
if dir == 0 then
|
||||||
|
ents[i].direction = 4
|
||||||
|
elseif dir == 4 then
|
||||||
|
ents[i].direction = 0
|
||||||
|
end
|
||||||
|
else
|
||||||
|
ents[i].direction = (16 - dir) % 8
|
||||||
|
end
|
||||||
|
ents[i].position.x = -ents[i].position.x
|
||||||
|
if ents[i].drop_position then
|
||||||
|
ents[i].drop_position.x = -ents[i].drop_position.x
|
||||||
|
end
|
||||||
|
if ents[i].pickup_position then
|
||||||
|
ents[i].pickup_position.x = -ents[i].pickup_position.x
|
||||||
|
end
|
||||||
|
end
|
||||||
|
cursor.set_blueprint_entities(ents)
|
||||||
|
end
|
||||||
|
if cursor.get_blueprint_tiles() ~= nil then
|
||||||
|
local ents = cursor.get_blueprint_tiles()
|
||||||
|
for i = 1, #ents do
|
||||||
|
local dir = ents[i].direction or 0
|
||||||
|
ents[i].direction = (16 - dir) % 8
|
||||||
|
ents[i].position.x = -ents[i].position.x
|
||||||
|
end
|
||||||
|
cursor.set_blueprint_tiles(ents)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local main_button_name = 'blueprint_helper_main_button'
|
||||||
|
local main_frame_name = 'blueprint_helper_main_frame'
|
||||||
|
local flip_h_button_name = 'blueprint_helper_flip_h_button'
|
||||||
|
local flip_v_button_name = 'blueprint_helper_flip_v_button'
|
||||||
|
|
||||||
|
local function player_joined(event)
|
||||||
|
local player = game.players[event.player_index]
|
||||||
|
if not player or not player.valid then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if player.gui.top[main_button_name] ~= nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local button = player.gui.top.add {name = main_button_name, type = 'sprite-button', sprite = 'item/blueprint'}
|
||||||
|
button.style.font = 'default-bold'
|
||||||
|
button.style.minimal_height = 38
|
||||||
|
button.style.minimal_width = 38
|
||||||
|
button.style.top_padding = 2
|
||||||
|
button.style.left_padding = 4
|
||||||
|
button.style.right_padding = 4
|
||||||
|
button.style.bottom_padding = 2
|
||||||
|
end
|
||||||
|
|
||||||
|
local function toggle_main_frame(player)
|
||||||
|
local left = player.gui.left
|
||||||
|
|
||||||
|
local main_frame = left[main_frame_name]
|
||||||
|
if main_frame and main_frame.valid then
|
||||||
|
main_frame.destroy()
|
||||||
|
else
|
||||||
|
main_frame =
|
||||||
|
left.add {
|
||||||
|
type = 'frame',
|
||||||
|
name = main_frame_name,
|
||||||
|
direction = 'vertical',
|
||||||
|
caption = 'Blueprint Helper'
|
||||||
|
}
|
||||||
|
main_frame.add {
|
||||||
|
type = 'label',
|
||||||
|
caption = 'With blueprint in cursor click on button below to flip blueprint.'
|
||||||
|
}
|
||||||
|
main_frame.add {
|
||||||
|
type = 'label',
|
||||||
|
caption = 'Obviously this wont work correctly with refineries or chemical plants.'
|
||||||
|
}
|
||||||
|
main_frame.add {
|
||||||
|
type = 'button',
|
||||||
|
name = flip_h_button_name,
|
||||||
|
caption = 'Flip Horizontal'
|
||||||
|
}
|
||||||
|
main_frame.add {
|
||||||
|
type = 'button',
|
||||||
|
name = flip_v_button_name,
|
||||||
|
caption = 'Flip Vertical'
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function gui_click(event)
|
||||||
|
local player = game.players[event.player_index]
|
||||||
|
if not player or not player.valid then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local name = event.element.name
|
||||||
|
if name == main_button_name then
|
||||||
|
toggle_main_frame(player)
|
||||||
|
elseif name == flip_h_button_name then
|
||||||
|
flip_h(player)
|
||||||
|
elseif name == flip_v_button_name then
|
||||||
|
flip_v(player)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Event.add(defines.events.on_player_joined_game, player_joined)
|
||||||
|
Event.add(defines.events.on_gui_click, gui_click)
|
16
control.lua
16
control.lua
@ -4,22 +4,26 @@ require "utils.utils"
|
|||||||
require "utils.list_utils"
|
require "utils.list_utils"
|
||||||
require "base_data"
|
require "base_data"
|
||||||
require "user_groups"
|
require "user_groups"
|
||||||
require "info"
|
|
||||||
require "player_list"
|
|
||||||
require "poll"
|
|
||||||
require "band"
|
|
||||||
require "fish_market"
|
require "fish_market"
|
||||||
require "train_station_names"
|
require "train_station_names"
|
||||||
require "score"
|
|
||||||
require "map_layout"
|
require "map_layout"
|
||||||
require "nuke_control"
|
require "nuke_control"
|
||||||
require "walk_distance"
|
require "walk_distance"
|
||||||
require "follow"
|
require "follow"
|
||||||
require "tasklist"
|
|
||||||
require "autodeconstruct"
|
require "autodeconstruct"
|
||||||
require "corpse_util"
|
require "corpse_util"
|
||||||
require "reactor_meltdown"
|
require "reactor_meltdown"
|
||||||
require "bot"
|
require "bot"
|
||||||
|
|
||||||
|
-- GUIs the order determines the order they appear at the top.
|
||||||
|
require "info"
|
||||||
|
require "player_list"
|
||||||
|
require "poll"
|
||||||
|
require "band"
|
||||||
|
require "tasklist"
|
||||||
|
require "blueprint_helper"
|
||||||
|
require "score"
|
||||||
|
|
||||||
local Event = require "utils.event"
|
local Event = require "utils.event"
|
||||||
|
|
||||||
local function player_joined(event)
|
local function player_joined(event)
|
||||||
|
Reference in New Issue
Block a user