initial commit
|
@ -0,0 +1 @@
|
|||
default
|
|
@ -0,0 +1,560 @@
|
|||
--GPLv3, derived from Travelnet by Sokomine
|
||||
local SPEED = 10
|
||||
local ACCEL = 1
|
||||
local VERSION = 5
|
||||
|
||||
local elevator = {
|
||||
motors = {},
|
||||
}
|
||||
local boxes = {}
|
||||
local formspecs = {}
|
||||
local elevator_file = minetest.get_worldpath() .. "/elevator"
|
||||
|
||||
local function load_elevator()
|
||||
local file = io.open(elevator_file)
|
||||
if file then
|
||||
elevator = minetest.deserialize(file:read("*all")) or {}
|
||||
file:close()
|
||||
end
|
||||
end
|
||||
|
||||
local function save_elevator()
|
||||
local f = io.open(elevator_file .. ".tmp", "w")
|
||||
f:write(minetest.serialize(elevator))
|
||||
f:close()
|
||||
os.rename(elevator_file .. ".tmp", elevator_file)
|
||||
end
|
||||
|
||||
load_elevator()
|
||||
|
||||
local function phash(pos)
|
||||
return minetest.pos_to_string(pos)
|
||||
end
|
||||
|
||||
local function locate_motor(pos)
|
||||
local p = vector.new(pos)
|
||||
while true do
|
||||
local node = technic.get_or_load_node(p) or technic.get_or_load_node(p)
|
||||
if node.name == "elevator:elevator_on" or node.name == "elevator:elevator_off" then
|
||||
p.y = p.y + 2
|
||||
elseif node.name == "elevator:shaft" then
|
||||
p.y = p.y + 1
|
||||
elseif node.name == "elevator:motor" then
|
||||
return phash(p)
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function build_motor(hash)
|
||||
local need_saving = false
|
||||
local motor = elevator.motors[hash]
|
||||
if not motor then
|
||||
return
|
||||
end
|
||||
local p = minetest.string_to_pos(hash)
|
||||
local node = technic.get_or_load_node(p) or technic.get_or_load_node(p)
|
||||
if node.name ~= "elevator:motor" then
|
||||
return
|
||||
end
|
||||
p.y = p.y - 1
|
||||
motor.elevators = {}
|
||||
motor.pnames = {}
|
||||
while true do
|
||||
local node = technic.get_or_load_node(p) or technic.get_or_load_node(p)
|
||||
if node.name == "elevator:shaft" then
|
||||
p.y = p.y - 1
|
||||
else
|
||||
p.y = p.y - 1
|
||||
local node = technic.get_or_load_node(p) or technic.get_or_load_node(p)
|
||||
if node.name == "elevator:elevator_on" or node.name == "elevator:elevator_off" then
|
||||
table.insert(motor.elevators, phash(p))
|
||||
table.insert(motor.pnames, tostring(p.y))
|
||||
p.y = p.y - 1
|
||||
need_saving = true
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
for i,m in ipairs(motor.elevators) do
|
||||
local tpnames = {}
|
||||
local pos = minetest.string_to_pos(m)
|
||||
local meta = minetest.get_meta(pos)
|
||||
for ji,jv in ipairs(motor.pnames) do
|
||||
if ji ~= i then
|
||||
table.insert(tpnames, jv)
|
||||
end
|
||||
end
|
||||
meta:set_string("elevator_formspec", "size[3,2]"
|
||||
.."dropdown[0,0;3;target;"..table.concat(tpnames, ",")..";1]"
|
||||
.."button_exit[0,1;3,1;go;Go]")
|
||||
meta:set_int("version", VERSION)
|
||||
if meta:get_string("motor") ~= hash then
|
||||
build_motor(meta:get_string("motor"))
|
||||
end
|
||||
meta:set_string("motor", hash)
|
||||
end
|
||||
if need_saving then
|
||||
save_elevator()
|
||||
end
|
||||
end
|
||||
|
||||
local function unbuild(pos, add)
|
||||
local need_saving = false
|
||||
local p = table.copy(pos)
|
||||
p.y = p.y - 1
|
||||
while true do
|
||||
local node = technic.get_or_load_node(p) or technic.get_or_load_node(p)
|
||||
if node.name == "elevator:shaft" then
|
||||
p.y = p.y - 1
|
||||
else
|
||||
p.y = p.y - 1
|
||||
local node = technic.get_or_load_node(p) or technic.get_or_load_node(p)
|
||||
if node.name == "elevator:elevator_on" or node.name == "elevator:elevator_off" then
|
||||
local meta = minetest.get_meta(p)
|
||||
meta:set_string("motor", "")
|
||||
p.y = p.y - 1
|
||||
else
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
minetest.after(0.01, function(p2)
|
||||
p2.y = p2.y + add
|
||||
build_motor(locate_motor(p2))
|
||||
end, table.copy(pos))
|
||||
end
|
||||
|
||||
minetest.register_node("elevator:motor", {
|
||||
description = "Elevator Motor",
|
||||
tiles = { "technic_wrought_iron_block.png^homedecor_motor.png" },
|
||||
groups = {cracky=1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
after_place_node = function(pos, placer, itemstack)
|
||||
elevator.motors[phash(pos)] = {
|
||||
elevators = {},
|
||||
pnames = {},
|
||||
}
|
||||
save_elevator()
|
||||
build_motor(phash(pos))
|
||||
end,
|
||||
on_destruct = function(pos)
|
||||
if boxes[phash(pos)] then
|
||||
boxes[phash(pos)]:remove()
|
||||
boxes[phash(pos)] = nil
|
||||
end
|
||||
elevator.motors[phash(pos)] = nil
|
||||
save_elevator()
|
||||
end,
|
||||
})
|
||||
|
||||
for _,mode in ipairs({"on", "off"}) do
|
||||
local nodename = "elevator:elevator_"..mode
|
||||
local on = (mode == "on")
|
||||
local box
|
||||
if on then
|
||||
box = {
|
||||
|
||||
{ 0.48, -0.5,-0.5, 0.5, 1.5, 0.5},
|
||||
{-0.5 , -0.5, 0.48, 0.48, 1.5, 0.5},
|
||||
{-0.5, -0.5,-0.5 ,-0.48, 1.5, 0.5},
|
||||
|
||||
--groundplate to stand on
|
||||
{ -0.5,-0.5,-0.5,0.5,-0.48, 0.5},
|
||||
{ -0.5, 1.45,-0.5,0.5, 1.5, 0.5},
|
||||
}
|
||||
else
|
||||
box = {
|
||||
|
||||
{ 0.48, -0.5,-0.5, 0.5, 1.5, 0.5},
|
||||
{-0.5 , -0.5, 0.48, 0.48, 1.5, 0.5},
|
||||
{-0.5, -0.5,-0.5 ,-0.48, 1.5, 0.5},
|
||||
{-0.5 , -0.5, -0.48, 0.5, 1.5, -0.5},
|
||||
--{-0.5 , -0.5, -0.48, -0.4, 1.5, -0.5},
|
||||
--{-0.2 , -0.5, -0.48, -0.1, 1.5, -0.5},
|
||||
--{0.1 , -0.5, -0.48, 0.2, 1.5, -0.5},
|
||||
--{0.4 , -0.5, -0.48, 0.5, 1.5, -0.5},
|
||||
|
||||
--groundplate to stand on
|
||||
{ -0.5,-0.5,-0.5,0.5,-0.48, 0.5},
|
||||
{ -0.5, 1.45,-0.5,0.5, 1.5, 0.5},
|
||||
}
|
||||
end
|
||||
minetest.register_node(nodename, {
|
||||
description = "Elevator",
|
||||
drawtype = (on and "mesh" or "nodebox"),
|
||||
mesh = "travelnet_elevator.obj",
|
||||
--drawtype = "nodebox",
|
||||
sunlight_propagates = false,
|
||||
paramtype = 'light',
|
||||
paramtype2 = "facedir",
|
||||
--wield_scale = {x=0.6, y=0.6, z=0.6},
|
||||
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 }
|
||||
},
|
||||
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = box,
|
||||
},
|
||||
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = box,
|
||||
},
|
||||
|
||||
tiles = on and {
|
||||
"elevator_box.png",
|
||||
"elevator_box.png",
|
||||
"elevator_box.png",
|
||||
"elevator_box.png",
|
||||
"default_steel_block.png",
|
||||
"default_steel_block.png",
|
||||
} or {
|
||||
"elevator_box.png",
|
||||
"elevator_box.png",
|
||||
"elevator_box.png",
|
||||
"elevator_box.png",
|
||||
"elevator_box.png",
|
||||
"elevator_box.png",
|
||||
},
|
||||
--inventory_image = "travelnet_elevator_inv.png",
|
||||
groups = {cracky=1, choppy=1, snappy=1},
|
||||
drop = "elevator:elevator_off",
|
||||
|
||||
light_source = (on and 4 or nil),
|
||||
|
||||
after_place_node = function(pos, placer, itemstack)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_int("version", VERSION)
|
||||
local p = {x=pos.x, y=pos.y+1, z=pos.z}
|
||||
local p2 = minetest.dir_to_facedir(placer:get_look_dir())
|
||||
minetest.set_node(p, {name="homedecor:expansion_placeholder", paramtype2="facedir", param2=p2})
|
||||
local motor = locate_motor(pos)
|
||||
if motor then
|
||||
build_motor(motor)
|
||||
end
|
||||
end,
|
||||
|
||||
after_dig_node = function(pos, node, meta, digger)
|
||||
unbuild(pos, 2)
|
||||
end,
|
||||
|
||||
on_place = function(itemstack, placer, pointed_thing)
|
||||
local pos = pointed_thing.above
|
||||
local node = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z})
|
||||
if( node ~= nil and node.name ~= "air" and node.name ~= 'homedecor:expansion_placeholder') then
|
||||
return
|
||||
end
|
||||
return minetest.item_place(itemstack, placer, pointed_thing);
|
||||
end,
|
||||
|
||||
on_rightclick = function(pos, node, sender)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if on then
|
||||
if vector.distance(sender:get_pos(), pos) > 1 or minetest.get_node(sender:get_pos()).name ~= nodename then
|
||||
minetest.chat_send_player(sender:get_player_name(), "You are not inside the booth.")
|
||||
return
|
||||
end
|
||||
formspecs[sender:get_player_name()] = pos
|
||||
minetest.show_formspec(sender:get_player_name(), "elevator:elevator", meta:get_string("elevator_formspec"))
|
||||
elseif not elevator.motors[meta:get_string("motor")] then
|
||||
minetest.chat_send_player(sender:get_player_name(), "This elevator is inactive.")
|
||||
elseif boxes[meta:get_string("motor")] then
|
||||
minetest.chat_send_player(sender:get_player_name(), "This elevator is in use.")
|
||||
end
|
||||
end,
|
||||
|
||||
on_destruct = function(pos)
|
||||
local p = {x=pos.x, y=pos.y+1, z=pos.z}
|
||||
minetest.remove_node(p)
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_on_player_receive_fields(function(sender, formname, fields)
|
||||
if formname ~= "elevator:elevator" then
|
||||
return
|
||||
end
|
||||
local pos = formspecs[sender:get_player_name()]
|
||||
if not pos then
|
||||
return
|
||||
end
|
||||
if fields.go then
|
||||
local meta = minetest.get_meta(pos)
|
||||
local motorhash = meta:get_string("motor")
|
||||
local motor = elevator.motors[motorhash]
|
||||
if not motor then
|
||||
motorhash = locate_motor(pos)
|
||||
motor = elevator.motors[motorhash]
|
||||
if motor then
|
||||
meta:set_string("motor", "")
|
||||
build_motor(motorhash)
|
||||
minetest.chat_send_player(sender:get_player_name(), "Recalibrated to a new motor, please try again.")
|
||||
return true
|
||||
end
|
||||
end
|
||||
if not motor then
|
||||
minetest.chat_send_player(sender:get_player_name(), "This elevator is not attached to a motor.")
|
||||
return true
|
||||
end
|
||||
local target = nil
|
||||
for i,v in ipairs(motor.pnames) do
|
||||
if v == fields.target then
|
||||
target = minetest.string_to_pos(motor.elevators[i])
|
||||
end
|
||||
end
|
||||
if target then
|
||||
if boxes[motorhash] then
|
||||
minetest.chat_send_player(sender:get_player_name(), "This elevator is in use.")
|
||||
return true
|
||||
end
|
||||
local obj = minetest.add_entity(pos, "elevator:box")
|
||||
obj:set_pos(pos)
|
||||
sender:set_pos(pos)
|
||||
sender:set_attach(obj, "", {x=0, y=0, z=0}, {x=0, y=0, z=0})
|
||||
sender:set_eye_offset({x=0, y=-9, z=0},{x=0, y=-9, z=0})
|
||||
obj:get_luaentity().motor = motorhash
|
||||
obj:get_luaentity().attached = sender:get_player_name()
|
||||
obj:get_luaentity().start = pos
|
||||
obj:get_luaentity().target = target
|
||||
obj:get_luaentity().halfway = {x=pos.x, y=(pos.y+target.y)/2, z=pos.z}
|
||||
obj:get_luaentity().vmult = (target.y < pos.y) and -1 or 1
|
||||
obj:setvelocity({x=0, y=SPEED*obj:get_luaentity().vmult, z=0})
|
||||
obj:setacceleration({x=0, y=ACCEL*obj:get_luaentity().vmult, z=0})
|
||||
boxes[motorhash] = obj
|
||||
else
|
||||
minetest.chat_send_player(sender:get_player_name(), "This target is invalid.")
|
||||
return true
|
||||
end
|
||||
return true
|
||||
end
|
||||
return true
|
||||
end)
|
||||
|
||||
minetest.register_alias("elevator:elevator", "elevator:elevator_off")
|
||||
|
||||
local offabm = function(pos, node)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta:get_int("version") ~= VERSION then
|
||||
minetest.log("action", "[elevator] Updating elevator with old version at "..minetest.pos_to_string(pos))
|
||||
minetest.after(0, function(pos) build_motor(locate_motor(pos)) end, pos)
|
||||
meta:set_int("version", VERSION)
|
||||
meta:set_string("formspec", "")
|
||||
end
|
||||
if not boxes[meta:get_string("motor")] and elevator.motors[meta:get_string("motor")] then
|
||||
node.name = "elevator:elevator_on"
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"elevator:elevator_off"},
|
||||
interval = 1,
|
||||
chance = 1,
|
||||
action = offabm,
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"elevator:elevator_on"},
|
||||
interval = 1,
|
||||
chance = 1,
|
||||
action = function(pos, node)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta:get_int("version") ~= VERSION then
|
||||
minetest.log("action", "[elevator] Updating elevator with old version at "..minetest.pos_to_string(pos))
|
||||
minetest.after(0, function(pos) build_motor(locate_motor(pos)) end, pos)
|
||||
meta:set_int("version", VERSION)
|
||||
meta:set_string("formspec", "")
|
||||
end
|
||||
if boxes[meta:get_string("motor")] or not elevator.motors[meta:get_string("motor")] then
|
||||
node.name = "elevator:elevator_off"
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_node("elevator:shaft", {
|
||||
description = "Elevator Shaft",
|
||||
tiles = { "elevator_shaft.png" },
|
||||
drawtype = "nodebox",
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
groups = {cracky=2, oddly_breakable_by_hand=1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-8/16,-8/16,-8/16,-7/16,8/16,8/16},
|
||||
{7/16,-8/16,-8/16,8/16,8/16,8/16},
|
||||
{-7/16,-8/16,-8/16,7/16,8/16,-7/16},
|
||||
{-7/16,-8/16,8/16,7/16,8/16,7/16},
|
||||
},
|
||||
},
|
||||
collisionbox = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-8/16,-8/16,-8/16,-7/16,8/16,8/16},
|
||||
{7/16,-8/16,-8/16,8/16,8/16,8/16},
|
||||
{-7/16,-8/16,-8/16,7/16,8/16,-7/16},
|
||||
{-7/16,-8/16,8/16,7/16,8/16,7/16},
|
||||
},
|
||||
},
|
||||
after_place_node = function(pos)
|
||||
build_motor(locate_motor(pos))
|
||||
end,
|
||||
on_destruct = function(pos)
|
||||
unbuild(pos, 1)
|
||||
end,
|
||||
})
|
||||
|
||||
local box = {
|
||||
{ 0.48, -0.5,-0.5, 0.5, 1.5, 0.5},
|
||||
{-0.5 , -0.5, 0.48, 0.48, 1.5, 0.5},
|
||||
{-0.5, -0.5,-0.5 ,-0.48, 1.5, 0.5},
|
||||
{-0.5 , -0.5, -0.48, 0.5, 1.5, -0.5},
|
||||
--{-0.5 , -0.5, -0.48, -0.4, 1.5, -0.5},
|
||||
--{-0.2 , -0.5, -0.48, -0.1, 1.5, -0.5},
|
||||
--{0.1 , -0.5, -0.48, 0.2, 1.5, -0.5},
|
||||
--{0.4 , -0.5, -0.48, 0.5, 1.5, -0.5},
|
||||
|
||||
--groundplate to stand on
|
||||
{ -0.5,-0.5,-0.5,0.5,-0.48, 0.5},
|
||||
{ -0.5, 1.45,-0.5,0.5, 1.5, 0.5},
|
||||
}
|
||||
|
||||
minetest.register_node("elevator:elevator_box", {
|
||||
description = "Elevator",
|
||||
drawtype = ("nodebox"),
|
||||
paramtype = 'light',
|
||||
paramtype2 = "facedir",
|
||||
wield_scale = {x=0.6, y=0.6, z=0.6},
|
||||
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 }
|
||||
},
|
||||
|
||||
collision_box = {
|
||||
type = "fixed",
|
||||
fixed = box,
|
||||
},
|
||||
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = box,
|
||||
},
|
||||
|
||||
tiles = {
|
||||
"default_steel_block.png",
|
||||
"default_steel_block.png",
|
||||
"elevator_box.png",
|
||||
"elevator_box.png",
|
||||
"elevator_box.png",
|
||||
"elevator_box.png",
|
||||
},
|
||||
groups = {not_in_creative_inventory = 1},
|
||||
|
||||
light_source = 4,
|
||||
})
|
||||
|
||||
local box_entity = {
|
||||
physical = false,
|
||||
--collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
|
||||
collisionbox = {0,0,0,0,0,0},
|
||||
visual = "wielditem",
|
||||
mesh = "carts_cart.b3d",
|
||||
visual_size = {x=1, y=1},
|
||||
textures = {"elevator:elevator_box"},
|
||||
|
||||
attached = "",
|
||||
motor = false,
|
||||
target = false,
|
||||
|
||||
start = false,
|
||||
lastpos = false,
|
||||
halfway = false,
|
||||
vmult = 0,
|
||||
|
||||
on_activate = function(self)
|
||||
self.object:set_armor_groups({immortal=1})
|
||||
end,
|
||||
|
||||
on_step = function(self, dtime)
|
||||
if not minetest.get_player_by_name(self.attached) then
|
||||
self.object:remove()
|
||||
boxes[self.motor] = nil
|
||||
return
|
||||
end
|
||||
local pos = self.object:getpos()
|
||||
self.lastpos = self.lastpos or pos
|
||||
for y=self.lastpos.y,pos.y,((self.lastpos.y > pos.y) and -1 or 1) do
|
||||
local p = vector.round({x=pos.x, y=y, z=pos.z})
|
||||
--local above = vector.add(p, {x=0,y=1,z=0})
|
||||
local below = vector.add(p, {x=0,y=-1,z=0})
|
||||
local node = technic.get_or_load_node(p) or technic.get_or_load_node(p)
|
||||
if node.name == "elevator:shaft" then
|
||||
-- Nothing
|
||||
elseif node.name == "elevator:elevator_on" or node.name == "elevator:elevator_off" then
|
||||
if vector.distance(p, self.target) < 1 then
|
||||
self.object:remove()
|
||||
minetest.get_player_by_name(self.attached):set_detach()
|
||||
minetest.get_player_by_name(self.attached):set_pos(vector.add(self.target, {x=0, y=-0.4, z=0}))
|
||||
minetest.get_player_by_name(self.attached):set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0})
|
||||
boxes[self.motor] = nil
|
||||
offabm(self.target, node)
|
||||
return
|
||||
end
|
||||
else
|
||||
--local abovenode = technic.get_or_load_node(above) or technic.get_or_load_node(above)
|
||||
local belownode = technic.get_or_load_node(below) or technic.get_or_load_node(below)
|
||||
if belownode.name ~= "elevator:elevator_on" and belownode.name ~= "elevator:elevator_off" then
|
||||
boxes[self.motor] = nil
|
||||
self.object:remove()
|
||||
minetest.get_player_by_name(self.attached):set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0})
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
self.lastpos = pos
|
||||
if vector.distance(pos, self.target) < 32 and self.object:getvelocity().y > SPEED/2 then
|
||||
self.object:setacceleration({x=0, y=((SPEED)*self.vmult*-1), z=0})
|
||||
elseif self.object:getvelocity().y > SPEED and vector.distance(pos, self.target) < math.min(100, vector.distance(pos, self.start)) then
|
||||
self.object:setacceleration({x=0, y=((SPEED/10)*self.vmult*-1), z=0})
|
||||
elseif self.object:getvelocity().y <= SPEED/1.5 then
|
||||
self.object:setacceleration({x=0, y=((SPEED/10)*self.vmult), z=0})
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
minetest.register_entity("elevator:box", box_entity)
|
||||
|
||||
minetest.register_craft({
|
||||
output = "elevator:elevator",
|
||||
recipe = {
|
||||
{"technic:cast_iron_ingot", "chains:chain", "technic:cast_iron_ingot"},
|
||||
{"technic:cast_iron_ingot", "default:mese_crystal", "technic:cast_iron_ingot"},
|
||||
{"technic:stainless_steel_ingot", "default:glass", "technic:stainless_steel_ingot"},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "elevator:shaft",
|
||||
recipe = {
|
||||
{"technic:cast_iron_ingot", "default:glass"},
|
||||
{"default:glass", "homedecor:chainlink_steel"},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "elevator:motor",
|
||||
recipe = {
|
||||
{"default:diamond", "technic:control_logic_unit", "default:diamond"},
|
||||
{"default:steelblock", "technic:motor", "default:steelblock"},
|
||||
{"chains:chain", "default:diamond", "chains:chain"}
|
||||
},
|
||||
})
|
|
@ -0,0 +1,194 @@
|
|||
# Blender v2.76 (sub 0) OBJ File: 'elevator_shaft.blend'
|
||||
# www.blender.org
|
||||
o Cube.011_Cube.002
|
||||
v -0.220327 -0.438894 0.489317
|
||||
v -0.220327 0.511106 0.489317
|
||||
v -0.362827 -0.438894 0.489317
|
||||
v -0.362827 0.511106 0.489317
|
||||
v -0.220327 -0.438894 0.441817
|
||||
v -0.220327 0.511106 0.441817
|
||||
v -0.362827 -0.438894 0.441817
|
||||
v -0.362827 0.511106 0.441817
|
||||
s off
|
||||
f 2 4 3 1
|
||||
f 4 8 7 3
|
||||
f 8 6 5 7
|
||||
f 6 2 1 5
|
||||
f 1 3 7 5
|
||||
f 6 8 4 2
|
||||
o Cube.010_Cube.002
|
||||
v 0.349673 -0.438894 0.489317
|
||||
v 0.349673 0.511106 0.489317
|
||||
v 0.207173 -0.438894 0.489317
|
||||
v 0.207173 0.511106 0.489317
|
||||
v 0.349673 -0.438894 0.441817
|
||||
v 0.349673 0.511106 0.441817
|
||||
v 0.207173 -0.438894 0.441817
|
||||
v 0.207173 0.511106 0.441817
|
||||
s off
|
||||
f 10 12 11 9
|
||||
f 12 16 15 11
|
||||
f 16 14 13 15
|
||||
f 14 10 9 13
|
||||
f 9 11 15 13
|
||||
f 14 16 12 10
|
||||
o Cube.009_Cube.002
|
||||
v 0.349673 -0.438894 -0.460683
|
||||
v 0.349673 0.511106 -0.460683
|
||||
v 0.207173 -0.438894 -0.460683
|
||||
v 0.207173 0.511106 -0.460683
|
||||
v 0.349673 -0.438894 -0.508183
|
||||
v 0.349673 0.511106 -0.508183
|
||||
v 0.207173 -0.438894 -0.508183
|
||||
v 0.207173 0.511106 -0.508183
|
||||
s off
|
||||
f 18 20 19 17
|
||||
f 20 24 23 19
|
||||
f 24 22 21 23
|
||||
f 22 18 17 21
|
||||
f 17 19 23 21
|
||||
f 22 24 20 18
|
||||
o Cube.008_Cube.002
|
||||
v -0.220327 -0.438894 -0.460683
|
||||
v -0.220327 0.511106 -0.460683
|
||||
v -0.362827 -0.438894 -0.460683
|
||||
v -0.362827 0.511106 -0.460683
|
||||
v -0.220327 -0.438894 -0.508183
|
||||
v -0.220327 0.511106 -0.508183
|
||||
v -0.362827 -0.438894 -0.508183
|
||||
v -0.362827 0.511106 -0.508183
|
||||
s off
|
||||
f 26 28 27 25
|
||||
f 28 32 31 27
|
||||
f 32 30 29 31
|
||||
f 30 26 25 29
|
||||
f 25 27 31 29
|
||||
f 30 32 28 26
|
||||
o Cube.007_Cube.002
|
||||
v 0.444673 -0.438894 0.346817
|
||||
v 0.444673 0.511106 0.346817
|
||||
v 0.444673 -0.438894 0.204317
|
||||
v 0.444673 0.511106 0.204317
|
||||
v 0.492173 -0.438894 0.346817
|
||||
v 0.492173 0.511106 0.346817
|
||||
v 0.492173 -0.438894 0.204317
|
||||
v 0.492173 0.511106 0.204317
|
||||
s off
|
||||
f 34 36 35 33
|
||||
f 36 40 39 35
|
||||
f 40 38 37 39
|
||||
f 38 34 33 37
|
||||
f 33 35 39 37
|
||||
f 38 40 36 34
|
||||
o Cube.006_Cube.002
|
||||
v 0.444673 -0.438894 -0.223183
|
||||
v 0.444673 0.511106 -0.223183
|
||||
v 0.444673 -0.438894 -0.365683
|
||||
v 0.444673 0.511106 -0.365683
|
||||
v 0.492173 -0.438894 -0.223183
|
||||
v 0.492173 0.511106 -0.223183
|
||||
v 0.492173 -0.438894 -0.365683
|
||||
v 0.492173 0.511106 -0.365683
|
||||
s off
|
||||
f 42 44 43 41
|
||||
f 44 48 47 43
|
||||
f 48 46 45 47
|
||||
f 46 42 41 45
|
||||
f 41 43 47 45
|
||||
f 46 48 44 42
|
||||
o Cube.005_Cube.002
|
||||
v -0.505327 -0.438894 0.346817
|
||||
v -0.505327 0.511106 0.346817
|
||||
v -0.505327 -0.438894 0.204317
|
||||
v -0.505327 0.511106 0.204317
|
||||
v -0.457827 -0.438894 0.346817
|
||||
v -0.457827 0.511106 0.346817
|
||||
v -0.457827 -0.438894 0.204317
|
||||
v -0.457827 0.511106 0.204317
|
||||
s off
|
||||
f 50 52 51 49
|
||||
f 52 56 55 51
|
||||
f 56 54 53 55
|
||||
f 54 50 49 53
|
||||
f 49 51 55 53
|
||||
f 54 56 52 50
|
||||
o Cube.004_Cube.002
|
||||
v -0.505327 -0.438894 -0.223183
|
||||
v -0.505327 0.511106 -0.223183
|
||||
v -0.505327 -0.438894 -0.365683
|
||||
v -0.505327 0.511106 -0.365683
|
||||
v -0.457827 -0.438894 -0.223183
|
||||
v -0.457827 0.511106 -0.223183
|
||||
v -0.457827 -0.438894 -0.365683
|
||||
v -0.457827 0.511106 -0.365683
|
||||
s off
|
||||
f 58 60 59 57
|
||||
f 60 64 63 59
|
||||
f 64 62 61 63
|
||||
f 62 58 57 61
|
||||
f 57 59 63 61
|
||||
f 62 64 60 58
|
||||
o Cube.003_Cube.002
|
||||
v 0.064673 -0.438894 -0.460683
|
||||
v 0.064673 0.511106 -0.460683
|
||||
v -0.077827 -0.438894 -0.460683
|
||||
v -0.077827 0.511106 -0.460683
|
||||
v 0.064673 -0.438894 -0.508183
|
||||
v 0.064673 0.511106 -0.508183
|
||||
v -0.077827 -0.438894 -0.508183
|
||||
v -0.077827 0.511106 -0.508183
|
||||
s off
|
||||
f 66 68 67 65
|
||||
f 68 72 71 67
|
||||
f 72 70 69 71
|
||||
f 70 66 65 69
|
||||
f 65 67 71 69
|
||||
f 70 72 68 66
|
||||
o Cube.002
|
||||
v 0.064673 -0.438894 0.489317
|
||||
v 0.064673 0.511106 0.489317
|
||||
v -0.077827 -0.438894 0.489317
|
||||
v -0.077827 0.511106 0.489317
|
||||
v 0.064673 -0.438894 0.441817
|
||||
v 0.064673 0.511106 0.441817
|
||||
v -0.077827 -0.438894 0.441817
|
||||
v -0.077827 0.511106 0.441817
|
||||
s off
|
||||
f 74 76 75 73
|
||||
f 76 80 79 75
|
||||
f 80 78 77 79
|
||||
f 78 74 73 77
|
||||
f 73 75 79 77
|
||||
f 78 80 76 74
|
||||
o Cube.001_Cube.002
|
||||
v -0.505327 -0.438894 0.061817
|
||||
v -0.505327 0.511106 0.061817
|
||||
v -0.505327 -0.438894 -0.080683
|
||||
v -0.505327 0.511106 -0.080683
|
||||
v -0.457827 -0.438894 0.061817
|
||||
v -0.457827 0.511106 0.061817
|
||||
v -0.457827 -0.438894 -0.080683
|
||||
v -0.457827 0.511106 -0.080683
|
||||
s off
|
||||
f 82 84 83 81
|
||||
f 84 88 87 83
|
||||
f 88 86 85 87
|
||||
f 86 82 81 85
|
||||
f 81 83 87 85
|
||||
f 86 88 84 82
|
||||
o Cube_Cube.002
|
||||
v 0.444673 -0.438894 0.061817
|
||||
v 0.444673 0.511106 0.061817
|
||||
v 0.444673 -0.438894 -0.080683
|
||||
v 0.444673 0.511106 -0.080683
|
||||
v 0.492173 -0.438894 0.061817
|
||||
v 0.492173 0.511106 0.061817
|
||||
v 0.492173 -0.438894 -0.080683
|
||||
v 0.492173 0.511106 -0.080683
|
||||
s off
|
||||
f 90 92 91 89
|
||||
f 92 96 95 91
|
||||
f 96 94 93 95
|
||||
f 94 90 89 93
|
||||
f 89 91 95 93
|
||||
f 94 96 92 90
|
|
@ -0,0 +1,64 @@
|
|||
# Blender v2.73 (sub 0) OBJ File: 'travelnet_elevator.blend'
|
||||
# www.blender.org
|
||||
o Cylinder
|
||||
v -0.499016 -0.499034 0.499022
|
||||
v -0.499016 -0.499034 -0.498989
|
||||
v 0.499035 -0.499034 -0.498989
|
||||
v 0.499035 -0.499034 0.499022
|
||||
v -0.499016 1.498990 0.499022
|
||||
v -0.499016 1.498990 -0.498989
|
||||
v 0.499035 1.498990 -0.498989
|
||||
v 0.499035 1.498990 0.499022
|
||||
v 0.437500 -0.437500 0.437500
|
||||
v -0.499016 1.437500 -0.498989
|
||||
v 0.499035 1.437500 -0.498989
|
||||
v -0.437500 -0.437500 0.437500
|
||||
v 0.437500 1.437500 0.437500
|
||||
v -0.499016 -0.437500 -0.498989
|
||||
v 0.499035 -0.437500 -0.498989
|
||||
v -0.437500 1.437500 0.437500
|
||||
v -0.437500 -0.437500 -0.498989
|
||||
v 0.437500 -0.437500 -0.498989
|
||||
v -0.437500 1.437500 -0.498989
|
||||
v 0.437500 1.437500 -0.498989
|
||||
vt 0.000000 0.968750
|
||||
vt 1.000000 0.968750
|
||||
vt 1.000000 1.000000
|
||||
vt 0.000000 1.000000
|
||||
vt 0.062500 0.031250
|
||||
vt 0.062500 0.968750
|
||||
vt 0.000000 0.031250
|
||||
vt 0.937500 0.031250
|
||||
vt 1.000000 0.031250
|
||||
vt 0.937500 0.968750
|
||||
vt 1.000000 -0.000000
|
||||
vt 0.000000 -0.000000
|
||||
vt 0.062500 -0.000000
|
||||
vt 0.937500 -0.000000
|
||||
vt 0.937500 0.937500
|
||||
vt 0.062500 0.937500
|
||||
vt 0.062500 1.000000
|
||||
vt 0.062500 0.062500
|
||||
vt 0.937500 0.062500
|
||||
vt 0.937500 1.000000
|
||||
g Cylinder_Cylinder_front
|
||||
s off
|
||||
f 11/1 10/2 6/3 7/4
|
||||
f 18/5 20/6 11/1 15/7
|
||||
f 17/8 14/9 10/2 19/10
|
||||
f 13/6 9/5 12/8 16/10
|
||||
f 2/11 14/9 15/7 3/12
|
||||
f 17/7 19/1 16/10 12/8
|
||||
g Cylinder_Cylinder_controls
|
||||
f 18/7 9/8 13/10 20/1
|
||||
g Cylinder_Cylinder_outside
|
||||
f 8/3 4/11 3/12 7/4
|
||||
f 6/4 2/12 1/11 5/3
|
||||
f 8/4 5/3 1/11 4/12
|
||||
g Cylinder_Cylinder_ceiling
|
||||
f 19/13 20/14 13/15 16/16
|
||||
g Cylinder_Cylinder_floor
|
||||
f 17/17 12/18 9/19 18/20
|
||||
g Cylinder_Cylinder_top-bottom
|
||||
f 5/12 8/11 7/3 6/4
|
||||
f 2/12 3/11 4/3 1/4
|
After Width: | Height: | Size: 290 B |
After Width: | Height: | Size: 694 B |
After Width: | Height: | Size: 267 B |
After Width: | Height: | Size: 952 B |
After Width: | Height: | Size: 756 B |
After Width: | Height: | Size: 292 B |
After Width: | Height: | Size: 832 B |
After Width: | Height: | Size: 102 B |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 347 B |