From: Someone Date: Fri, 28 Nov 2025 20:54:46 +0000 (+0100) Subject: RELEASE 2.0.4 - Rewritten. Works again. Now by increasing the players zoom limits. X-Git-Url: https://git.somenet.org/factorio/some-zoom.git/commitdiff_plain RELEASE 2.0.4 - Rewritten. Works again. Now by increasing the players zoom limits. --- diff --git a/License.txt b/License.txt index a164962..9e7ed3a 100644 --- a/License.txt +++ b/License.txt @@ -1,5 +1,5 @@ Copyright (c) 2016-2019 BinbinHfr -Copyright (c) 2020-2024 Someone +Copyright (c) 2020-2025 Someone Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/changelog.txt b/changelog.txt index 1ee4d58..eb2bf3d 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,9 +1,16 @@ +--------------------------------------------------------------------------------------------------- +Version: 2.0.4 +Date: 2025-11-28 + + Changed: + - Rewritten. Works again. Now by increasing the players zoom limits. + --------------------------------------------------------------------------------------------------- Version: 2.0.0 Date: 2024-10-21 Changed: - - Initial compatibility with Factorio 2.0 + - Initial compatibility with Factorio 2.0 (fixed abandoned mod) --------------------------------------------------------------------------------------------------- Version: 1.1.2 diff --git a/control.lua b/control.lua index bc933ff..40d2fd9 100644 --- a/control.lua +++ b/control.lua @@ -1,145 +1,64 @@ -debug_mod_name = "Zoom" -require("utils") -local zoom_factor = 1.5 -local zoom_wide_max = 0.01 -local zoom_wide_hotkey = 1 / (zoom_factor^7) -local zoom_close_max = 16.00 -local player_mem = {} - --------------------------------------------------------------------------------------- -local function init_player(player) - if player_mem == nil then return end - - -- initialize or update per player globals of the mod, and reset the gui - debug_print( "init_player ", player.name, " connected=", player.connected ) - - player_mem[player.index] = player_mem[player.index] or {} - - local player_mem = player_mem[player.index] - player_mem.player = player_mem.player or player - player_mem.zoom = player_mem.zoom or 1 - - if player.connected then - build_bar(player) - end -end - --------------------------------------------------------------------------------------- -local function init_players() - for _, player in pairs(game.players) do - init_player(player) - end -end - --------------------------------------------------------------------------------------- -local function on_init() - -- called once, the first time the mod is loaded on a game (new or existing game) - debug_print( "on_init" ) - init_players() -end - -script.on_init(on_init) +function build_gui(player) + -- here only build gui, but not try to update it with player data that is not always already available (in init_player for example) + local guif = player.gui.top.flw_zoom --------------------------------------------------------------------------------------- -local function on_configuration_changed(data) - -- detect any mod or game version change - if data.mod_changes ~= nil then - local changes = data.mod_changes[debug_mod_name] - if changes ~= nil then - debug_print( "update mod: ", debug_mod_name, " ", tostring(changes.old_version), " to ", tostring(changes.new_version) ) - init_players() - end + if guif == nil then + guif = player.gui.top.add({type = "flow", name = "flw_zoom", direction = "horizontal", style = "zoom_flow_style"}) + guif.add({type = "sprite-button", name = "but_zoom_zout", sprite = "sprite_zout", style = "zoom_sprite_style"}) + guif.add({type = "sprite-button", name = "but_zoom_zin", sprite = "sprite_zin", style = "zoom_sprite_style"}) end end -script.on_configuration_changed(on_configuration_changed) --------------------------------------------------------------------------------------- -local function on_player_created(event) - -- called at player creation - local player = game.players[event.player_index] - debug_print( "player created ", player.name ) - - init_player(player) -end -script.on_event(defines.events.on_player_created, on_player_created ) - --------------------------------------------------------------------------------------- -local function on_player_joined_game(event) - -- called in SP(once) and MP(at every connect), eventually after on_player_created - local player = game.players[event.player_index] - debug_print( "player joined ", player.name ) - - init_player(player) -end - -script.on_event(defines.events.on_player_joined_game, on_player_joined_game ) - --------------------------------------------------------------------------------------- local function on_gui_click(event) local player = game.players[event.player_index] - local event_name = event.element.name - local prefix = string.sub(event_name,1,14) - local suffix = string.sub(event_name,15) - debug_print( "on_gui_click ", player.name, " ", event_name ) + if event.element.name == "but_zoom_zin" then + player.zoom = player.zoom*player.mod_settings["some-zoom-zoomchangefactor"].value - if event_name == "but_zoom_zin" then - local player_mem = player_mem[player.index] - if player_mem.zoom < zoom_close_max then - player_mem.zoom = player_mem.zoom * zoom_factor - player.zoom = player_mem.zoom - end + elseif event.element.name == "but_zoom_zout" then + player.zoom = player.zoom/player.mod_settings["some-zoom-zoomchangefactor"].value - elseif event_name == "but_zoom_zout" then - local player_mem = player_mem[player.index] - if player_mem.zoom > zoom_wide_max then - player_mem.zoom = player_mem.zoom / zoom_factor - player.zoom = player_mem.zoom - end end end -script.on_event(defines.events.on_gui_click, on_gui_click) - --------------------------------------------------------------------------------------- -local function on_zoom_hotkey(event) - local player = game.players[event.player_index] - local player_mem = player_mem[player.index] - player_mem.zoom = zoom_wide_hotkey - player.zoom = player_mem.zoom -end - -script.on_event("zoom_hotkey", on_zoom_hotkey) --------------------------------------------------------------------------------------- -function build_bar( player ) - -- here only build gui, but not try to update it with player data that is not always already available (in init_player for example) - local guif = player.gui.top.flw_zoom - if guif == nil then - debug_print("create gui player" .. player.name) - guif = player.gui.top.add({type = "flow", name = "flw_zoom", direction = "horizontal", style = "zoom_flow_style"}) - guif.add({type = "sprite-button", name = "but_zoom_zout", sprite = "sprite_zout", style = "zoom_sprite_style"}) - guif.add({type = "sprite-button", name = "but_zoom_zin", sprite = "sprite_zin", style = "zoom_sprite_style"}) +local function on_runtime_mod_setting_changed(event) + local player = game.players[event.player_index] + if player.connected then + player.zoom_limits = {} + local defzoomlimit = player.zoom_limits + local zoomlimitfactor = 1 + + player.zoom_limits = { + furthest = { distance = defzoomlimit.furthest.distance*player.mod_settings["some-zoom-zoomlimitfactor"].value, max_distance = defzoomlimit.furthest.max_distance*player.mod_settings["some-zoom-zoomlimitfactor"].value}, + furthest_game_view = { distance = defzoomlimit.furthest.distance*player.mod_settings["some-zoom-zoomlimitfactor"].value, max_distance = defzoomlimit.furthest.max_distance*player.mod_settings["some-zoom-zoomlimitfactor"].value} + } end end --------------------------------------------------------------------------------------- -local interface = {} -function interface.reset() - debug_print( "reset" ) +local function on_init() for _, player in pairs(game.players) do - if player.gui.top.flw_zoom then player.gui.top.flw_zoom.destroy() end - init_player(player) + if player.connected then + player.zoom_limits = {} + local defzoomlimit = player.zoom_limits + local zoomlimitfactor = 1 + + player.zoom_limits = { + furthest = { distance = defzoomlimit.furthest.distance*player.mod_settings["some-zoom-zoomlimitfactor"].value, max_distance = defzoomlimit.furthest.max_distance*player.mod_settings["some-zoom-zoomlimitfactor"].value}, + furthest_game_view = { distance = defzoomlimit.furthest.distance*player.mod_settings["some-zoom-zoomlimitfactor"].value, max_distance = defzoomlimit.furthest.max_distance*player.mod_settings["some-zoom-zoomlimitfactor"].value} + } + build_gui(player) + end end end -remote.add_interface( "zoom", interface ) - --- /c remote.call( "zoom", "reset" ) +script.on_event(defines.events.on_runtime_mod_setting_changed, on_runtime_mod_setting_changed) +script.on_event(defines.events.on_gui_click, on_gui_click) +script.on_init(on_init) diff --git a/data.lua b/data.lua index 6a0e6c6..5b51c0a 100644 --- a/data.lua +++ b/data.lua @@ -1,12 +1 @@ -require("utils") require("prototypes/styles") - -data:extend( - { - { - type = "custom-input", - name = "zoom_hotkey", - key_sequence = "ALT + Z", - }, - } -) diff --git a/info.json b/info.json index 8acec37..35d4554 100644 --- a/info.json +++ b/info.json @@ -1,10 +1,12 @@ { "name": "some-zoom", - "version": "2.0.0", - "title": "Zoom (fixed+re-published abandoned mod)", + "version": "2.0.4", + "title": "Zoom (works again)", "author": "Someone (originally BinbinHfr)", "homepage": "https://git.somenet.org/factorio/some-zoom.git", - "description": "Just 2 buttons to zoom extra wide or close, further than actual gui limits! And a ALT-Y hotkey to direct zoom out.", + "description": "Increases the game's zoom limits by the zoomlimitfactor player-setting. By default by factor 4. The buttons remain for now for legacy reasons.", "factorio_version": "2.0", - "dependencies": ["base>=2.0.0"] + "dependencies": [ + "base>=2.0.0" + ] } diff --git a/locale/en/en.cfg b/locale/en/en.cfg index ca8f259..42e0601 100644 --- a/locale/en/en.cfg +++ b/locale/en/en.cfg @@ -1,3 +1,8 @@ -[controls] -zoom_hotkey=Zoom +[mod-setting-name] +some-zoom-zoomchangefactor=Zoomchange factor +some-zoom-zoomlimitfactor=Zoomlimit factor + +[mod-setting-description] +some-zoom-zoomchangefactor=By how much we change the zoom per button click. +some-zoom-zoomlimitfactor=By how much we expand the usual game limits. Dont set it too high to prevent accidental zoom out-lag. diff --git a/settings.lua b/settings.lua new file mode 100644 index 0000000..b751dcd --- /dev/null +++ b/settings.lua @@ -0,0 +1,18 @@ +data:extend({ + { + type = "double-setting", + name = "some-zoom-zoomchangefactor", + setting_type = "runtime-per-user", + default_value = 0.75, + minimum_value = 0.1, + maximum_value = 0.9, + }, + { + type = "int-setting", + name = "some-zoom-zoomlimitfactor", + setting_type = "runtime-per-user", + default_value = 4, + minimum_value = 1, + maximum_value = 100, + } +}) diff --git a/sound/empty.ogg b/sound/empty.ogg deleted file mode 100644 index 5be4b0c..0000000 Binary files a/sound/empty.ogg and /dev/null differ diff --git a/utils.lua b/utils.lua deleted file mode 100644 index b865f26..0000000 --- a/utils.lua +++ /dev/null @@ -1,337 +0,0 @@ --- utils.lua by binbinhfr, v1.0.16 - --- define debug_status to 1 or nil in the control.lua, before statement require("utils") --- define also debug_file and debug_mod_name - -colors = { - white = {r = 1, g = 1, b = 1}, - black = {r = 0, g = 0, b = 0}, - darkgrey = {r = 0.25, g = 0.25, b = 0.25}, - grey = {r = 0.5, g = 0.5, b = 0.5}, - lightgrey = {r = 0.75, g = 0.75, b = 0.75}, - - red = {r = 1, g = 0, b = 0}, - darkred = {r = 0.5, g = 0, b = 0}, - lightred = {r = 1, g = 0.5, b = 0.5}, - green = {r = 0, g = 1, b = 0}, - darkgreen = {r = 0, g = 0.5, b = 0}, - lightgreen = {r = 0.5, g = 1, b = 0.5}, - blue = {r = 0, g = 0, b = 1}, - darkblue = {r = 0, g = 0, b = 0.5}, - lightblue = {r = 0.5, g = 0.5, b = 1}, - - orange = {r = 1, g = 0.55, b = 0.1}, - yellow = {r = 1, g = 1, b = 0}, - pink = {r = 1, g = 0, b = 1}, - purple = {r = 0.6, g = 0.1, b = 0.6}, - brown = {r = 0.6, g = 0.4, b = 0.1}, -} - -anticolors = { - white = colors.black, - black = colors.white, - darkgrey = colors.white, - grey = colors.black, - lightgrey = colors.black, - - red = colors.white, - darkred = colors.white, - lightred = colors.black, - green = colors.black, - darkgreen = colors.white, - lightgreen = colors.black, - blue = colors.white, - darkblue = colors.white, - lightblue = colors.black, - - orange = colors.black, - yellow = colors.black, - pink = colors.white, - purple = colors.white, - brown = colors.white, -} - -lightcolors = { - white = colors.lightgrey, - grey = colors.darkgrey, - lightgrey = colors.grey, - - red = colors.lightred, - green = colors.lightgreen, - blue = colors.lightblue, - yellow = colors.orange, - pink = colors.purple, -} - -local author_name1 = "BinbinHfr" -local author_name2 = "binbin" - --------------------------------------------------------------------------------------- -function read_version(v) - local v1, v2, v3 = string.match(v, "(%d+).(%d+).(%d+)") - debug_print( "version cut = ", v1,v2,v3) -end - --------------------------------------------------------------------------------------- -function compare_versions(v1,v2) - local v1a, v1b, v1c = string.match(v1, "(%d+).(%d+).(%d+)") - local v2a, v2b, v2c = string.match(v2, "(%d+).(%d+).(%d+)") - - v1a = tonumber(v1a) - v1b = tonumber(v1b) - v1c = tonumber(v1c) - v2a = tonumber(v2a) - v2b = tonumber(v2b) - v2c = tonumber(v2c) - - if v1a > v2a then - return 1 - elseif v1a < v2a then - return -1 - elseif v1b > v2b then - return 1 - elseif v1b < v2b then - return -1 - elseif v1c > v2c then - return 1 - elseif v1c < v2c then - return -1 - else - return 0 - end -end - --------------------------------------------------------------------------------------- -function older_version(v1,v2) - local v1a, v1b, v1c = string.match(v1, "(%d+).(%d+).(%d+)") - local v2a, v2b, v2c = string.match(v2, "(%d+).(%d+).(%d+)") - local ret - - v1a = tonumber(v1a) - v1b = tonumber(v1b) - v1c = tonumber(v1c) - v2a = tonumber(v2a) - v2b = tonumber(v2b) - v2c = tonumber(v2c) - - if v1a > v2a then - ret = false - elseif v1a < v2a then - ret = true - elseif v1b > v2b then - ret = false - elseif v1b < v2b then - ret = true - elseif v1c < v2c then - ret = true - else - ret = false - end - - debug_print( "older_version ", v1, "<", v2, "=", ret ) - - return(ret) -end - --------------------------------------------------------------------------------------- -function debug_active(...) - -- can be called everywhere, except in on_load where game is not existing - local s = "" - - for i, v in ipairs({...}) do - s = s .. tostring(v) - end - - if s == "RAZ" or debug_do_raz == true then - game.remove_path(debug_file) - debug_do_raz = false - elseif s == "CLEAR" then - for _, player in pairs(game.players) do - if player.connected then player.clear_console() end - end - end - - s = debug_mod_name .. "(" .. game.tick .. "): " .. s - game.write_file( debug_file, s .. "\n", true ) - - for _, player in pairs(game.players) do - if player.connected then player.print(s) end - end -end - -if debug_status == 1 then debug_print = debug_active else debug_print = function() end end - --------------------------------------------------------------------------------------- -function message_all(s) - for _, player in pairs(game.players) do - if player.connected then - player.print(s) - end - end -end - --------------------------------------------------------------------------------------- -function message_force(force, s) - for _, player in pairs(force.players) do - if player.connected then - player.print(s) - end - end -end - --------------------------------------------------------------------------------------- -function square_area( origin, radius ) - return { - {x=origin.x - radius, y=origin.y - radius}, - {x=origin.x + radius, y=origin.y + radius} - } -end - --------------------------------------------------------------------------------------- -function distance( pos1, pos2 ) - local dx = pos2.x - pos1.x - local dy = pos2.y - pos1.y - return( math.sqrt(dx*dx+dy*dy) ) -end - --------------------------------------------------------------------------------------- -function distance_square( pos1, pos2 ) - return( math.max(math.abs(pos2.x - pos1.x),math.abs(pos2.y - pos1.y)) ) -end - --------------------------------------------------------------------------------------- -function pos_offset( pos, offset ) - return { x=pos.x + offset.x, y=pos.y + offset.y } -end - --------------------------------------------------------------------------------------- -function surface_area(surf) - local x1, y1, x2, y2 = 0,0,0,0 - - for chunk in surf.get_chunks() do - if chunk.x < x1 then - x1 = chunk.x - elseif chunk.x > x2 then - x2 = chunk.x - end - if chunk.y < y1 then - y1 = chunk.y - elseif chunk.y > y2 then - y2 = chunk.y - end - end - - return( {{x1*32-8,y1*32-8},{x2*32+40,y2*32+40}} ) -end - --------------------------------------------------------------------------------------- -function iif( cond, val1, val2 ) - if cond then - return val1 - else - return val2 - end -end - --------------------------------------------------------------------------------------- -function add_list(list, obj) - -- to avoid duplicates... - for i, obj2 in pairs(list) do - if obj2 == obj then - return(false) - end - end - table.insert(list,obj) - return(true) -end - --------------------------------------------------------------------------------------- -function del_list(list, obj) - for i, obj2 in pairs(list) do - if obj2 == obj then - table.remove( list, i ) - return(true) - end - end - return(false) -end - --------------------------------------------------------------------------------------- -function in_list(list, obj) - for k, obj2 in pairs(list) do - if obj2 == obj then - return(k) - end - end - return(nil) -end - --------------------------------------------------------------------------------------- -function size_list(list) - local n = 0 - for i in pairs(list) do - n = n + 1 - end - return(n) -end - --------------------------------------------------------------------------------------- -function concat_lists(list1, list2) - -- add list2 into list1 , do not avoid duplicates... - for i, obj in pairs(list2) do - table.insert(list1,obj) - end -end - ------------------------------------------------------------------------------------- -function is_dev(player) - return( player.name == author_name1 or player.name == author_name2 ) -end - --------------------------------------------------------------------------------------- -function dupli_proto( type, name1, name2 ) - if data.raw[type][name1] then - local proto = table.deepcopy(data.raw[type][name1]) - proto.name = name2 - if proto.minable and proto.minable.result then proto.minable.result = name2 end - if proto.place_result then proto.place_result = name2 end - if proto.take_result then proto.take_result = name2 end - if proto.result then proto.result = name2 end - return(proto) - else - error("prototype unknown " .. name1 ) - return(nil) - end -end - --------------------------------------------------------------------------------------- -function debug_guis( guip, indent ) - if guip == nil then return end - debug_print( indent .. string.rep("....",indent) .. " " .. guip.name ) - indent = indent+1 - for k, gui in pairs(guip.children_names) do - debug_guis( guip[gui], indent ) - end -end - --------------------------------------------------------------------------------------- -function extract_monolith(filename, x, y, w, h) - return { - type = "monolith", - - top_monolith_border = 0, - right_monolith_border = 0, - bottom_monolith_border = 0, - left_monolith_border = 0, - - monolith_image = { - filename = filename, - priority = "extra-high-no-scale", - width = w, - height = h, - x = x, - y = y, - }, - } -end -