poking at swimming code
master
Izzy 2019-07-29 09:46:32 -06:00
parent db0afa6a4c
commit bce6663d18
4 changed files with 123 additions and 12 deletions

View File

@ -66,10 +66,12 @@ local function animal_step(self, dtime)
local rpos = vector.round(pos)
if not vector.equals(self.last_rpos, rpos) then
if not self.node_here or not self.node_below or not vector.equals(self.last_rpos, rpos) then
local here = minetest.get_node({x=rpos.x, y=rpos.y, z=rpos.z})
local below = minetest.get_node({x=rpos.x, y=rpos.y-2, z=rpos.z})
self.node_here = here.name
self.node_below = below.name
-- print("below: ".. self.node_below)
@ -83,13 +85,24 @@ local function animal_step(self, dtime)
-- TODO: floating
local bdef = minetest.registered_nodes[self.node_below]
if minetest.registered_nodes[self.node_below].climbable then
if minetest.registered_nodes[self.node_here].drawtype == "liquid" then
-- print("in liquid")
self.object:setacceleration({ -- float
x = 0,
y = 1,
z = 0
})
elseif bdef.climbable or bdef.drawtype == "liquid" then
self.object:setacceleration({
x = 0,
y = 0,
z = 0
})
local v = self.object:getvelocity()
self.object:setvelocity({x=v.x, y=0, z=v.z})
else
self.object:setacceleration({
x = 0,
@ -492,9 +505,16 @@ function mobehavior:register_mob_fast(name, def)
if not self.health or self.health == 0 then
self.health = math.random(self.hp_min, self.hp_max)
end
self.object:set_hp(self.health)
self.object:set_armor_groups({fleshy = self.armor})
if type(self.armor) == "table" then
self.object:set_armor_groups(self.armor)
else
self.object:set_armor_groups({fleshy = self.armor})
end
self.old_y = self.object:getpos().y
self.object:setyaw(math.random(1, 360) / 180 * math.pi)
-- self.sounds.distance = (self.sounds.distance or 10)

View File

@ -28,7 +28,7 @@ function make_bunny(name, behavior_fn)
floats = 0,
drops = {
{name = "mobehavior:meat_raw", chance = 1, min = 1, max = 2},
{name = "fur:small_pelt", chance = 1, min = 1, max = 1},
{name = "mobehavior:fur_small", chance = 1, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 4,
@ -90,8 +90,8 @@ function make_wolf(name, behavior_fn)
view_range = 25,
floats = 1,
drops = {
{name = "mobehavior:meat_raw", chance = 1, min = 1, max = 1},
{name = "fur:medium_pelt", chance = 1, min = 1, max = 1},
{name = "mobehavior:meat_raw", chance = 1, min = 2, max = 3},
{name = "mobehavior:fur_medium", chance = 1, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 4,
@ -153,8 +153,8 @@ function make_sheep(name, behavior_fn)
view_range = 25,
floats = 1,
drops = {
{name = "mobehavior:meat_raw", chance = 1, min = 1, max = 1},
{name = "fur:medium_pelt", chance = 1, min = 1, max = 1},
{name = "mobehavior:meat_raw", chance = 1, min = 2, max = 3},
{name = "mobehavior:fur_medium", chance = 1, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 4,
@ -217,8 +217,8 @@ function make_bear(name, behavior_fn)
view_range = 25,
floats = 1,
drops = {
{name = "mobehavior:meat_raw",
chance = 1, min = 1, max = 1},
{name = "mobehavior:meat_raw", chance = 1, min = 5, max = 7},
{name = "mobehavior:fur_large", chance = 1, min = 1, max = 1},
},
water_damage = 0,
lava_damage = 4,
@ -328,6 +328,7 @@ function make_deer(name, behavior_fn)
floats = 1,
drops = {
{name = "mobehavior:meat_raw", chance = 1, min = 3, max = 5},
{name = "mobehavior:fur_medium", chance = 1, min = 1, max = 2},
},
water_damage = 0,
lava_damage = 4,
@ -375,6 +376,7 @@ function make_buck(name, behavior_fn)
floats = 1,
drops = {
{name = "mobehavior:meat_raw", chance = 1, min = 3, max = 5},
{name = "mobehavior:fur_medium", chance = 1, min = 1, max = 2},
},
water_damage = 0,
lava_damage = 4,

View File

@ -46,7 +46,7 @@ end
-- new api from scratch
dofile(path.."/api_fast.lua")
dofile(path.."/meat.lua")
dofile(path.."/items.lua")
dofile(path.."/api.lua")
dofile(path.."/behavior.lua")
-- dofile(path.."/simple_api.lua")

89
items.lua Normal file
View File

@ -0,0 +1,89 @@
--[[
traps
cat food dish to keep cats near
]]
minetest.register_craftitem("mobehavior:fur_small", {
description = "Small Fur",
inventory_image = "mobehavior_fur_small.png",
groups = {fur = 1},
})
minetest.register_craftitem("mobehavior:fur_medium", {
description = "Medium Fur",
inventory_image = "mobehavior_fur_medium.png",
groups = {fur = 2},
})
minetest.register_craftitem("mobehavior:fur_large", {
description = "Large Fur",
inventory_image = "mobehavior_fur_large.png",
groups = {fur = 3},
})
minetest.register_craftitem("mobehavior:bone", {
description = "Bone",
inventory_image = "mobehavior_bone.png",
groups = {bone = 1},
})
minetest.register_craftitem("mobehavior:horn", {
description = "Horn",
inventory_image = "mobehavior_horn",
groups = {horn = 1},
})
minetest.register_craftitem("mobehavior:meat", {
description = "Meat (Raw)",
inventory_image = "mobehavior_meat.png",
groups = {meat = 1, raw_meat = 1},
})
minetest.register_craftitem("mobehavior:meat_on_bone", {
description = "Meat (Raw)",
inventory_image = "mobehavior_meat_on_bone.png",
groups = {meat = 1, raw_meat = 1},
})
minetest.register_craftitem("mobehavior:meat_cooked", {
description = "Meat (Cooked)",
inventory_image = "mobehavior_meat_cooked.png",
groups = {meat = 1, cooked_meat = 1},
on_use = minetest.item_eat(2),
})
minetest.register_craftitem("mobehavior:meat_cooked_on_bone", {
description = "Meat (Cooked)",
inventory_image = "mobehavior_meat_cooked_on_bone.png",
groups = {meat = 1, cooked_meat = 1},
on_use = minetest.item_eat(2),
-- TODO: add a bone to inventory after eating
-- TODO: craft to cut meat off bone
})
minetest.register_craftitem("mobehavior:meat_rotten", {
description = "Meat (Rotten)",
inventory_image = "mobehavior_meat_rotten.png",
groups = {meat = 1, rotten_meat = 1},
on_use = minetest.item_eat(-2),
})
minetest.register_craft({
type = 'cooking',
output = "mobehavior:meat_cooked",
recipe = "mobehavior:meat",
cooktime = 10,
})