]> git.somenet.org - factorio/some-zoom.git/commitdiff
RELEASE 2.0.4 - Rewritten. Works again. Now by increasing the players zoom limits. master
authorSomeone <someone@somenet.org>
Fri, 28 Nov 2025 20:54:46 +0000 (21:54 +0100)
committerSomeone <someone@somenet.org>
Fri, 28 Nov 2025 20:54:46 +0000 (21:54 +0100)
License.txt
changelog.txt
control.lua
data.lua
info.json
locale/en/en.cfg
settings.lua [new file with mode: 0644]
sound/empty.ogg [deleted file]
utils.lua [deleted file]

index a164962b8017020638bf3c2a3bb61a20fcaec597..9e7ed3aab30b7a1ca7d9b57657ee2f727a7f98d0 100644 (file)
@@ -1,5 +1,5 @@
 Copyright (c) 2016-2019 BinbinHfr
-Copyright (c) 2020-2024 Someone <someone@somenet.org>
+Copyright (c) 2020-2025 Someone <someone@somenet.org>
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
index 1ee4d586e393812919844bbd556c38dff857e2a1..eb2bf3d8d3fdb210ac0f1e22bf6ad5106745db07 100644 (file)
@@ -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
index bc933ff94b89d29ed12624fb0264ab2e067e8e39..40d2fd9485b60855689e428b36222380a51962ee 100644 (file)
-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)
index 6a0e6c6eb7d7d505f31b65316f210c254863b0c5..5b51c0a342134f69580d70fab8ea7812faccf48b 100644 (file)
--- 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",
-        },
-    }
-)
index 8acec3770c32c4bccc9c897f6948bc21df1267ea..35d4554f6952b576ae174219b871bca345809782 100644 (file)
--- 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"
+    ]
 }
index ca8f2593cbf2e65da6e1aabd34cc198ea576a88f..42e0601d0a0e1c2e723bea76f68b2f7a283c8278 100644 (file)
@@ -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 (file)
index 0000000..b751dcd
--- /dev/null
@@ -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 (file)
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 (file)
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
-