Push first working version of multiple entity 'flying things'

master
jordan4ibanez 2016-02-18 22:55:38 -05:00
parent e94c23b2c1
commit dfea95e2e5
1 changed files with 39 additions and 16 deletions

View File

@ -1,8 +1,12 @@
--try to mimic node collision boxes by creating multiple entities attached in an entity with no collision box
bvav_settings = {}
bvav_settings.attach_scaling = -30
bvav_settings.attach_scaling = 30
bvav_settings.scaling = 0.667
math.randomseed( os.time() )
bvav_settings.node_table = {"default:wood","default:tree","default:glass"}
minetest.register_entity("bvav:bvav_element", {
initial_properties = {
physical = true,
@ -50,6 +54,15 @@ minetest.register_entity("bvav:bvav_element", {
else
--self.object:setvelocity({x=math.random(-1,1)*math.random(),y=0,z=math.random(-1,1)*math.random()})
--let player control vessel
if self.controller then
local vel = minetest.get_player_by_name(self.controller):get_look_dir()
vel.x = vel.x * 2
vel.y = vel.y * 2
vel.z = vel.z * 2
self.object:setvelocity(vel)
end
end
end,
--
@ -61,7 +74,7 @@ function spawn_bvav_element(p, node)
obj:get_luaentity():set_node(node)
return obj
end
--[[
minetest.register_chatcommand("bvav", {
params = "",
description = "Send text to chat",
@ -77,10 +90,10 @@ minetest.register_chatcommand("bvav", {
end,
})
]]--
function bvav_create_vessel(pos)
local parent = spawn_bvav_element(pos, {name="default:wood"})
local parent = spawn_bvav_element(pos, {name="bvav:control_node"})
local basepos = parent:getpos()
local range = 2
@ -93,28 +106,36 @@ function bvav_create_vessel(pos)
local emin, emax = vm:read_from_map(min,max)
local area = VoxelArea:new{MinEdge=emin, MaxEdge=emax}
local data = vm:get_data()
local air = minetest.get_content_id("air")
--build the air ship
--build the vessel
for x = range*-1,range do
for y = range*-1,range do
for z = range*-1,range do
local node = vm:get_node_at({x=pos.x+x,y=pos.y+y,z=pos.z+z}).name
local child = spawn_bvav_element(pos, {name=node})
child:get_luaentity().parent = parent
child:get_luaentity().relative = {x=(basepos.x - pos.x) * bvav_settings.attach_scaling,y=(basepos.y - pos.y) * bvav_settings.attach_scaling,z= (basepos.z - pos.z) * bvav_settings.attach_scaling}
local pos = {x=basepos.x+x,y=basepos.y+y,z=basepos.z+z}
--entities for the vessel
local node = vm:get_node_at(pos).name
print(dump(node))
if node ~= "air" then
local child = spawn_bvav_element(pos, {name=node})
child:get_luaentity().parent = parent
child:get_luaentity().relative = {x=x * bvav_settings.attach_scaling,y=y * bvav_settings.attach_scaling,z=z * bvav_settings.attach_scaling}
end
--delete the nodes added to the vessel
local p_pos = area:index(pos.x, pos.y, pos.z)
data[p_pos] = air
end
end
end
vm:set_data(data)
vm:calc_lighting()
vm:write_to_map()
vm:update_map()
return(parent)
end
@ -123,6 +144,8 @@ minetest.register_node("bvav:control_node", {
tiles = {"default_stone.png"},
groups = {cracky=3, stone=1},
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
bvav_create_vessel(pos)
local vessel = bvav_create_vessel(pos)
player:set_attach(vessel, "", {x=0,y=0,z=0}, {x=0,y=0,z=0})
vessel:get_luaentity().controller = player:get_player_name()
end,
})