Spawning: Find entrance doors to building.
This commit is contained in:
parent
7169035783
commit
55c6146e94
@ -181,7 +181,7 @@ end
|
|||||||
-- for the pathfinding algorithm to use
|
-- for the pathfinding algorithm to use
|
||||||
function pathfinder.find_start_and_end_pos(map)
|
function pathfinder.find_start_and_end_pos(map)
|
||||||
-- This is for debug
|
-- This is for debug
|
||||||
print_map(map)
|
--print_map(map)
|
||||||
local result = {}
|
local result = {}
|
||||||
for z,row in pairs(map) do
|
for z,row in pairs(map) do
|
||||||
for x,node in pairs(row) do
|
for x,node in pairs(row) do
|
||||||
|
@ -140,24 +140,30 @@ function npc.places.find_entrance_from_openable_nodes(openable_nodes, marker_pos
|
|||||||
local result = nil
|
local result = nil
|
||||||
local min = 100
|
local min = 100
|
||||||
|
|
||||||
|
|
||||||
for i = 1, #openable_nodes do
|
for i = 1, #openable_nodes do
|
||||||
|
|
||||||
local open_pos = openable_nodes[i].node_pos
|
local open_pos = openable_nodes[i].node_pos
|
||||||
|
|
||||||
-- Get node name - check if this node is a 'door'. The way to check
|
-- Get node name - check if this node is a 'door'. The way to check
|
||||||
-- is by explicitly checking for 'door' string
|
-- is by explicitly checking for 'door' string
|
||||||
local name = minetest.get_node(open_pos).name
|
local name = minetest.get_node(open_pos).name
|
||||||
local start_i, end_i = string.find(name, "door")
|
local start_i, end_i = string.find(name, "door")
|
||||||
|
|
||||||
if start_i ~= nil then
|
if start_i ~= nil then
|
||||||
-- Define start and end pos
|
-- Define start and end pos
|
||||||
local start_pos, end_pos = open_pos, marker_pos
|
local start_pos = {x=open_pos.x, y=open_pos.y, z=open_pos.z}
|
||||||
-- Check if there's any difference in vertical position
|
local end_pos = {x=marker_pos.x, y=marker_pos.y, z=marker_pos.z}
|
||||||
minetest.log("Openable node pos: "..minetest.pos_to_string(open_pos))
|
|
||||||
minetest.log("Plotmarker node pos: "..minetest.pos_to_string(marker_pos))
|
|
||||||
|
|
||||||
if open_pos.y ~= marker_pos.y then
|
-- Check if there's any difference in vertical position
|
||||||
|
-- minetest.log("Openable node pos: "..minetest.pos_to_string(open_pos))
|
||||||
|
-- minetest.log("Plotmarker node pos: "..minetest.pos_to_string(marker_pos))
|
||||||
|
if start_pos.y ~= end_pos.y then
|
||||||
-- Adjust to make pathfinder find nodes one node above
|
-- Adjust to make pathfinder find nodes one node above
|
||||||
start_pos.y = marker_pos.y
|
end_pos.y = start_pos.y
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- This adjustment allows the map to be created correctly
|
||||||
start_pos.y = start_pos.y + 1
|
start_pos.y = start_pos.y + 1
|
||||||
end_pos.y = end_pos.y + 1
|
end_pos.y = end_pos.y + 1
|
||||||
|
|
||||||
@ -170,8 +176,26 @@ function npc.places.find_entrance_from_openable_nodes(openable_nodes, marker_pos
|
|||||||
-- Set min to path length and the result to the currently found node
|
-- Set min to path length and the result to the currently found node
|
||||||
min = #path
|
min = #path
|
||||||
result = openable_nodes[i]
|
result = openable_nodes[i]
|
||||||
|
else
|
||||||
|
-- Specific check to prefer mtg's doors to cottages' doors.
|
||||||
|
-- The reason? Sometimes a cottages' door could be closer to the
|
||||||
|
-- plotmarker, but not being the building entrance. MTG doors
|
||||||
|
-- are usually the entrance... so yes, hackity hack.
|
||||||
|
-- Get the name of the currently mininum-distance door
|
||||||
|
min_node_name = minetest.get_node(result.node_pos).name
|
||||||
|
-- Check if this is a door from MTG's doors.
|
||||||
|
local doors_st, doors_en = string.find(name, "doors:")
|
||||||
|
-- Check if min-distance door is a cottages door
|
||||||
|
-- while we have a MTG door
|
||||||
|
if min_node_name == "cottages:half_door" and doors_st ~= nil then
|
||||||
|
minetest.log("Assigned new door...")
|
||||||
|
min = #path
|
||||||
|
result = openable_nodes[i]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
minetest.log("Path not found to marker from "..minetest.pos_to_string(start_pos))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
-- Return result
|
-- Return result
|
||||||
|
@ -67,6 +67,11 @@ npc.spawner.spawn_data = {
|
|||||||
-- Scanning functions
|
-- Scanning functions
|
||||||
---------------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function spawner.filter_first_floor_nodes(nodes)
|
||||||
|
local result = {}
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
-- Creates an array of {pos=<node_pos>, owner=''} for managing
|
-- Creates an array of {pos=<node_pos>, owner=''} for managing
|
||||||
-- which NPC owns what
|
-- which NPC owns what
|
||||||
function spawner.get_nodes_by_type(start_pos, end_pos, type)
|
function spawner.get_nodes_by_type(start_pos, end_pos, type)
|
||||||
|
Loading…
Reference in New Issue
Block a user