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_offset = def.replace_offset or 0,
on_replace = def.on_replace,
replace_delay = def.replace_delay or 0,
timer = 0,
env_damage_timer = 0,
tamed = false,
@ -490,7 +491,7 @@ function mcl_mobs.register_egg(mob, desc, background_color, overlay_color, addeg
on_place = function(itemstack, placer, pointed_thing)
local pos = pointed_thing.above
-- am I clicking on something with existing on_rightclick function?
local under = minetest.get_node(pointed_thing.under)
local def = minetest.registered_nodes[under.name]

View file

@ -355,9 +355,11 @@ function mob_class:do_jump()
jump_c_multiplier = v2/self.walk_velocity/2
end
local yaw_dir = minetest.yaw_to_dir(self.object:get_yaw())
-- where is front
local dir_x = -math.sin(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+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+yaw_dir.z
-- what is in front of mob?
nod = node_ok({
@ -480,6 +482,7 @@ end
-- find and replace what mob is looking for (grass, wheat etc.)
function mob_class:replace_node(pos)
if not self.replace_rate
or not self.replace_what
or self.child == true
@ -510,18 +513,21 @@ function mob_class:replace_node(pos)
local oldnode = {name = what, param2 = node.param2}
local newnode = {name = with, param2 = node.param2}
local on_replace_return
local on_replace_return = false
if self.on_replace then
on_replace_return = self.on_replace(self, pos, oldnode, newnode)
end
if on_replace_return ~= false 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

View file

@ -184,7 +184,7 @@ function mob_class:collision()
end
function mob_class:check_death_and_slow_mob()
local d = 0.85
local d = 0.7
local dying = self:check_dying()
if dying then d = 0.92 end
@ -217,7 +217,7 @@ function mob_class:set_velocity(v)
local vv = self.object:get_velocity()
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
@ -327,9 +327,9 @@ function mob_class:set_yaw(yaw, delay, dtime)
end
if math.deg(yaw) > 360 then
yaw=yaw%360
yaw=math.rad(math.deg(yaw)%360)
elseif math.deg(yaw) < 0 then
yaw=((360*5)-yaw)%360
yaw=math.rad(((360*5)-math.deg(yaw))%360)
end
--calculate the shortest way to turn to find our target
@ -353,7 +353,7 @@ function mob_class:set_yaw(yaw, delay, dtime)
ddtime = dtime
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)))
if self.acc then
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,
walk_start = 0, walk_end = 40, walk_speed = 30,
run_start = 0, run_end = 40, run_speed = 40,
eat_start = 40, eat_end = 80, eat_loop = false,
},
child_animations = {
stand_start = 81, stand_end = 81,
walk_start = 81, walk_end = 121, walk_speed = 45,
run_start = 81, run_end = 121, run_speed = 60,
eat_start = 121, eat_start = 161, eat_loop = false,
},
follow = { "mcl_farming:wheat_item" },
view_range = 12,
-- Eat grass
replace_rate = 20,
replace_rate = 80,
replace_delay = 1.3,
replace_what = {
{ "mcl_core:dirt_with_grass", "mcl_core:dirt", -1 },
{ "mcl_flowers:tallgrass", "air", 0 },
},
-- Properly regrow wool after eating grass
on_replace = function(self, pos, oldnode, newnode)
if not self.color or not colors[self.color] then
self.color = "unicolor_white"
end
self.gotten = false
self.base_texture = sheep_texture(self.color)
self.object:set_properties({ textures = self.base_texture })
self.drops = {
{name = "mcl_mobitems:mutton",
chance = 1,
min = 1,
max = 2,},
{name = colors[self.color][1],
chance = 1,
min = 1,
max = 1,},
}
self.state = "eat"
self:set_animation("eat")
self:set_velocity(0)
minetest.after(self.replace_delay, function()
if self and self.object and self.object:get_velocity() and self.health > 0 then
self.object:set_velocity(vector.zero())
if not self.color or not colors[self.color] then
self.color = "unicolor_white"
end
self.gotten = false
self.base_texture = sheep_texture(self.color)
self.object:set_properties({ textures = self.base_texture })
end
end)
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,
-- Set random color on spawn
@ -226,12 +232,6 @@ mcl_mobs.register_mob("mobs_mc:sheep", {
item:add_wear(mobs_mc.shears_wear)
clicker:get_inventory():set_stack("main", clicker:get_wield_index(), item)
end
self.drops = {
{name = "mcl_mobitems:mutton",
chance = 1,
min = 1,
max = 2,},
}
return
end
-- Dye sheep