1 local player_state_channel = minetest.mod_channel_join("player.player_movement_state")
3 minetest.register_on_modchannel_message(function(channel_name, sender, message)
4 if channel_name == "player.player_movement_state" then
5 local player = minetest.get_player_by_name(sender)
6 local meta = player:get_meta()
7 meta:set_string("player.player_movement_state", message)
11 minetest.register_globalstep(function(dtime)
12 for _,player in ipairs(minetest.get_connected_players()) do
13 local meta = player:get_meta()
15 local running = (meta:get_string("player.player_movement_state") == "1")
16 local bunny_hopping = (meta:get_string("player.player_movement_state") == "2")
17 local sneaking = (meta:get_string("player.player_movement_state") == "3")
19 --print(running, bunny_hopping)
22 --running FOV modifier
23 if running or bunny_hopping then
24 local fov = player:get_fov()
29 if fov+dtime < 1.2 then
30 player:set_fov(fov + dtime, true)
31 elseif fov-dtime > 1.2 then
32 player:set_fov(fov - dtime, true)
33 elseif fov+dtime > 1.2 then
34 player:set_fov(1.2, true)
36 if bunny_hopping == true then
37 player:set_physics_override({speed=1.75})
39 player:set_physics_override({speed=1.5})
42 local meta = player:get_meta()
43 local fov = player:get_fov()
45 player:set_fov(fov - dtime, true)
46 elseif fov-dtime < 1 then
47 player:set_fov(1, true)
50 player:set_physics_override({speed=1})
51 --meta:set_float("running_timer", 0)
56 player:set_eye_offset({x=0,y=-1,z=0},{x=0,y=-1,z=0})
58 player:set_eye_offset({x=0,y=0,z=0},{x=0,y=0,z=0})
61 --remember to implement hunger
64 if player:get_player_control().RMB then
65 local health = player:get_wielded_item():get_definition().health
67 local meta = player:get_meta()
68 local eating = meta:get_float("eating")
69 local eating_timer = meta:get_float("eating_timer")
71 eating = eating + dtime
72 eating_timer = eating_timer + dtime
74 local ps = minetest.add_particlespawner({
77 minpos = {x=-0.2, y=-1.5, z=0.5},
78 maxpos = {x=0.2, y=1.7, z=0.5},
79 minvel = vector.new(-0.5,0,-0.5),
80 maxvel = vector.new(0.5,0,0.5),
81 minacc = {x=0, y=-9.81, z=1},
82 maxacc = {x=0, y=-9.81, z=1},
88 collisiondetection = true,
89 collision_removal = true,
91 texture = "eat_particles_1.png"
94 if eating_timer + dtime > 0.25 then
95 minetest.sound_play("eat", {
96 to_player = player:get_player_name(),
97 gain = 1.0, -- default
98 pitch = math.random(60,100)/100,
103 if eating + dtime >= 1 then
104 local stack = player:get_wielded_item()
106 player:set_wielded_item(stack)
107 player:set_hp(player:get_hp() + health)
109 minetest.sound_play("eat_finish", {
110 to_player = player:get_player_name(),
111 gain = 0.2, -- default
112 pitch = math.random(60,85)/100,
116 meta:set_float("eating_timer", eating_timer)
117 meta:set_float("eating", eating)
119 local meta = player:get_meta()
120 meta:set_float("eating", 0)
121 meta:set_float("eating_timer", 0)
125 local meta = player:get_meta()
126 meta:set_float("eating", 0)
127 meta:set_float("eating_timer", 0)