mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-06 00:23:49 +02:00
211 lines
6.5 KiB
Lua
211 lines
6.5 KiB
Lua
local Public = {}
|
|
|
|
local Chrono_table = require 'maps.chronosphere.table'
|
|
|
|
local function create_button(player)
|
|
local button = player.gui.top.add({type = 'sprite-button', name = 'minimap_button', sprite = 'utility/map', tooltip = {'chronosphere.minimap_button_tooltip'}})
|
|
button.visible = false
|
|
end
|
|
|
|
function Public.toggle_button(player)
|
|
if not player.gui.top['minimap_button'] then
|
|
create_button(player)
|
|
end
|
|
local button = player.gui.top['minimap_button']
|
|
if player.surface.name == 'cargo_wagon' then
|
|
button.visible = true
|
|
else
|
|
button.visible = false
|
|
end
|
|
end
|
|
|
|
local function get_player_data(player)
|
|
local playertable = Chrono_table.get_player_table()
|
|
local objective = Chrono_table.get_table()
|
|
local player_data = playertable.icw.players[player.index]
|
|
if playertable.icw.players[player.index] then
|
|
return player_data
|
|
end
|
|
|
|
playertable.icw.players[player.index] = {
|
|
surface = objective.active_surface_index,
|
|
zoom = 0.30,
|
|
map_size = 360,
|
|
auto_map = true,
|
|
coords = {x = 10, y = 45}
|
|
}
|
|
return playertable.icw.players[player.index]
|
|
end
|
|
|
|
function Public.toggle_auto(player)
|
|
get_player_data(player)
|
|
local playertable = Chrono_table.get_player_table()
|
|
local switch = player.gui.screen.icw_map_frame['switch_auto_map']
|
|
if switch.switch_state == 'left' then
|
|
playertable.icw.players[player.index].auto_map = true
|
|
elseif switch.switch_state == 'right' then
|
|
playertable.icw.players[player.index].auto_map = false
|
|
end
|
|
end
|
|
|
|
local function kill_minimap(player)
|
|
local element = player.gui.screen.icw_map_frame
|
|
local player_data = get_player_data(player)
|
|
if element then
|
|
player_data.coords = {x = element.location.x, y = element.location.y}
|
|
if element['switch_auto_map'].switch_state == 'left' then
|
|
player_data.auto_map = true
|
|
else
|
|
player_data.auto_map = false
|
|
end
|
|
element.destroy()
|
|
end
|
|
--if element.visible then element.visible = false end
|
|
end
|
|
|
|
-- local function kill_frame(player)
|
|
-- if player.gui.screen.icw_map_frame then
|
|
-- local element = player.gui.screen.icw_map_frame.icw_map
|
|
-- element.destroy()
|
|
-- end
|
|
-- end
|
|
|
|
local function draw_minimap(player)
|
|
local objective = Chrono_table.get_table()
|
|
local surface = game.surfaces[objective.active_surface_index]
|
|
local position = objective.locomotive.position
|
|
local player_data = get_player_data(player)
|
|
local frame = player.gui.screen.icw_map_frame
|
|
if not frame then
|
|
frame = player.gui.screen.add({type = 'frame', direction = 'vertical', name = 'icw_map_frame', caption = {'chronosphere.minimap'}})
|
|
frame.location = player_data.coords or {x = 10, y = 45}
|
|
local switch_state = 'right'
|
|
if player_data.auto_map then
|
|
switch_state = 'left'
|
|
end
|
|
frame.add(
|
|
{
|
|
type = 'switch',
|
|
name = 'switch_auto_map',
|
|
allow_none_state = false,
|
|
switch_state = switch_state,
|
|
left_label_caption = {'chronosphere.map_on'},
|
|
right_label_caption = {'chronosphere.map_off'}
|
|
}
|
|
)
|
|
end
|
|
frame.visible = true
|
|
local element = frame['icw_map']
|
|
if not element then
|
|
element =
|
|
player.gui.screen.icw_map_frame.add(
|
|
{
|
|
type = 'camera',
|
|
name = 'icw_map',
|
|
position = position,
|
|
surface_index = surface.index,
|
|
zoom = player_data.zoom,
|
|
tooltip = {'chronosphere.minimap_tooltip'}
|
|
}
|
|
)
|
|
element.style.margin = 1
|
|
element.style.minimal_height = player_data.map_size
|
|
element.style.minimal_width = player_data.map_size
|
|
return
|
|
end
|
|
element.position = position
|
|
end
|
|
|
|
function Public.minimap(player, autoaction)
|
|
local player_data = get_player_data(player)
|
|
local frame = player.gui.screen['icw_map_frame']
|
|
if frame then
|
|
kill_minimap(player)
|
|
else
|
|
if player.surface.name == 'cargo_wagon' then
|
|
if autoaction then
|
|
if player_data.auto_map then
|
|
draw_minimap(player)
|
|
end
|
|
else
|
|
draw_minimap(player)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function Public.update_minimap(player)
|
|
if player then
|
|
kill_minimap(player)
|
|
if player.surface.name == 'cargo_wagon' then
|
|
draw_minimap(player)
|
|
end
|
|
else
|
|
for _, p in pairs(game.connected_players) do
|
|
kill_minimap(p)
|
|
if p.surface.name == 'cargo_wagon' then
|
|
draw_minimap(p)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function Public.update_surface(player)
|
|
local objective = Chrono_table.get_table()
|
|
local playertable = Chrono_table.get_player_table()
|
|
if not player then
|
|
for k, _ in pairs(playertable.icw.players) do
|
|
playertable.icw.players[k].surface = objective.active_surface_index
|
|
Public.update_minimap()
|
|
end
|
|
else
|
|
local data = get_player_data(player)
|
|
data.surface = objective.active_surface_index
|
|
Public.update_minimap(player)
|
|
end
|
|
end
|
|
|
|
function Public.toggle_minimap(event)
|
|
local element = event.element
|
|
if not element then
|
|
return
|
|
end
|
|
if not element.valid then
|
|
return
|
|
end
|
|
if element.name ~= 'icw_map' then
|
|
return
|
|
end
|
|
local player = game.players[event.player_index]
|
|
local player_data = get_player_data(player)
|
|
if event.button == defines.mouse_button_type.right then
|
|
player_data.zoom = player_data.zoom - 0.07
|
|
if player_data.zoom < 0.07 then
|
|
player_data.zoom = 0.07
|
|
end
|
|
element.zoom = player_data.zoom
|
|
return
|
|
end
|
|
if event.button == defines.mouse_button_type.left then
|
|
player_data.zoom = player_data.zoom + 0.07
|
|
if player_data.zoom > 2 then
|
|
player_data.zoom = 2
|
|
end
|
|
element.zoom = player_data.zoom
|
|
return
|
|
end
|
|
if event.button == defines.mouse_button_type.middle then
|
|
player_data.map_size = player_data.map_size + 50
|
|
if player_data.map_size > 650 then
|
|
player_data.map_size = 250
|
|
end
|
|
element.style.minimal_height = player_data.map_size
|
|
element.style.minimal_width = player_data.map_size
|
|
element.style.maximal_height = player_data.map_size
|
|
element.style.maximal_width = player_data.map_size
|
|
return
|
|
end
|
|
end
|
|
|
|
return Public
|