diff options
Diffstat (limited to 'decorations.lua')
-rw-r--r-- | decorations.lua | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/decorations.lua b/decorations.lua index 0728ba2..847c06a 100644 --- a/decorations.lua +++ b/decorations.lua @@ -245,3 +245,230 @@ minetest.register_node("celevator:tape_bracket",{ }, }, }) + +minetest.register_entity("celevator:tapehead",{ + initial_properties = { + visual = "wielditem", + visual_size = vector.new(0.667,0.667,0.667), + wield_item = "celevator:tapehead", + static_save = false, + pointable = false, + glow = minetest.LIGHT_MAX, + }, + on_step = function(self) + local obj = self.object + if not obj then return end + local pos = obj:get_pos() + if not pos then return end + local roundpos = vector.round(pos) + local backdir = minetest.yaw_to_dir(obj:get_yaw()) + local tapepos = vector.add(roundpos,backdir) + local tapename = minetest.get_node(tapepos).name + if tapename ~= "celevator:tape" and tapename ~= "celevator:tape_magnets" and tapename ~= "celevator:tape_bracket" then + obj:remove() + return + end + local ledstate = "" + if tapename == "celevator:tape_magnets" then + local offset = pos.y-roundpos.y + if offset > -0.45 and offset < 0.05 then + ledstate = ledstate.."_ulm" + end + if offset < 0.45 and offset > -0.05 then + ledstate = ledstate.."_dlm" + end + if offset > -0.3 and offset < 0.3 then + ledstate = ledstate.."_dz" + end + end + obj:set_properties({ + wield_item = "celevator:tapehead"..ledstate, + }) + end, +}) + +local function spawntapehead(pos) + local toppos = vector.add(pos,vector.new(0,1,0)) + local entitiesnearby = minetest.get_objects_inside_radius(toppos,0.5) + for _,i in pairs(entitiesnearby) do + if i:get_luaentity() and i:get_luaentity().name == "celevator:tapehead" then + return + end + end + local entity = minetest.add_entity(pos,"celevator:tapehead") + local fdir = minetest.fourdir_to_dir(minetest.get_node(pos).param2) + fdir = vector.rotate_around_axis(fdir,vector.new(0,1,0),-math.pi/2) + entity:set_yaw(minetest.dir_to_yaw(fdir)) + entity:set_pos(toppos) +end + +minetest.register_abm({ + label = "Spawn tapeheads", + nodenames = {"celevator:car_122"}, + neighbors = {"celevator:tape","celevator:tape_magnets","celevator:tape_bracket"}, + interval = 1, + chance = 1, + action = spawntapehead, +}) + +minetest.register_node("celevator:tapehead",{ + description = "Elevator Positioning System Tapehead (off, you hacker you!)", + groups = { + not_in_creative_inventory = 1, + }, + drop = "", + paramtype = "light", + paramtype2 = "4dir", + tiles = { + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_front_off.png", + }, + drawtype = "nodebox", + use_texture_alpha = "clip", + node_box = { + type = "fixed", + fixed = { + {-0.15,-0.4,0.62,0.15,0.1,0.72}, + {-0.15,-0.4,0.42,0.15,-0.38,0.62}, + }, + }, +}) + +minetest.register_node("celevator:tapehead_ulm",{ + description = "Elevator Positioning System Tapehead (ULM on, you hacker you!)", + groups = { + not_in_creative_inventory = 1, + }, + drop = "", + paramtype = "light", + paramtype2 = "4dir", + tiles = { + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_front_ulm.png", + }, + drawtype = "nodebox", + use_texture_alpha = "clip", + node_box = { + type = "fixed", + fixed = { + {-0.15,-0.4,0.62,0.15,0.1,0.72}, + {-0.15,-0.4,0.42,0.15,-0.38,0.62}, + }, + }, +}) + +minetest.register_node("celevator:tapehead_ulm_dz",{ + description = "Elevator Positioning System Tapehead (ULM and DZ on, you hacker you!)", + groups = { + not_in_creative_inventory = 1, + }, + drop = "", + paramtype = "light", + paramtype2 = "4dir", + tiles = { + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_front_ulm_dz.png", + }, + drawtype = "nodebox", + use_texture_alpha = "clip", + node_box = { + type = "fixed", + fixed = { + {-0.15,-0.4,0.62,0.15,0.1,0.72}, + {-0.15,-0.4,0.42,0.15,-0.38,0.62}, + }, + }, +}) + +minetest.register_node("celevator:tapehead_ulm_dlm_dz",{ + description = "Elevator Positioning System Tapehead (ULM, DLM, and DZ on, you hacker you!)", + groups = { + not_in_creative_inventory = 1, + }, + drop = "", + paramtype = "light", + paramtype2 = "4dir", + tiles = { + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_front_ulm_dlm_dz.png", + }, + drawtype = "nodebox", + use_texture_alpha = "clip", + node_box = { + type = "fixed", + fixed = { + {-0.15,-0.4,0.62,0.15,0.1,0.72}, + {-0.15,-0.4,0.42,0.15,-0.38,0.62}, + }, + }, +}) + +minetest.register_node("celevator:tapehead_dlm_dz",{ + description = "Elevator Positioning System Tapehead (DLM and DZ on, you hacker you!)", + groups = { + not_in_creative_inventory = 1, + }, + drop = "", + paramtype = "light", + paramtype2 = "4dir", + tiles = { + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_front_dlm_dz.png", + }, + drawtype = "nodebox", + use_texture_alpha = "clip", + node_box = { + type = "fixed", + fixed = { + {-0.15,-0.4,0.62,0.15,0.1,0.72}, + {-0.15,-0.4,0.42,0.15,-0.38,0.62}, + }, + }, +}) + +minetest.register_node("celevator:tapehead_dlm",{ + description = "Elevator Positioning System Tapehead (DLM on, you hacker you!)", + groups = { + not_in_creative_inventory = 1, + }, + drop = "", + paramtype = "light", + paramtype2 = "4dir", + tiles = { + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_sides.png", + "celevator_tapehead_front_dlm.png", + }, + drawtype = "nodebox", + use_texture_alpha = "clip", + node_box = { + type = "fixed", + fixed = { + {-0.15,-0.4,0.62,0.15,0.1,0.72}, + {-0.15,-0.4,0.42,0.15,-0.38,0.62}, + }, + }, +}) |