forked from minetest-mods/nether
Add facedir support to Portals API
Portal shematics include facedir information for when new portals are spawned using frame nodes that are facedir or colorfacedir
This commit is contained in:
parent
7939161535
commit
e113db1478
@ -113,9 +113,23 @@ metadata).
|
|||||||
|
|
||||||
]]
|
]]
|
||||||
|
|
||||||
local __ = {name = "air", prob = 0}
|
local facedir_up, facedir_north, facedir_south, facedir_east, facedir_west, facedir_down = 0, 4, 8, 12, 16, 20
|
||||||
local AA = {name = "air", prob = 255, force_place = true}
|
|
||||||
local OO = {name = "default:obsidian", prob = 255, force_place = true}
|
local __ = {name = "air", prob = 0}
|
||||||
|
local AA = {name = "air", prob = 255, force_place = true}
|
||||||
|
local ON = {name = "default:obsidian", facedir = facedir_north + 0, prob = 255, force_place = true}
|
||||||
|
local ON2 = {name = "default:obsidian", facedir = facedir_north + 1, prob = 255, force_place = true}
|
||||||
|
local ON3 = {name = "default:obsidian", facedir = facedir_north + 2, prob = 255, force_place = true}
|
||||||
|
local ON4 = {name = "default:obsidian", facedir = facedir_north + 3, prob = 255, force_place = true}
|
||||||
|
local OS = {name = "default:obsidian", facedir = facedir_south, prob = 255, force_place = true}
|
||||||
|
local OE = {name = "default:obsidian", facedir = facedir_east, prob = 255, force_place = true}
|
||||||
|
local OW = {name = "default:obsidian", facedir = facedir_west, prob = 255, force_place = true}
|
||||||
|
local OU = {name = "default:obsidian", facedir = facedir_up + 0, prob = 255, force_place = true}
|
||||||
|
local OU2 = {name = "default:obsidian", facedir = facedir_up + 1, prob = 255, force_place = true}
|
||||||
|
local OU3 = {name = "default:obsidian", facedir = facedir_up + 2, prob = 255, force_place = true}
|
||||||
|
local OU4 = {name = "default:obsidian", facedir = facedir_up + 3, prob = 255, force_place = true}
|
||||||
|
local OD = {name = "default:obsidian", facedir = facedir_down, prob = 255, force_place = true}
|
||||||
|
local facedirNodeList = {ON, ON2, ON3, ON4, OS, OE, OW, OU, OU2, OU3, OU4, OD} -- a list of node references which should have their facedir value copied into param2 before placing a schematic
|
||||||
|
|
||||||
-- This object defines a portal's shape, segregating the shape logic code from portal behaviour code.
|
-- This object defines a portal's shape, segregating the shape logic code from portal behaviour code.
|
||||||
-- You can create a new "PortalShape" definition object which implements the same
|
-- You can create a new "PortalShape" definition object which implements the same
|
||||||
@ -286,11 +300,11 @@ nether.PortalShape_Traditional = {
|
|||||||
AA,AA,AA,AA,
|
AA,AA,AA,AA,
|
||||||
AA,AA,AA,AA,
|
AA,AA,AA,AA,
|
||||||
|
|
||||||
OO,OO,OO,OO,
|
ON,OW,OE,ON2,
|
||||||
OO,AA,AA,OO,
|
OU,AA,AA,OU,
|
||||||
OO,AA,AA,OO,
|
OU,AA,AA,OU,
|
||||||
OO,AA,AA,OO,
|
OU,AA,AA,OU,
|
||||||
OO,OO,OO,OO,
|
ON4,OE,OW,ON3,
|
||||||
|
|
||||||
__,__,__,__,
|
__,__,__,__,
|
||||||
AA,AA,AA,AA,
|
AA,AA,AA,AA,
|
||||||
@ -303,7 +317,8 @@ nether.PortalShape_Traditional = {
|
|||||||
AA,AA,AA,AA,
|
AA,AA,AA,AA,
|
||||||
AA,AA,AA,AA,
|
AA,AA,AA,AA,
|
||||||
AA,AA,AA,AA,
|
AA,AA,AA,AA,
|
||||||
}
|
},
|
||||||
|
facedirNodes = facedirNodeList
|
||||||
}
|
}
|
||||||
} -- End of PortalShape_Traditional class
|
} -- End of PortalShape_Traditional class
|
||||||
|
|
||||||
@ -466,13 +481,13 @@ nether.PortalShape_Circular = {
|
|||||||
__,AA,AA,AA,AA,AA,__,
|
__,AA,AA,AA,AA,AA,__,
|
||||||
__,__,AA,AA,AA,__,__,
|
__,__,AA,AA,AA,__,__,
|
||||||
|
|
||||||
__,__,OO,OO,OO,__,__,
|
__,__,OW,OW,OW,__,__,
|
||||||
__,OO,AA,AA,AA,OO,__,
|
__,ON,AA,AA,AA,ON2,__,
|
||||||
OO,AA,AA,AA,AA,AA,OO,
|
OU,AA,AA,AA,AA,AA,OD,
|
||||||
OO,AA,AA,AA,AA,AA,OO,
|
OU,AA,AA,AA,AA,AA,OD,
|
||||||
OO,AA,AA,AA,AA,AA,OO,
|
OU,AA,AA,AA,AA,AA,OD,
|
||||||
__,OO,AA,AA,AA,OO,__,
|
__,ON4,AA,AA,AA,ON3,__,
|
||||||
__,__,OO,OO,OO,__,__,
|
__,__,OE,OE,OE,__,__,
|
||||||
|
|
||||||
__,__,__,__,__,__,__,
|
__,__,__,__,__,__,__,
|
||||||
__,AA,AA,AA,AA,AA,__,
|
__,AA,AA,AA,AA,AA,__,
|
||||||
@ -497,7 +512,8 @@ nether.PortalShape_Circular = {
|
|||||||
__,__,AA,AA,AA,__,__,
|
__,__,AA,AA,AA,__,__,
|
||||||
__,__,__,__,__,__,__,
|
__,__,__,__,__,__,__,
|
||||||
__,__,__,__,__,__,__,
|
__,__,__,__,__,__,__,
|
||||||
}
|
},
|
||||||
|
facedirNodes = facedirNodeList
|
||||||
}
|
}
|
||||||
} -- End of PortalShape_Circular class
|
} -- End of PortalShape_Circular class
|
||||||
|
|
||||||
@ -597,35 +613,36 @@ nether.PortalShape_Platform = {
|
|||||||
size = {x = 5, y = 5, z = 5},
|
size = {x = 5, y = 5, z = 5},
|
||||||
data = { -- note that data is upside down
|
data = { -- note that data is upside down
|
||||||
__,__,__,__,__,
|
__,__,__,__,__,
|
||||||
OO,OO,OO,OO,OO,
|
OU4,OW,OW,OW,OU3,
|
||||||
__,AA,AA,AA,__,
|
__,AA,AA,AA,__,
|
||||||
__,AA,AA,AA,__,
|
__,AA,AA,AA,__,
|
||||||
__,__,__,__,__,
|
__,__,__,__,__,
|
||||||
|
|
||||||
__,OO,OO,OO,__,
|
__,OU4,OW,OU3,__,
|
||||||
OO,AA,AA,AA,OO,
|
ON,AA,AA,AA,OS,
|
||||||
AA,AA,AA,AA,AA,
|
AA,AA,AA,AA,AA,
|
||||||
AA,AA,AA,AA,AA,
|
AA,AA,AA,AA,AA,
|
||||||
__,AA,AA,AA,__,
|
__,AA,AA,AA,__,
|
||||||
|
|
||||||
__,OO,OO,OO,__,
|
__,ON,OD,OS,__,
|
||||||
OO,AA,AA,AA,OO,
|
ON,AA,AA,AA,OS,
|
||||||
AA,AA,AA,AA,AA,
|
AA,AA,AA,AA,AA,
|
||||||
AA,AA,AA,AA,AA,
|
AA,AA,AA,AA,AA,
|
||||||
__,AA,AA,AA,__,
|
__,AA,AA,AA,__,
|
||||||
|
|
||||||
__,OO,OO,OO,__,
|
__,OU,OE,OU2,__,
|
||||||
OO,AA,AA,AA,OO,
|
ON,AA,AA,AA,OS,
|
||||||
AA,AA,AA,AA,AA,
|
AA,AA,AA,AA,AA,
|
||||||
AA,AA,AA,AA,AA,
|
AA,AA,AA,AA,AA,
|
||||||
__,AA,AA,AA,__,
|
__,AA,AA,AA,__,
|
||||||
|
|
||||||
__,__,__,__,__,
|
__,__,__,__,__,
|
||||||
OO,OO,OO,OO,OO,
|
OU,OE,OE,OE,OU2,
|
||||||
__,AA,AA,AA,__,
|
__,AA,AA,AA,__,
|
||||||
__,AA,AA,AA,__,
|
__,AA,AA,AA,__,
|
||||||
__,__,__,__,__,
|
__,__,__,__,__,
|
||||||
}
|
},
|
||||||
|
facedirNodes = facedirNodeList
|
||||||
}
|
}
|
||||||
} -- End of PortalShape_Platform class
|
} -- End of PortalShape_Platform class
|
||||||
|
|
||||||
@ -1137,8 +1154,27 @@ local function is_within_portal_frame(portal_definition, pos)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- sets param2 values in the schematic to match facedir values, or 0 if the portalframe-nodedef doesn't use facedir
|
||||||
|
local function set_schematic_param2(schematic_table, frame_node_name)
|
||||||
|
|
||||||
|
local paramtype2 = minetest.registered_nodes[frame_node_name].paramtype2
|
||||||
|
local isFacedir = paramtype2 == "facedir" or paramtype2 == "colorfacedir"
|
||||||
|
|
||||||
|
if schematic_table.facedirNodes ~= nil then
|
||||||
|
for _, node in ipairs(schematic_table.facedirNodes) do
|
||||||
|
if isFacedir and node.facedir ~= nil then
|
||||||
|
node.param2 = node.facedir
|
||||||
|
else
|
||||||
|
node.param2 = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local function build_portal(portal_definition, anchorPos, orientation, destination_wormholePos)
|
local function build_portal(portal_definition, anchorPos, orientation, destination_wormholePos)
|
||||||
|
|
||||||
|
set_schematic_param2(portal_definition.shape.schematic, portal_definition.frame_node_name)
|
||||||
|
|
||||||
minetest.place_schematic(
|
minetest.place_schematic(
|
||||||
portal_definition.shape.get_schematicPos_from_anchorPos(anchorPos, orientation),
|
portal_definition.shape.get_schematicPos_from_anchorPos(anchorPos, orientation),
|
||||||
portal_definition.shape.schematic,
|
portal_definition.shape.schematic,
|
||||||
|
Loading…
Reference in New Issue
Block a user