]> git.lizzy.rs Git - Crafter.git/blob - mods/fireworks/init.lua
Update init.lua
[Crafter.git] / mods / fireworks / init.lua
1 local colors ={
2     "red",
3     "white",
4     "blue"
5 }
6
7 local function fireworks_pop(pos)
8     for _,color in pairs(colors) do
9         minetest.add_particlespawner({
10             amount = 15,
11             time = 0.001,
12             minpos = pos,
13             maxpos = pos,
14             minvel = vector.new(-16,-16,-16),
15             maxvel = vector.new(16,16,16),
16             minacc = {x=0, y=0, z=0},
17             maxacc = {x=0, y=0, z=0},
18             minexptime = 1.1,
19             maxexptime = 1.5,
20             minsize = 1,
21             maxsize = 2,
22             collisiondetection = false,
23             collision_removal = false,
24             vertical = false,
25             texture = "smoke.png^[colorize:"..color..":255",
26         })
27     end
28     minetest.sound_play("fireworks_pop",{pos=pos,pitch=math.random(80,100)/100,gain=6.0,max_hear_distance = 128})
29 end
30
31
32 minetest.register_entity("fireworks:rocket", {
33         initial_properties = {
34                 hp_max = 1,
35                 physical = true,
36                 collide_with_objects = false,
37                 collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
38                 visual = "sprite",
39                 visual_size = {x = 1, y = 1},
40                 textures = {"fireworks.png"},
41                 is_visible = true,
42                 pointable = true,
43         },
44
45     timer = 0,
46         
47         on_activate = function(self, staticdata, dtime_s)
48         self.object:set_acceleration(vector.new(0,50,0))
49         minetest.add_particlespawner({
50             amount = 30,
51             time = 1,
52             minpos = pos,
53             maxpos = pos,
54             minvel = vector.new(0,-20,0),
55             maxvel = vector.new(0,-20,0),
56             minacc = {x=0, y=0, z=0},
57             maxacc = {x=0, y=0, z=0},
58             minexptime = 1.1,
59             maxexptime = 1.5,
60             minsize = 1,
61             maxsize = 2,
62             collisiondetection = false,
63             collision_removal = false,
64             vertical = false,
65             attached = self.object,
66             texture = "smoke.png",
67         })
68         minetest.sound_play("fireworks_launch",{object=self.object,pitch=math.random(80,100)/100})
69         end,
70
71         sound_played = false,
72         on_step = function(self, dtime) 
73         self.timer = self.timer + dtime
74         if self.timer >= 1 then
75             fireworks_pop(self.object:get_pos())
76             self.object:remove()
77         end
78         end,
79 })
80
81
82 minetest.register_craftitem("fireworks:rocket", {
83         description = "Fireworks",
84         inventory_image = "fireworks.png",
85         wield_image = "fireworks.png",
86         on_place = function(itemstack, placer, pointed_thing)
87                 if not pointed_thing.type == "node" then
88                         return
89                 end
90                 
91                 minetest.add_entity(pointed_thing.above, "fireworks:rocket")
92
93                 itemstack:take_item()
94
95                 return itemstack
96         end,
97 })
98
99 minetest.register_craft({
100         type = "shapeless",
101         output = "fireworks:rocket",
102         recipe = {"main:paper","mob:gunpowder"},
103 })