Binoculars: Update to use 'zoom_fov' player property
authorparamat <paramat@users.noreply.github.com>
Sun, 26 Nov 2017 04:40:59 +0000 (04:40 +0000)
committerparamat <mat.gregory@virginmedia.com>
Mon, 4 Dec 2017 02:54:20 +0000 (02:54 +0000)
In survival mode, zoom is disabled, the binoculars item is needed to
allow a zoom with a 10 degree FOV, realistic for compact binoculars.

Creative mode or per-player creative privilege allows a zoom with a
15 degree field of view (the default MT engine zoom FOV).

mods/binoculars/README.txt
mods/binoculars/init.lua

index 3b90b4c4eabb140714847413c912bfb1d4078a88..0c65f6ea26e8fb35defd5755869f3aa48b981e03 100644 (file)
@@ -24,12 +24,14 @@ O_O
 
 Usage
 -----
-In survival mode, use of zoom requires the binoculars item in your inventory.
+In survival mode, use of zoom requires the binoculars item in your inventory,
+they will allow a 10 degree field of view.
 It can take up to 5 seconds for adding to or removal from inventory to have an
-effect, however to instantly allow the use of zoom 'use' (leftclick) the item.
+effect, however to instantly allow the use of this zoom 'use' (leftclick) the
+item.
 
-Zoom is automatically allowed in creative mode and for any player with the
-'creative' privilege.
+Zoom with a field of view of 15 degrees is automatically allowed in creative
+mode and for any player with the 'creative' privilege.
 
 The 'binoculars.update_player_property()' function is global so can be
 redefined by a mod for alternative behaviour.
index 153044ae112de76cd6735473dbe3ee657df14abe..0b43a061bd84ca098cad66b26d2b56bbcde9a043 100644 (file)
@@ -4,12 +4,8 @@ binoculars = {}
 
 
 -- Detect creative mod
-
 local creative_mod = minetest.get_modpath("creative")
-
-
 -- Cache creative mode setting as fallback if creative mod not present
-
 local creative_mode_cache = minetest.settings:get_bool("creative_mode")
 
 
@@ -20,11 +16,18 @@ function binoculars.update_player_property(player)
        local creative_enabled =
                (creative_mod and creative.is_enabled_for(player:get_player_name())) or
                creative_mode_cache
+       local new_zoom_fov = 0
+
+       if player:get_inventory():contains_item(
+                       "main", "binoculars:binoculars") then
+               new_zoom_fov = 10
+       elseif creative_enabled then
+               new_zoom_fov = 15
+       end
+
        -- Only set property if necessary to avoid player mesh reload
-       local new_can_zoom = creative_enabled or player:get_inventory():contains_item(
-                       "main", "binoculars:binoculars")
-       if player:get_properties().can_zoom ~= new_can_zoom then
-               player:set_properties({can_zoom = new_can_zoom})
+       if player:get_properties().zoom_fov ~= new_zoom_fov then
+               player:set_properties({zoom_fov = new_zoom_fov})
        end
 end