diff --git a/mining_lasers.lua b/mining_lasers.lua index c60ebfe..2dc5ddd 100644 --- a/mining_lasers.lua +++ b/mining_lasers.lua @@ -1,12 +1,14 @@ ---license LGPLv2+, for the changes: WTFPL +--license LGPLv2+ local r_corr = 0.25 --remove a bit more nodes (if shooting diagonal) to let it look like a hole (sth like antialiasing) -local laser_mk2_range = 11 --range of the laser shots -local laser_mk3_range = 30 ---local laser_mk2_max_charge = 40000*4 ---local laser_mk3_max_charge = laser_mk2_max_charge*4 ---technic.register_power_tool("technic:laser_mk2", laser_mk2_max_charge) ---technic.register_power_tool("technic:laser_mk3", laser_mk3_max_charge) +local mk1_charge = 40000 + +local mining_lasers_list = { +-- {, , }, + {"1", 7, mk1_charge}, + {"2", 11, mk1_charge*4}, + {"3", 30, mk1_charge*16}, +} local f_1 = 0.5-r_corr local f_2 = 0.5+r_corr @@ -44,96 +46,7 @@ local function node_tab(z, d) return {n1, n2} end -local function lazer_nodes(pos, dir, player, range) - local t_dir = get_used_dir(dir) - local dir_typ = t_dir[1] - if t_dir[3] == "+" then - f_tab = {0, range} - else - f_tab = {-range,0} - end - local d_ch = t_dir[2] - if dir_typ == "x" then - for d = f_tab[1],f_tab[2],1 do - local x = d - local ytab = node_tab(d_ch.y, d) - local ztab = node_tab(d_ch.z, d) - for _,y in ipairs(ytab) do - for _,z in ipairs(ztab) do - lazer_it({x=pos.x+x, y=pos.y+y, z=pos.z+z}, player) - end - end - end - return - end - if dir_typ == "y" then - for d = f_tab[1],f_tab[2],1 do - local xtab = node_tab(d_ch.x, d) - local y = d - local ztab = node_tab(d_ch.z, d) - for _,x in ipairs(xtab) do - for _,z in ipairs(ztab) do - lazer_it({x=pos.x+x, y=pos.y+y, z=pos.z+z}, player) - end - end - end - return - end - for d = f_tab[1],f_tab[2],1 do - local xtab = node_tab(d_ch.x, d) - local ytab = node_tab(d_ch.y, d) - local z = d - for _,x in ipairs(xtab) do - for _,y in ipairs(ytab) do - lazer_it({x=pos.x+x, y=pos.y+y, z=pos.z+z}, player) - end - end - end -end - -local function laser_shoot(player, range, particle_texture, sound) - local t1 = os.clock() - - local playerpos=player:getpos() - local dir=player:get_look_dir() - - local startpos = {x=playerpos.x, y=playerpos.y+1.6, z=playerpos.z} - local a = {x=dir.x*50, y=dir.y*50, z=dir.z*50} - minetest.add_particle(startpos, dir, a, range/11, 1, false, particle_texture) - lazer_nodes(vector.round(startpos), dir, player, range) - minetest.sound_play(sound, {pos = playerpos, gain = 1.0, max_hear_distance = range}) - - print("[extrablocks] my shot was calculated after "..tostring(os.clock()-t1).."s") - return true --? -end - - - -for _,m in ipairs({ - {"2", laser_mk2_range, laser_mk2_max_charge}, - {"3", laser_mk3_range, laser_mk3_max_charge}, -}) do - minetest.register_tool("extrablocks:laser_mk"..m[1], { - description = "Mining Laser MK"..m[1], - inventory_image = "extrablocks_mining_laser_mk"..m[1]..".png", - stack_max = 1, - on_use = function(itemstack, user) - --[[local meta = get_item_meta(itemstack:get_metadata()) - if not meta or not meta.charge then - return - end - if meta.charge - 400 > 0 then]] - laser_shoot(user, m[2], "extrablocks_laser_beam_mk"..m[1]..".png", "extrablocks_laser_mk"..m[1]) - --[[meta.charge = meta.charge - 400 - technic.set_RE_wear(itemstack, meta.charge, m[3]) - itemstack:set_metadata(set_item_meta(meta)) - end - return itemstack]] - end, - }) -end - -function lazer_it(pos, player) +local function laser_node(pos, player) local node = minetest.get_node(pos) if node.name == "air" or node.name == "ignore" @@ -150,6 +63,92 @@ function lazer_it(pos, player) return end if player then - minetest.node_dig(pos,node,player) + minetest.node_dig(pos, node, player) end end + +local function laser_nodes(pos, dir, player, range) + local t_dir = get_used_dir(dir) + local dir_typ = t_dir[1] + if t_dir[3] == "+" then + f_tab = {0, range} + else + f_tab = {-range,0} + end + local d_ch = t_dir[2] + if dir_typ == "x" then + for d = f_tab[1],f_tab[2],1 do + local x = d + local ytab = node_tab(d_ch.y, d) + local ztab = node_tab(d_ch.z, d) + for _,y in ipairs(ytab) do + for _,z in ipairs(ztab) do + laser_node({x=pos.x+x, y=pos.y+y, z=pos.z+z}, player) + end + end + end + return + end + if dir_typ == "y" then + for d = f_tab[1],f_tab[2],1 do + local xtab = node_tab(d_ch.x, d) + local y = d + local ztab = node_tab(d_ch.z, d) + for _,x in ipairs(xtab) do + for _,z in ipairs(ztab) do + laser_node({x=pos.x+x, y=pos.y+y, z=pos.z+z}, player) + end + end + end + return + end + for d = f_tab[1],f_tab[2],1 do + local xtab = node_tab(d_ch.x, d) + local ytab = node_tab(d_ch.y, d) + local z = d + for _,x in ipairs(xtab) do + for _,y in ipairs(ytab) do + laser_node({x=pos.x+x, y=pos.y+y, z=pos.z+z}, player) + end + end + end +end + +local function laser_shoot(player, range, particle_texture, sound) + local t1 = os.clock() + + local playerpos=player:getpos() + local dir=player:get_look_dir() + + local startpos = {x=playerpos.x, y=playerpos.y+1.6, z=playerpos.z} + local a = {x=dir.x*50, y=dir.y*50, z=dir.z*50} + minetest.add_particle(startpos, dir, a, range/11, 1, false, particle_texture) + laser_nodes(vector.round(startpos), dir, player, range) + minetest.sound_play(sound, {pos = playerpos, gain = 1.0, max_hear_distance = range}) + + print("[technic] my shot was calculated after "..tostring(os.clock()-t1).."s") + return true --Why? +end + + +for _,m in ipairs(mining_lasers_list) do +-- technic.register_power_tool("technic:laser_mk"..m[1], m[3]) + minetest.register_tool("extrablocks:laser_mk"..m[1], { + description = "Mining Laser MK"..m[1], + inventory_image = "technic_mining_laser_mk"..m[1]..".png", + stack_max = 1, + on_use = function(itemstack, user) + --[[local meta = get_item_meta(itemstack:get_metadata()) + if not meta or not meta.charge then + return + end + if meta.charge - 400 > 0 then]] + laser_shoot(user, m[2], "technic_laser_beam_mk"..m[1]..".png", "technic_laser_mk"..m[1]) + --[[meta.charge = meta.charge - 400 + technic.set_RE_wear(itemstack, meta.charge, m[3]) + itemstack:set_metadata(set_item_meta(meta)) + end + return itemstack]] + end, + }) +end diff --git a/sounds/technic_laser_mk1.0.ogg b/sounds/technic_laser_mk1.0.ogg new file mode 100644 index 0000000..19be080 Binary files /dev/null and b/sounds/technic_laser_mk1.0.ogg differ diff --git a/sounds/technic_laser_mk1.1.ogg b/sounds/technic_laser_mk1.1.ogg new file mode 100644 index 0000000..7792be1 Binary files /dev/null and b/sounds/technic_laser_mk1.1.ogg differ diff --git a/sounds/extrablocks_laser_mk2.0.ogg b/sounds/technic_laser_mk2.0.ogg similarity index 100% rename from sounds/extrablocks_laser_mk2.0.ogg rename to sounds/technic_laser_mk2.0.ogg diff --git a/sounds/extrablocks_laser_mk2.1.ogg b/sounds/technic_laser_mk2.1.ogg similarity index 100% rename from sounds/extrablocks_laser_mk2.1.ogg rename to sounds/technic_laser_mk2.1.ogg diff --git a/sounds/extrablocks_laser_mk2.2.ogg b/sounds/technic_laser_mk2.2.ogg similarity index 100% rename from sounds/extrablocks_laser_mk2.2.ogg rename to sounds/technic_laser_mk2.2.ogg diff --git a/sounds/extrablocks_laser_mk3.1.ogg b/sounds/technic_laser_mk3.1.ogg similarity index 100% rename from sounds/extrablocks_laser_mk3.1.ogg rename to sounds/technic_laser_mk3.1.ogg diff --git a/sounds/extrablocks_laser_mk3.2.ogg b/sounds/technic_laser_mk3.2.ogg similarity index 100% rename from sounds/extrablocks_laser_mk3.2.ogg rename to sounds/technic_laser_mk3.2.ogg diff --git a/textures/extrablocks_mining_laser_mk3.png b/textures/extrablocks_mining_laser_mk3.png deleted file mode 100644 index 17e342e..0000000 Binary files a/textures/extrablocks_mining_laser_mk3.png and /dev/null differ diff --git a/textures/technic_laser_beam_mk1.png b/textures/technic_laser_beam_mk1.png new file mode 100644 index 0000000..4cf9b3e Binary files /dev/null and b/textures/technic_laser_beam_mk1.png differ diff --git a/textures/extrablocks_laser_beam_mk2.png b/textures/technic_laser_beam_mk2.png similarity index 100% rename from textures/extrablocks_laser_beam_mk2.png rename to textures/technic_laser_beam_mk2.png diff --git a/textures/extrablocks_laser_beam_mk3.png b/textures/technic_laser_beam_mk3.png similarity index 100% rename from textures/extrablocks_laser_beam_mk3.png rename to textures/technic_laser_beam_mk3.png diff --git a/textures/technic_mining_laser_mk1.png b/textures/technic_mining_laser_mk1.png new file mode 100644 index 0000000..29faeb4 Binary files /dev/null and b/textures/technic_mining_laser_mk1.png differ diff --git a/textures/extrablocks_mining_laser_mk2.png b/textures/technic_mining_laser_mk2.png similarity index 100% rename from textures/extrablocks_mining_laser_mk2.png rename to textures/technic_mining_laser_mk2.png diff --git a/textures/technic_mining_laser_mk3.png b/textures/technic_mining_laser_mk3.png new file mode 100644 index 0000000..db9ee26 Binary files /dev/null and b/textures/technic_mining_laser_mk3.png differ