parent
3457fc39f3
commit
1fded82c2e
|
@ -19,6 +19,7 @@ minetest.register_tool("pmb_tools:wooden_pickaxe", {
|
|||
uses = 32,
|
||||
},
|
||||
},
|
||||
damage_groups = { fleshy = 1, cracky = 1},
|
||||
},
|
||||
groups = { pickaxe = 1 },
|
||||
})
|
||||
|
@ -34,6 +35,7 @@ minetest.register_tool("pmb_tools:wooden_axe", {
|
|||
uses = 32,
|
||||
},
|
||||
},
|
||||
damage_groups = { fleshy = 1, choppy = 1},
|
||||
},
|
||||
groups = { axe = 1 },
|
||||
})
|
||||
|
@ -49,6 +51,7 @@ minetest.register_tool("pmb_tools:wooden_shovel", {
|
|||
uses = 32,
|
||||
},
|
||||
},
|
||||
damage_groups = { fleshy = 1, crumbly = 1},
|
||||
},
|
||||
groups = { shovel = 1 },
|
||||
})
|
||||
|
@ -67,6 +70,7 @@ minetest.register_tool("pmb_tools:stone_pickaxe", {
|
|||
uses = 64,
|
||||
},
|
||||
},
|
||||
damage_groups = { fleshy = 1, cracky = 2},
|
||||
},
|
||||
groups = { pickaxe = 2 },
|
||||
})
|
||||
|
@ -81,6 +85,7 @@ minetest.register_tool("pmb_tools:stone_axe", {
|
|||
uses = 64,
|
||||
},
|
||||
},
|
||||
damage_groups = { fleshy = 2, choppy = 2},
|
||||
},
|
||||
groups = { axe = 2 },
|
||||
})
|
||||
|
@ -95,6 +100,7 @@ minetest.register_tool("pmb_tools:stone_shovel", {
|
|||
uses = 64,
|
||||
},
|
||||
},
|
||||
damage_groups = { fleshy = 1, crumbly = 2},
|
||||
},
|
||||
groups = { shovel = 2 },
|
||||
})
|
||||
|
@ -113,6 +119,7 @@ minetest.register_tool("pmb_tools:iron_pickaxe", {
|
|||
uses = 192,
|
||||
},
|
||||
},
|
||||
damage_groups = { fleshy = 2, cracky = 3},
|
||||
},
|
||||
groups = { pickaxe = 3 },
|
||||
})
|
||||
|
@ -127,6 +134,7 @@ minetest.register_tool("pmb_tools:iron_axe", {
|
|||
uses = 192,
|
||||
},
|
||||
},
|
||||
damage_groups = { fleshy = 3, choppy = 3},
|
||||
},
|
||||
groups = { axe = 3 },
|
||||
})
|
||||
|
@ -141,6 +149,7 @@ minetest.register_tool("pmb_tools:iron_shovel", {
|
|||
uses = 192,
|
||||
},
|
||||
},
|
||||
damage_groups = { fleshy = 2, crumbly = 3},
|
||||
},
|
||||
groups = { shovel = 3 },
|
||||
})
|
||||
|
@ -159,6 +168,7 @@ minetest.register_tool("pmb_tools:bronze_pickaxe", {
|
|||
uses = 128,
|
||||
},
|
||||
},
|
||||
damage_groups = { fleshy = 2, cracky = 3},
|
||||
},
|
||||
groups = { pickaxe = 3 },
|
||||
})
|
||||
|
@ -173,6 +183,7 @@ minetest.register_tool("pmb_tools:bronze_axe", {
|
|||
uses = 128,
|
||||
},
|
||||
},
|
||||
damage_groups = { fleshy = 3, choppy = 3},
|
||||
},
|
||||
groups = { axe = 3 },
|
||||
})
|
||||
|
@ -187,6 +198,7 @@ minetest.register_tool("pmb_tools:bronze_shovel", {
|
|||
uses = 128,
|
||||
},
|
||||
},
|
||||
damage_groups = { fleshy = 2, crumbly = 3},
|
||||
},
|
||||
groups = { shovel = 3 },
|
||||
})
|
||||
|
@ -205,6 +217,7 @@ minetest.register_tool("pmb_tools:diamond_pickaxe", {
|
|||
uses = 1024,
|
||||
},
|
||||
},
|
||||
damage_groups = { fleshy = 2, cracky = 4},
|
||||
},
|
||||
groups = { pickaxe = 4 },
|
||||
})
|
||||
|
@ -219,6 +232,7 @@ minetest.register_tool("pmb_tools:diamond_axe", {
|
|||
uses = 1024,
|
||||
},
|
||||
},
|
||||
damage_groups = { fleshy = 4, choppy = 4},
|
||||
},
|
||||
groups = { axe = 4 },
|
||||
})
|
||||
|
@ -233,6 +247,7 @@ minetest.register_tool("pmb_tools:diamond_shovel", {
|
|||
uses = 1024,
|
||||
},
|
||||
},
|
||||
damage_groups = { fleshy = 2, crumbly = 4},
|
||||
},
|
||||
groups = { shovel = 4 },
|
||||
})
|
||||
|
|
|
@ -36,13 +36,49 @@ end
|
|||
-- prev_pos = vector,
|
||||
-- cost = float,
|
||||
-- }
|
||||
local function astar(s_pos, e_pos, min_cost, max_tries, max_queue)
|
||||
local function astar(s_pos, e_pos, min_cost, max_tries, max_queue, valid_node)
|
||||
if not max_tries then
|
||||
max_tries = 500
|
||||
end
|
||||
if not max_queue then
|
||||
max_queue = 1000
|
||||
end
|
||||
if not valid_node then
|
||||
function valid_node(nodepos, frompos)
|
||||
local offset = vector.subtract(nodepos, frompos)
|
||||
if offset.x==0 and offset.z==0 then
|
||||
return false
|
||||
end
|
||||
local node = minetest.get_node(nodepos)
|
||||
local nodedef = minetest.registered_nodes[node.name]
|
||||
if nodedef.walkable then
|
||||
return false
|
||||
end
|
||||
node = minetest.get_node(vector.offset(nodepos, 0, -1, 0))
|
||||
nodedef = minetest.registered_nodes[node.name]
|
||||
if not nodedef.walkable then
|
||||
return false
|
||||
end
|
||||
node = minetest.get_node(vector.offset(nodepos, 0, 1, 0))
|
||||
nodedef = minetest.registered_nodes[node.name]
|
||||
if nodedef.walkable then
|
||||
return false
|
||||
end
|
||||
if offset.x ~= 0 and offset.z ~= 0 then
|
||||
node = minetest.get_node(vector.offset(nodepos, -offset.x, 0, 0))
|
||||
nodedef = minetest.registered_nodes[node.name]
|
||||
if nodedef.walkable then
|
||||
return false
|
||||
end
|
||||
node = minetest.get_node(vector.offset(nodepos, 0, 0, -offset.z))
|
||||
nodedef = minetest.registered_nodes[node.name]
|
||||
if nodedef.walkable then
|
||||
return false
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
end
|
||||
if not min_cost then
|
||||
function min_cost(pos1, pos2)
|
||||
return vector.distance(pos1, pos2)
|
||||
|
@ -67,19 +103,10 @@ local function astar(s_pos, e_pos, min_cost, max_tries, max_queue)
|
|||
for dx = -1, 1 do
|
||||
for dy = -1, 1 do
|
||||
for dz = -1, 1 do
|
||||
if dx == 0 and dz == 0 then
|
||||
break
|
||||
end
|
||||
local nodepos = vector.offset(from.pos, dx, dy, dz)
|
||||
local node = minetest.get_node(nodepos)
|
||||
local nodedef = minetest.registered_nodes[node.name]
|
||||
if not nodedef.walkable then
|
||||
node = minetest.get_node(vector.offset(nodepos, 0, -1, 0))
|
||||
nodedef = minetest.registered_nodes[node.name]
|
||||
if nodedef.walkable then
|
||||
table.insert(to_add,
|
||||
{ pos = nodepos, prev_pos = from, cost = from.cost + min_cost(from.pos, nodepos) })
|
||||
end
|
||||
if valid_node(nodepos, from.pos) then
|
||||
table.insert(to_add,
|
||||
{ pos = nodepos, prev_pos = from, cost = from.cost + min_cost(from.pos, nodepos) })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -143,34 +170,44 @@ function pmb_entity_api.get_default_movement(callable)
|
|||
if not self._pmb_last_pos then
|
||||
self._pmb_last_pos = p
|
||||
end
|
||||
|
||||
if not self._pmb_stuck_timer then
|
||||
self._pmb_stuck_timer = 0
|
||||
end
|
||||
if vector.distance(self._pmb_last_pos, p) < 0.02 then
|
||||
if min_cost_2d(self._pmb_last_pos, p) < 0.02 then
|
||||
self._pmb_stuck_timer = self._pmb_stuck_timer + 1
|
||||
--minetest.log(tostring(self._pmb_stuck_timer))
|
||||
else
|
||||
self._pmb_stuck_timer = 0
|
||||
end
|
||||
if self._pmb_stuck_timer > 20 then
|
||||
if self._pmb_stuck_timer > 70 then
|
||||
self._pmb_path = nil
|
||||
self._pmb_stuck_timer = 0
|
||||
end
|
||||
if not self._pmb_path or table.maxn(self._pmb_path) == 0 then
|
||||
|
||||
if not self._pmb_path_timer then
|
||||
self._pmb_path_timer = 0
|
||||
end
|
||||
self._pmb_path_timer = self._pmb_path_timer + 1
|
||||
|
||||
if (not self._pmb_path or table.maxn(self._pmb_path) == 0) and self._pmb_path_timer > 70 then
|
||||
--local ang = math.random()*6.28
|
||||
minetest.log("new path")
|
||||
local wander_pos = self._pmb_follow:get_pos()
|
||||
self._pmb_path = astar(p, wander_pos, nil, nil)
|
||||
self._pmb_path_timer = 0
|
||||
end
|
||||
|
||||
local last_vel = self.object:get_velocity()
|
||||
self.object:set_velocity(vector.offset(last_vel, 0, -12*dtime, 0))
|
||||
if table.maxn(self._pmb_path) == 0 then
|
||||
self.object:set_velocity(vector.offset(last_vel, 0, -12 * dtime, 0))
|
||||
|
||||
if not self._pmb_path or table.maxn(self._pmb_path) == 0 then
|
||||
return
|
||||
end
|
||||
if min_cost_2d(p, self._pmb_path[1]) < 1 then
|
||||
if min_cost_2d(p, self._pmb_path[1]) < 1.2 then
|
||||
table.remove(self._pmb_path, 1)
|
||||
end
|
||||
if table.maxn(self._pmb_path) == 0 then
|
||||
self.object:set_velocity(vector.new(0, last_vel.y, 0))
|
||||
return
|
||||
end
|
||||
local next_pos = self._pmb_path[1]
|
||||
|
|
|
@ -2,13 +2,14 @@ minetest.register_entity("pmb_entity_base:base", {
|
|||
initial_properties = {
|
||||
visual = "mesh",
|
||||
mesh = "humanoid.b3d",
|
||||
stepheight = 1,
|
||||
hp_max = 3,
|
||||
physical = true,
|
||||
},
|
||||
on_step = pmb_entity_api.get_default_movement(function()
|
||||
--minetest.log("tick")
|
||||
end),
|
||||
physical = true,
|
||||
stepheight = 1.1,
|
||||
_pmb_speed = 3,
|
||||
_pmb_speed = 2,
|
||||
})
|
||||
|
||||
minetest.register_craftitem("pmb_entity_base:base_spawn",
|
||||
|
|
Loading…
Reference in New Issue