Maciej Kasatkin
2012-10-28 01b21d49af04f9b3251c5edfb759995dc45d5110
mining_laser_mk1.lua
@@ -1,17 +1,42 @@
laser_mk1_max_charge=40000
local laser_shoot = function(itemstack, player, pointed_thing)
            local laser_straight_mode=0
            local playerpos=player:getpos()
            local dir=player:get_look_dir()
            if pointed_thing.type=="node" then
               pos=minetest.get_pointed_thing_position(pointed_thing, above)
               local node = minetest.env:get_node(pos)
               if node.name~="ignore" then
               minetest.node_dig(pos,node,player)
               end
               laser_straight_mode=1
               end
            direction_y=math.abs(math.floor(dir.y*100))
            print (direction_y)
            if direction_y>50 then entity_name="technic:laser_beam_entityV"
               else entity_name="technic:laser_beam_entity" end
            local obj=minetest.env:add_entity({x=playerpos.x,y=playerpos.y+1.6,z=playerpos.z},entity_name)
            if laser_straight_mode==1  then
               pos1=minetest.get_pointed_thing_position(pointed_thing, under)
               pos1.x=math.floor(pos1.x)
               pos1.y=math.floor(pos1.y)
               pos1.z=math.floor(pos1.z)
               obj=minetest.env:add_entity(pos1,entity_name)
            else
            obj=minetest.env:add_entity({x=playerpos.x,y=playerpos.y+1.6,z=playerpos.z},entity_name)
            end
            if obj:get_luaentity().player == nil then
               obj:get_luaentity().player = player
            end
            obj:setvelocity({x=dir.x*10, y=dir.y*10, z=dir.z*10})
            if laser_straight_mode==1 and direction_y<50 then
               obj:setvelocity({x=dir.x*8, y=0, z=dir.z*8})
            else if laser_straight_mode==1 and direction_y>50 then
               obj:setvelocity({x=0, y=dir.y*8, z=dir.z*8})
               end
            end
            if laser_straight_mode==0 then
               obj:setvelocity({x=dir.x*8, y=dir.y*8, z=dir.z*8})
               end
            obj:setacceleration({x=0, y=0, z=0})
            obj:setyaw(player:get_look_yaw()+math.pi)
            if obj:get_luaentity().player == nil then
@@ -29,14 +54,13 @@
   stack_max = 1,
   on_use = function(itemstack, user, pointed_thing)
      item=itemstack:to_table()
      local charge=tonumber((item["wear"]))
      if charge ==0 then charge =65535 end
      charge=get_RE_item_load(charge,laser_mk1_max_charge)
      if item["metadata"]=="" or item["metadata"]=="0" then  return end
      local charge=tonumber((item["metadata"]))
      if charge-400>0 then
       laser_shoot(item, user, pointed_thing)
       charge =charge-400;   
      charge=set_RE_item_load(charge,laser_mk1_max_charge)
      item["wear"]=tostring(charge)
      item["metadata"]=tostring(charge)
      charge=set_RE_wear(item,charge,laser_mk1_max_charge)
      itemstack:replace(item)
      end
      return itemstack