Sneak eye offset

Sneak eye offset

Postby Oil_boi » Tue Apr 16, 2019 5:41 am

I created this small bit of code to lower the player's eyesight when they sneak

Code: Select all
sneak_table = {}
minetest.register_on_joinplayer(function(player)
  sneak_table[player:get_player_name()] = false
end)

minetest.register_globalstep(function(dtime)
 for _,player in ipairs(minetest.get_connected_players()) do
   --get if player is sneaking
   local sneaking = player:get_player_control().sneak

   --affect camera if sneaking changed
   if sneaking ~=  sneak_table[player:get_player_name()] then
     if sneaking == true then
       player:set_eye_offset({x=0,y=-2,z=0},{x=0,y=-2,z=0})
     else
       player:set_eye_offset({x=0,y=0,z=0},{x=0,y=0,z=0})
     end
   end

   --store sneak bool for next loop
   sneak_table[player:get_player_name()] = sneaking
 end
end)

Oil_boi
Member
 
Posts: 38
Joined: Mon Jan 28, 2019 1:12 pm
GitHub: oilboi
In-game: oil_boi

Re: Sneak eye offset

Postby Oil_boi » Tue Apr 16, 2019 6:38 am

Here is an example: https://youtu.be/_BJdX1RYUqQ
Oil_boi
Member
 
Posts: 38
Joined: Mon Jan 28, 2019 1:12 pm
GitHub: oilboi
In-game: oil_boi

Re: Sneak eye offset

Postby texmex » Tue Apr 16, 2019 1:58 pm

Good one. Should be put to use in all MT games imo.
texmex
Member
 
Posts: 1292
Joined: Mon Jul 11, 2016 9:08 pm
GitHub: tacotexmex
In-game: texmex

Re: Sneak eye offset

Postby v-rob » Wed Apr 17, 2019 12:55 am

It would be nice if it was smoother, and if the player's model would be in a crawling position when it happened. Oh, and make the player's model one node taller. Then we'll have full-fledged crawling! One node tall tunnels become possible!

:-)
v-rob
Member
 
Posts: 620
Joined: Thu Mar 24, 2016 3:19 am
GitHub: v-rob

Re: Sneak eye offset

Postby Linuxdirk » Wed Apr 17, 2019 9:50 am

It’s this kind of small details that make Minecraft feel more polished than Minetest.

Thanks for this great idea!

v-rob wrote:Oh, and make the player's model one node [smaller]. Then we'll have full-fledged crawling! One node tall tunnels become possible!

Afaik it already is possible. All we need is to have proper crouching animation.
Linuxdirk
Member
 
Posts: 1925
Joined: Wed Sep 17, 2014 11:21 am
In-game: Linuxdirk

Re: Sneak eye offset

Postby paramat » Sat Apr 20, 2019 10:29 pm

The code has a problem:
It is setting eye offset for every player every global step (10 times per second) whether or not eye offset needs changing. A table should store the sneak state of each player and eye offset only changed when it needs to be.
paramat
Developer
 
Posts: 3371
Joined: Sun Oct 28, 2012 12:05 am
GitHub: paramat

Re: Sneak eye offset

Postby Oil_boi » Mon Apr 22, 2019 3:59 am

paramat wrote:The code has a problem:
It is setting eye offset for every player every global step (10 times per second) whether or not eye offset needs changing. A table should store the sneak state of each player and eye offset only changed when it needs to be.


I updated the code in the main post to only change camera if sneak doesn't equal sneak from last tick:

Code: Select all
sneak_table = {}
minetest.register_on_joinplayer(function(player)
  sneak_table[player:get_player_name()] = false
end)

minetest.register_globalstep(function(dtime)
 for _,player in ipairs(minetest.get_connected_players()) do
   --get if player is sneaking
   local sneaking = player:get_player_control().sneak

   --affect camera if sneaking changed
   if sneaking ~=  sneak_table[player:get_player_name()] then
     if sneaking == true then
       player:set_eye_offset({x=0,y=-2,z=0},{x=0,y=-2,z=0})
     else
       player:set_eye_offset({x=0,y=0,z=0},{x=0,y=0,z=0})
     end
   end

   --store sneak bool for next loop
   sneak_table[player:get_player_name()] = sneaking
 end
end)


Thanks for the tip!
Oil_boi
Member
 
Posts: 38
Joined: Mon Jan 28, 2019 1:12 pm
GitHub: oilboi
In-game: oil_boi



Return to Modding Discussion



Who is online

Users browsing this forum: Yandex Bot [Bot] and 0 guests