]> git.lizzy.rs Git - Crafter.git/blob - mods/player/player_mechanics.lua
Turn off nametags as they break the animation
[Crafter.git] / mods / player / player_mechanics.lua
1 local player_state_channel = minetest.mod_channel_join("player.player_movement_state")
2
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)
8         end
9 end)
10
11 minetest.register_on_joinplayer(function(player)
12         player:set_physics_override({jump=1.25,gravity=1.25})
13         local meta = player:get_meta()
14         meta:set_string("player.player_movement_state", "0")
15 end)
16
17 minetest.register_globalstep(function(dtime)
18         for _,player in ipairs(minetest.get_connected_players()) do
19                 local meta = player:get_meta()
20                 
21                 local hunger = meta:get_int("hunger")
22                 
23                 local running = (meta:get_string("player.player_movement_state") == "1")
24                 local bunny_hopping = (meta:get_string("player.player_movement_state") == "2")
25                 local sneaking = (meta:get_string("player.player_movement_state") == "3")
26                 
27                 --print(running, bunny_hopping)
28                 
29                 
30                 --running FOV modifier
31                 if hunger > 6 and (running or bunny_hopping) then
32                         player:set_fov(1.25, true,0.15)
33                         
34                         if bunny_hopping == true then
35                 --player:set_fov(1.45, true,0.15)
36                                 player:set_physics_override({speed=1.75})
37                         else
38                 --player:set_fov(1.25, true,0.15)
39                                 player:set_physics_override({speed=1.5})
40                         end
41                 else
42             player:set_fov(1, true,0.15)
43                         player:set_physics_override({speed=1})
44                         --meta:set_float("running_timer", 0)
45                 end
46                 
47                 --sneaking
48                 if sneaking then
49             --player:set_fov(0.8, true,0.1)
50                         player:set_eye_offset({x=0,y=-1,z=0},{x=0,y=-1,z=0})
51                 else
52                         player:set_eye_offset({x=0,y=0,z=0},{x=0,y=0,z=0})
53                 end
54                 
55                 --remember to implement hunger
56                 
57                 --eating
58                 if player:get_player_control().RMB then
59                 
60                         local item = player:get_wielded_item():get_name()
61                         local satiation = minetest.get_item_group(item, "satiation")
62                         local hunger = minetest.get_item_group(item, "hunger")
63                         
64                         local meta = player:get_meta()
65                         if meta:get_int("hunger") == 20 then
66                                 return 
67                         end
68                         
69                         if hunger > 0 and satiation > 0  then                           
70                                 local eating = meta:get_float("eating")
71                                 local eating_timer = meta:get_float("eating_timer")
72                                 
73                                 eating = eating + dtime
74                                 eating_timer = eating_timer + dtime
75                                 
76                                 local ps = minetest.add_particlespawner({
77                                         amount = 30,
78                                         time = 0.00001,
79                                         minpos = {x=-0.2, y=-1.5, z=0.5},
80                                         maxpos = {x=0.2, y=1.7, z=0.5},
81                                         minvel = vector.new(-0.5,0,-0.5),
82                                         maxvel = vector.new(0.5,0,0.5),
83                                         minacc = {x=0, y=-9.81, z=1},
84                                         maxacc = {x=0, y=-9.81, z=1},
85                                         minexptime = 0.5,
86                                         maxexptime = 1.5,
87                                         minsize = 0.5,
88                                         maxsize = 1,
89                                         attached = player,
90                                         collisiondetection = true,
91                                         collision_removal = true,
92                                         vertical = false,
93                                         texture = "eat_particles_1.png"
94                                 })
95                                 
96                                 if eating_timer + dtime > 0.25 then
97                                         minetest.sound_play("eat", {
98                                                 to_player = player:get_player_name(),
99                                                 gain = 1.0,  -- default
100                                                 pitch = math.random(60,100)/100,
101                                         })
102                                         eating_timer = 0
103                                 end
104                                 
105                                 if eating + dtime >= 1 then
106                                         local stack = player:get_wielded_item()
107                                         stack:take_item(1)
108                                         minetest.eat_food(player,item)
109                                         eating = 0
110                                         minetest.sound_play("eat_finish", {
111                                                 to_player = player:get_player_name(),
112                                                 gain = 0.2,  -- default
113                                                 pitch = math.random(60,85)/100,
114                                         })
115                                 end
116                                 
117                                 meta:set_float("eating_timer", eating_timer)
118                                 meta:set_float("eating", eating)
119                         else
120                                 local meta = player:get_meta()
121                                 meta:set_float("eating", 0)
122                                 meta:set_float("eating_timer", 0)
123                                 
124                         end
125                 else
126                         local meta = player:get_meta()
127                         meta:set_float("eating", 0)
128                         meta:set_float("eating_timer", 0)
129                 end
130                 
131         end
132 end)