mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-12-23 00:19:32 +01:00
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:
commit
47f64f63a3
5 changed files with 42 additions and 35 deletions
|
@ -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]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
Binary file not shown.
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue