diff --git a/scripts/turrets.lua b/scripts/turrets.lua index 2bb4711..bc302bb 100644 --- a/scripts/turrets.lua +++ b/scripts/turrets.lua @@ -63,24 +63,6 @@ minetest.register_craftitem( end end end, - on_place = function(itemstack, placer, pointed_thing) - --if pointing at an entity - if pointed_thing.type == "object" then - local obj = pointed_thing.ref - --if entity is a turret - if obj:get_luaentity().name == "portalgun:turretgun" then - --get object yaw - local yaw = obj:get_yaw() - local deg = math.deg(yaw) - deg = math.fmod(deg, 360) - deg = math.floor(deg / 90) * 90 - deg = deg - 90 - deg = math.fmod(deg, 360) - --set object yaw - obj:set_yaw(math.rad(deg)) - end - end - end } ) minetest.register_entity( @@ -164,6 +146,63 @@ minetest.register_entity( } ) +minetest.register_node("portalgun:turretgun_spawner", +{ + --this node spawns a turret on top of the block if there is no turret nearby + description = "Turret spawner", + tiles = {"portalgun_turret_spawner.png"}, + groups = {cracky = 3}, + sounds = stone_sounds, + drawtype = "allfaces", + paramtype = "light", + paramtype2 = "facedir", + drop = "", + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Turret spawner") + meta:set_string("pos", minetest.pos_to_string(pos)) + meta:set_int("yaw", 0) + minetest.get_node_timer(pos):start(1.0) + end, + on_rightclick = function(pos, node, clicker, itemstack, pointed_thing) + --check if itemstack contains portalgun:turret_rotator + if itemstack:get_name() == "portalgun:turret_rotator" then + --get meta of pointed_thing + local meta = minetest.get_meta(pointed_thing.under) + --get yaw of itemstack + local yaw = meta:get_int("yaw") + yaw = yaw + 90 + --if yaw is greater than 360, set it to 0 + yaw = math.fmod(yaw, 360) + meta:set_int("yaw", yaw) + --return itemstack + return itemstack + end + end, + on_timer = function (pos, elapsed) + local meta = minetest.get_meta(pos) + local pos = meta:get_string("pos") + local pos1 = minetest.string_to_pos(pos) + local pos2 = {x = pos1.x, y = pos1.y + 1, z = pos1.z} + local objs = minetest.get_objects_inside_radius(pos2, 2) + local found = 0 + for i, obj in pairs(objs) do + if obj ~= nil then + if obj:get_luaentity().name == "portalgun:turretgun" then + found = 1 + break + end + end + end + if found == 0 then + local obj = minetest.add_entity(pos2, "portalgun:turretgun") + obj:setyaw(math.rad(meta:get_int("yaw"))) + meta:set_string("infotext", "Turret spawner " .. meta:get_int("yaw")) + minetest.get_node_timer(pos1):start(10) + end + end +}) + minetest.register_entity( "portalgun:turretgun", { @@ -202,7 +241,6 @@ minetest.register_entity( return else self._tmr = 0 - minetest.chat_send_all("turret yaw " .. p .. "yaw" .. math.deg(self.object:getyaw())) end --swap 1 and 3 in p if p == 1 then