Maciej Kasatkin
2012-09-22 d87ac822519055e0f76d4d652b583f1d1714eceb
commit | author | age
167434 1 laser_mk1_max_charge=40000
MK 2
3 local laser_shoot = function(itemstack, player, pointed_thing)
4                 local playerpos=player:getpos()
5                 local dir=player:get_look_dir()
6                 direction_y=math.abs(math.floor(dir.y*100))
7                 print (direction_y)
8                 if direction_y>50 then entity_name="technic:laser_beam_entityV"
9                     else entity_name="technic:laser_beam_entity" end
10                 local obj=minetest.env:add_entity({x=playerpos.x,y=playerpos.y+1.6,z=playerpos.z},entity_name)
11                 if obj:get_luaentity().player == nil then
12                     obj:get_luaentity().player = player
13                 end
14                 obj:setvelocity({x=dir.x*19, y=dir.y*19, z=dir.z*19})
15                 obj:setacceleration({x=dir.x*-2, y=0, z=dir.z*-2})
16                 obj:setyaw(player:get_look_yaw()+math.pi)
17                 if obj:get_luaentity().player == nil then
18                     obj:get_luaentity().player = player
19                 end
20                 obj:get_luaentity().node = player:get_inventory():get_stack("main", 1):get_name()
21                 minetest.sound_play("technic_laser", {pos = playerpos, gain = 1.0, max_hear_distance = 10,})
22                 return true
23 end
24
25
26 minetest.register_tool("technic:laser_mk1", {
27     description = "Mining Laser MK1",
28     inventory_image = "technic_mining_laser_mk1.png",
29     stack_max = 1,
30     on_use = function(itemstack, user, pointed_thing)
31         item=itemstack:to_table()
32         local charge=tonumber((item["wear"])) 
33         if charge ==0 then charge =65535 end
34         charge=get_RE_item_load(charge,laser_mk1_max_charge)
35         if charge-400>0 then
36          laser_shoot(item, user, pointed_thing)
37          charge =charge-400;    
38         charge=set_RE_item_load(charge,laser_mk1_max_charge)
39         item["wear"]=tostring(charge)
40         itemstack:replace(item)
41         end
42         return itemstack
43     end,
44 })
45
46 minetest.register_craft({
47     output = 'technic:laser_mk1',
48     recipe = {
49         {'technic:diamond', 'default:steel_ingot', 'technic:battery'},
50         {'', 'default:steel_ingot', 'technic:battery'},
51         {'', '', 'moreores:copper_ingot'},
52     }
53 })
54
55
56
57 minetest.register_node("technic:laser_beam_box", {
58     drawtype = "nodebox",
59     node_box = {
60         type = "fixed",
61         fixed = {
62             { -0.5 , -0.1, -0.1 ,  0.1 ,  0.1 , 0.1  },
63             { -0.1 , -0.1 , -0.1 , 0.5, 0.1 , 0.1  },
64         }
65     },
66     tiles = {"technic_laser_beam.png"},
67     groups = {not_in_creative_inventory=1},
68 })
69
70 minetest.register_node("technic:laser_beam_boxV", {
71     drawtype = "nodebox",
72     node_box = {
73         type = "fixed",
74         fixed = {
75             { -0.1 , -0.1 , -0.1 , 0.1 , 0.5, 0.1  },
76             { -0.1 , -0.5, -0.1 ,  0.1 ,  0.1 , 0.1  },
77
78         }
79     },
80     tiles = {"technic_laser_beam.png"},
81     groups = {not_in_creative_inventory=1},
82 })
83
84 LASER_BEAM_ENTITY={
85     physical = false,
86     timer=0,
87     visual = "wielditem",
88     visual_size = {x=0.2, y=0.2},
89     textures = {"technic:laser_beam_box"},
90     lastpos={},
91     max_range=15,
92     count=0,
93 --    digger=nil,
94     collisionbox = {0,0,0,0,0,0},
95 }
96
97 LASER_BEAM_ENTITY.on_step = function(self, dtime)
98     self.timer=self.timer+dtime
99     local pos = self.object:getpos()
100     local node = minetest.env:get_node(pos)
101     if self.lastpos.x~=nil then lazer_it (pos, node, self.player) end
102     self.lastpos={x=pos.x, y=pos.y, z=pos.z}    
103     self.count=self.count+1
104     if self.count>=self.max_range then self.object:remove() end
105 end
106
107 LASER_BEAM_ENTITYV={
108     physical = false,
109     timer=0,
110     visual = "wielditem",
111     visual_size = {x=0.2, y=0.2},
112     textures = {"technic:laser_beam_boxV"},
113     lastpos={},
114     max_range=15,
115     count=0,
116     collisionbox = {0,0,0,0,0,0},
117 }
118
119 LASER_BEAM_ENTITYV.on_step = function(self, dtime)
120     self.timer=self.timer+dtime
121     local pos = self.object:getpos()
122     local node = minetest.env:get_node(pos)
123     if self.lastpos.x~=nil then lazer_it (pos, node, self.player,self.count) end        
124
125     self.lastpos={x=pos.x, y=pos.y, z=pos.z}    
126     self.count=self.count+1
127     if self.count==self.max_range then self.object:remove() end
128 end
129
130
131 minetest.register_entity("technic:laser_beam_entity", LASER_BEAM_ENTITY)
132 minetest.register_entity("technic:laser_beam_entityV", LASER_BEAM_ENTITYV)
133
134 function lazer_it (pos, node, player,count)        
135     if node.name == "air" then return end
136     if node.name == "default:lava_source" then return end
137     if node.name == "default:lava_flowing" then return end
138     if node.name == "default:water_source" then minetest.env:remove_node(pos) return end
139     if node.name == "default:water_flowing" then minetest.env:remove_node(pos) return end
140     if node.name == "ignore" then minetest.env:remove_node(pos) return end
141
142     if player then 
143     local drops = minetest.get_node_drops(node.name, "default:pick_mese")
144     if player:get_inventory() then
145         local _, dropped_item
146         for _, dropped_item in ipairs(drops) do
147             player:get_inventory():add_item("main", dropped_item)
148         end
149     end
150     minetest.env:remove_node(pos)
151     end
152
153 end