Merge pull request 'Incorperate sheep eating animation.' (#3768) from sheep_eat_animation into master

Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/3768
Reviewed-by: Nicu <kneekoo@noreply.git.minetest.land>
Reviewed-by: ancientmarinerdev <ancientmariner_dev@proton.me>
This commit is contained in:
ancientmarinerdev 2023-06-05 14:06:49 +00:00
commit 47f64f63a3
5 changed files with 42 additions and 35 deletions

View file

@ -217,6 +217,7 @@ function mcl_mobs.register_mob(name, def)
replace_with = def.replace_with, replace_with = def.replace_with,
replace_offset = def.replace_offset or 0, replace_offset = def.replace_offset or 0,
on_replace = def.on_replace, on_replace = def.on_replace,
replace_delay = def.replace_delay or 0,
timer = 0, timer = 0,
env_damage_timer = 0, env_damage_timer = 0,
tamed = false, tamed = false,

View file

@ -355,9 +355,11 @@ function mob_class:do_jump()
jump_c_multiplier = v2/self.walk_velocity/2 jump_c_multiplier = v2/self.walk_velocity/2
end end
local yaw_dir = minetest.yaw_to_dir(self.object:get_yaw())
-- where is front -- where is front
local dir_x = -math.sin(yaw) * (self.collisionbox[4] + 0.5)*jump_c_multiplier+0.6 local dir_x = -math.sin(yaw) * (self.collisionbox[4] + 0.5)*jump_c_multiplier+yaw_dir.x
local dir_z = math.cos(yaw) * (self.collisionbox[4] + 0.5)*jump_c_multiplier+0.6 local dir_z = math.cos(yaw) * (self.collisionbox[4] + 0.5)*jump_c_multiplier+yaw_dir.z
-- what is in front of mob? -- what is in front of mob?
nod = node_ok({ nod = node_ok({
@ -480,6 +482,7 @@ end
-- find and replace what mob is looking for (grass, wheat etc.) -- find and replace what mob is looking for (grass, wheat etc.)
function mob_class:replace_node(pos) function mob_class:replace_node(pos)
if not self.replace_rate if not self.replace_rate
or not self.replace_what or not self.replace_what
or self.child == true or self.child == true
@ -510,18 +513,21 @@ function mob_class:replace_node(pos)
local oldnode = {name = what, param2 = node.param2} local oldnode = {name = what, param2 = node.param2}
local newnode = {name = with, param2 = node.param2} local newnode = {name = with, param2 = node.param2}
local on_replace_return local on_replace_return = false
if self.on_replace then if self.on_replace then
on_replace_return = self.on_replace(self, pos, oldnode, newnode) on_replace_return = self.on_replace(self, pos, oldnode, newnode)
end end
if on_replace_return ~= false then if on_replace_return ~= false then
if mobs_griefing then if mobs_griefing then
minetest.set_node(pos, newnode) minetest.after(self.replace_delay, function()
if self and self.object and self.object:get_velocity() and self.health > 0 then
minetest.set_node(pos, newnode)
end
end)
end end
end end
end end
end end

View file

@ -184,7 +184,7 @@ function mob_class:collision()
end end
function mob_class:check_death_and_slow_mob() function mob_class:check_death_and_slow_mob()
local d = 0.85 local d = 0.7
local dying = self:check_dying() local dying = self:check_dying()
if dying then d = 0.92 end if dying then d = 0.92 end
@ -217,7 +217,7 @@ function mob_class:set_velocity(v)
local vv = self.object:get_velocity() local vv = self.object:get_velocity()
if vv and yaw then if vv and yaw then
self.acc = vector.new(((math.sin(yaw) * -v) + c_x) * .27, 0, ((math.cos(yaw) * v) + c_y) * .27) self.acc = vector.new(((math.sin(yaw) * -v) + c_x) * .4, 0, ((math.cos(yaw) * v) + c_y) * .4)
end end
end end
@ -327,9 +327,9 @@ function mob_class:set_yaw(yaw, delay, dtime)
end end
if math.deg(yaw) > 360 then if math.deg(yaw) > 360 then
yaw=yaw%360 yaw=math.rad(math.deg(yaw)%360)
elseif math.deg(yaw) < 0 then elseif math.deg(yaw) < 0 then
yaw=((360*5)-yaw)%360 yaw=math.rad(((360*5)-math.deg(yaw))%360)
end end
--calculate the shortest way to turn to find our target --calculate the shortest way to turn to find our target
@ -353,7 +353,7 @@ function mob_class:set_yaw(yaw, delay, dtime)
ddtime = dtime ddtime = dtime
end end
if math.abs(target_shortest_path_nums) > 5 then if math.abs(target_shortest_path_nums) > 10 then
self.object:set_yaw(self.object:get_yaw()+(target_shortest_path*(3.6*ddtime))) self.object:set_yaw(self.object:get_yaw()+(target_shortest_path*(3.6*ddtime)))
if self.acc then if self.acc then
self.acc=vector.rotate_around_axis(self.acc,vector.new(0,1,0), target_shortest_path*(3.6*ddtime)) self.acc=vector.rotate_around_axis(self.acc,vector.new(0,1,0), target_shortest_path*(3.6*ddtime))

View file

@ -101,39 +101,45 @@ mcl_mobs.register_mob("mobs_mc:sheep", {
stand_start = 0, stand_end = 0, stand_start = 0, stand_end = 0,
walk_start = 0, walk_end = 40, walk_speed = 30, walk_start = 0, walk_end = 40, walk_speed = 30,
run_start = 0, run_end = 40, run_speed = 40, run_start = 0, run_end = 40, run_speed = 40,
eat_start = 40, eat_end = 80, eat_loop = false,
}, },
child_animations = { child_animations = {
stand_start = 81, stand_end = 81, stand_start = 81, stand_end = 81,
walk_start = 81, walk_end = 121, walk_speed = 45, walk_start = 81, walk_end = 121, walk_speed = 45,
run_start = 81, run_end = 121, run_speed = 60, run_start = 81, run_end = 121, run_speed = 60,
eat_start = 121, eat_start = 161, eat_loop = false,
}, },
follow = { "mcl_farming:wheat_item" }, follow = { "mcl_farming:wheat_item" },
view_range = 12, view_range = 12,
-- Eat grass -- Eat grass
replace_rate = 20, replace_rate = 80,
replace_delay = 1.3,
replace_what = { replace_what = {
{ "mcl_core:dirt_with_grass", "mcl_core:dirt", -1 }, { "mcl_core:dirt_with_grass", "mcl_core:dirt", -1 },
{ "mcl_flowers:tallgrass", "air", 0 }, { "mcl_flowers:tallgrass", "air", 0 },
}, },
-- Properly regrow wool after eating grass -- Properly regrow wool after eating grass
on_replace = function(self, pos, oldnode, newnode) on_replace = function(self, pos, oldnode, newnode)
if not self.color or not colors[self.color] then self.state = "eat"
self.color = "unicolor_white" self:set_animation("eat")
end self:set_velocity(0)
self.gotten = false minetest.after(self.replace_delay, function()
self.base_texture = sheep_texture(self.color) if self and self.object and self.object:get_velocity() and self.health > 0 then
self.object:set_properties({ textures = self.base_texture }) self.object:set_velocity(vector.zero())
self.drops = { if not self.color or not colors[self.color] then
{name = "mcl_mobitems:mutton", self.color = "unicolor_white"
chance = 1, end
min = 1, self.gotten = false
max = 2,}, self.base_texture = sheep_texture(self.color)
{name = colors[self.color][1], self.object:set_properties({ textures = self.base_texture })
chance = 1, end
min = 1, end)
max = 1,}, minetest.after(2.5, function()
} if self and self.object and self.state == 'eat' and self.health > 0 and self.object:get_velocity() then
self.state = "walk"
end
end)
end, end,
-- Set random color on spawn -- Set random color on spawn
@ -226,12 +232,6 @@ mcl_mobs.register_mob("mobs_mc:sheep", {
item:add_wear(mobs_mc.shears_wear) item:add_wear(mobs_mc.shears_wear)
clicker:get_inventory():set_stack("main", clicker:get_wield_index(), item) clicker:get_inventory():set_stack("main", clicker:get_wield_index(), item)
end end
self.drops = {
{name = "mcl_mobitems:mutton",
chance = 1,
min = 1,
max = 2,},
}
return return
end end
-- Dye sheep -- Dye sheep