1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-26 03:52:22 +02:00
2021-02-07 12:54:25 +01:00

184 lines
5.6 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)
local player_data = 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}
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 _, player in pairs(game.connected_players) do
kill_minimap(player)
if player.surface.name == "cargo_wagon" then
draw_minimap(player)
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