1 local minetest,math,vector,ipairs,pairs,table =
2 minetest,math,vector,ipairs,pairs,table
4 local food_control_pool = {}
6 local particle_constant = {
9 minpos = {x=-0.1,y=-0.1,z=-0.1},
10 maxpos = {x=0.1, y=0.3, z=0.1},
11 minvel = {x=-0.5,y=0.2, z=-0.5},
12 maxvel = {x=0.5,y=0.6,z=0.5},
13 minacc = {x=0, y=-9.81, z=1},
14 maxacc = {x=0, y=-9.81, z=1},
17 object_collision = false,
18 collisiondetection = true,
19 collision_removal = true,
23 -- creates volitile data for the game to use
25 local create_data = function(player)
26 name = player:get_player_name()
27 if not food_control_pool[name] then
28 food_control_pool[name] = {
36 -- removes movement data
38 local terminate = function(player)
39 name = player:get_player_name()
40 if food_control_pool[name] then
41 food_control_pool[name] = nil
45 minetest.register_on_joinplayer(function(player)
48 minetest.register_on_leaveplayer(function(player)
52 -- manages player eating effects
57 local manage_eating_effects = function(player,timer,sneaking,item)
58 position = player:get_pos()
59 velocity = player:get_player_velocity()
62 position.y = position.y + 1.2
65 position.y = position.y + 1.3
69 position = vector.add(position, vector.multiply(player:get_look_dir(),offset))
71 temp_particle = table.copy(particle_constant)
72 temp_particle.minpos = vector.add(position,temp_particle.minpos)
73 temp_particle.maxpos = vector.add(position,temp_particle.maxpos)
74 temp_particle.minvel = vector.add(velocity,temp_particle.minvel)
75 temp_particle.maxvel = vector.add(velocity,temp_particle.maxvel)
76 temp_particle.node = {name=item.."node"}
78 minetest.add_particlespawner(temp_particle)
81 minetest.sound_play("eat", {
84 pitch = math.random(60,85)/100}
93 local finish_eating = function(player,timer)
95 item = player:get_wielded_item()
97 player_eat_food(player,item)
99 minetest.sound_play("eat_finish", {
102 pitch = math.random(60,85)/100}
118 local manage_eating = function(player,dtime)
119 control = player:get_player_control()
120 name = player:get_player_name()
121 pool = food_control_pool[name]
124 item = player:get_wielded_item():get_name()
126 satiation = minetest.get_item_group( item, "satiation")
127 hunger = minetest.get_item_group( item, "hunger" )
129 if hunger > 0 or satiation > 0 then
131 pool.eating_step = pool.eating_step + dtime
132 pool.eating_timer = pool.eating_timer + dtime
134 pool.eating_timer = manage_eating_effects(
141 pool.eating_step = finish_eating(
148 pool.eating_timer = 0
152 pool.eating_timer = 0
157 minetest.register_globalstep(function(dtime)
158 for _,player in ipairs(minetest.get_connected_players()) do
159 manage_eating(player,dtime)