Add mobs:spawn_child

This commit is contained in:
Wuzzy 2018-05-30 12:56:39 +02:00
parent 940b3748fb
commit b2d9c119ac
4 changed files with 72 additions and 100 deletions

View File

@ -969,52 +969,25 @@ local breed = function(self)
-- custom breed function -- custom breed function
if self.on_breed then if self.on_breed then
-- when false skip going any further -- when false skip going any further
if self.on_breed(self, ent) == false then if self.on_breed(self, ent) == false then
return return
end end
else
effect(pos, 15, "tnt_smoke.png", 1, 2, 2, 15, 5)
end end
local mob = minetest.add_entity(pos, self.name) local child = mobs:spawn_child(pos, self.name)
local ent2 = mob:get_luaentity()
local ent_c = child:get_luaentity()
-- Use parent's texture
local textures = self.base_texture local textures = self.base_texture
child:set_properties({
-- using specific child texture (if found)
if self.child_texture then
textures = self.child_texture[1]
end
-- and resize to half height
mob:set_properties({
textures = textures, textures = textures,
visual_size = {
x = self.base_size.x * .5,
y = self.base_size.y * .5,
},
collisionbox = {
self.base_colbox[1] * .5,
self.base_colbox[2] * .5,
self.base_colbox[3] * .5,
self.base_colbox[4] * .5,
self.base_colbox[5] * .5,
self.base_colbox[6] * .5,
},
selectionbox = {
self.base_selbox[1] * .5,
self.base_selbox[2] * .5,
self.base_selbox[3] * .5,
self.base_selbox[4] * .5,
self.base_selbox[5] * .5,
self.base_selbox[6] * .5,
},
}) })
-- tamed and owned by parents' owner -- tamed and owned by parents' owner
ent2.child = true ent_c.tamed = true
ent2.tamed = true ent_c.owner = self.owner
ent2.owner = self.owner
end) end)
num = 0 num = 0
@ -3907,6 +3880,52 @@ function mobs:feed_tame(self, clicker, feed_count, breed, tame)
return false return false
end end
-- Spawn a child
function mobs:spawn_child(pos, mob_type)
local child = minetest.add_entity(pos, mob_type)
if not child then
return
end
local ent = child:get_luaentity()
effect(pos, 15, "tnt_smoke.png", 1, 2, 2, 15, 5)
ent.child = true
local textures
-- using specific child texture (if found)
if ent.child_texture then
textures = ent.child_texture[1]
end
-- and resize to half height
child:set_properties({
textures = textures,
visual_size = {
x = ent.base_size.x * .5,
y = ent.base_size.y * .5,
},
collisionbox = {
ent.base_colbox[1] * .5,
ent.base_colbox[2] * .5,
ent.base_colbox[3] * .5,
ent.base_colbox[4] * .5,
ent.base_colbox[5] * .5,
ent.base_colbox[6] * .5,
},
selectionbox = {
ent.base_selbox[1] * .5,
ent.base_selbox[2] * .5,
ent.base_selbox[3] * .5,
ent.base_selbox[4] * .5,
ent.base_selbox[5] * .5,
ent.base_selbox[6] * .5,
},
})
return child
end
-- DISABLED IN MCL2 -- DISABLED IN MCL2
--[=[ --[=[

View File

@ -361,6 +361,16 @@ true the mob will not spawn.
'name' is the name of the animal/monster 'name' is the name of the animal/monster
MineClone 2 extensions
----------------------
mobs:spawn_child(pos, mob_type)
This function spawns a mob as a child. The parameter mob_type is the
entitystring of the new mob.
This function returns the mob on success and nil otherwise.
Making Arrows Making Arrows
------------- -------------

View File

@ -253,37 +253,9 @@ local horse = {
on_breed = function(parent1, parent2) on_breed = function(parent1, parent2)
local pos = parent1.object:get_pos() local pos = parent1.object:get_pos()
local mob = minetest.add_entity(pos, parent1.name) if mobs:spawn_child(pos, parent1.name) then
return false
-- resize to half height end
mob:set_properties({
visual_size = {
x = parent1.base_size.x * .5,
y = parent1.base_size.y * .5,
},
collisionbox = {
parent1.base_colbox[1] * .5,
parent1.base_colbox[2] * .5,
parent1.base_colbox[3] * .5,
parent1.base_colbox[4] * .5,
parent1.base_colbox[5] * .5,
parent1.base_colbox[6] * .5,
},
selectionbox = {
parent1.base_selbox[1] * .5,
parent1.base_selbox[2] * .5,
parent1.base_selbox[3] * .5,
parent1.base_selbox[4] * .5,
parent1.base_selbox[5] * .5,
parent1.base_selbox[6] * .5,
},
})
local ent = mob:get_luaentity()
-- tamed and owned by parents' owner
ent.child = true
ent.tamed = true
ent.owner = parent1.owner
return false
end, end,
} }

View File

@ -171,38 +171,9 @@ mobs:register_mob("mobs_mc:pig", {
on_breed = function(parent1, parent2) on_breed = function(parent1, parent2)
local pos = parent1.object:get_pos() local pos = parent1.object:get_pos()
local mob = minetest.add_entity(pos, parent1.name) if mobs:spawn_child(pos, parent1.name) then
return false
-- resize to half height end
mob:set_properties({
visual_size = {
x = parent1.base_size.x * .5,
y = parent1.base_size.y * .5,
},
collisionbox = {
parent1.base_colbox[1] * .5,
parent1.base_colbox[2] * .5,
parent1.base_colbox[3] * .5,
parent1.base_colbox[4] * .5,
parent1.base_colbox[5] * .5,
parent1.base_colbox[6] * .5,
},
selectionbox = {
parent1.base_selbox[1] * .5,
parent1.base_selbox[2] * .5,
parent1.base_selbox[3] * .5,
parent1.base_selbox[4] * .5,
parent1.base_selbox[5] * .5,
parent1.base_selbox[6] * .5,
},
})
local ent = mob:get_luaentity()
-- tamed and owned by parents' owner
ent.child = true
ent.tamed = true
ent.owner = parent1.owner
return false
end, end,
}) })