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