aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorywang <ywang@forksworld.de>2020-12-28 12:46:38 +0100
committerywang <ywang@forksworld.de>2020-12-28 12:46:38 +0100
commitfb009b2cc26be08279933e8c8a688dc0926c20fe (patch)
tree404be66afa9403179bf8ae3fcd0acdd9035715b7
parent37acaf4a84911ea7ed4f7a7321ed3860869f9dde (diff)
downloadfireworkz-fb009b2cc26be08279933e8c8a688dc0926c20fe.tar.gz
fireworkz-fb009b2cc26be08279933e8c8a688dc0926c20fe.tar.bz2
fireworkz-fb009b2cc26be08279933e8c8a688dc0926c20fe.zip
Minor improvements
-rw-r--r--init.lua195
1 files changed, 87 insertions, 108 deletions
diff --git a/init.lua b/init.lua
index 4f2d7b2..8f9164c 100644
--- a/init.lua
+++ b/init.lua
@@ -42,49 +42,66 @@ local color_variants = {"red", "green", "blue", "yellow", "white"}
local figure_variants = {"default", "ball", "love", "hi"}
local variant_list = {
- {colour = "blue_white_red", figure = "ball_default_love", desc = S("Blue-White-Love"),
+ {color = "blue_white_red", figure = "ball_default_love", desc = S("Blue-White-Love"),
rdt = {
{color = "blue", figure = "ball"},
{color = "yellow", figure = "default"},
{color = "red", figure = "love"},
- }
+ },
+ recipe = {
+ output = "fireworkz:rocket_ball_default_love_blue_white_red",
+ recipe = {
+ {"dye:blue", "dye:white", "dye:red"},
+ {"default:paper", "tnt:gunpowder", "default:paper"},
+ {"default:paper", "default:paper", "default:paper"}
+ },
+ },
},
- {colour = "green_yellow_red", figure = "ball_default_love", desc = S("Green-Yellow-Love"),
+ {color = "green_yellow_red", figure = "ball_default_love", desc = S("Green-Yellow-Love"),
rdt = {
{color = "green", figure = "ball"},
{color = "yellow", figure = "default"},
{color = "red", figure = "love"},
+ },
+ recipe = {
+ output = "fireworkz:rocket_ball_default_love_green_yellow_red",
+ recipe = {
+ {"dye:green", "dye:yellow", "dye:red"},
+ {"default:paper", "tnt:gunpowder", "default:paper"},
+ {"default:paper", "default:paper", "default:paper"}
+ },
}
},
}
-for _, i in pairs(color_variants) do
- local t = variant_list
- local u = i:sub(1,1):upper()..i:sub(2)
- for _, j in pairs(figure_variants) do
- t[#t+1] = {colour = i, figure = j, desc = S(u)}
- end
-end
-
--Functions
local figures = {}
+function figures.line(t, pos, off, rep, vel)
+ if not t then t = {} end
+ local v = vector.new(pos)
+ for i = 0, rep, 1 do
+ t[#t+1] = vector.new(v)
+ t[#t].v = vel
+ v = vector.add(v, off)
+ end
+ return t
+end
+
+-- Figures
+
function figures.default(r)
local tab = {}
- local num = 1
for x=-r, r, 0.02 do
for y=-r, r, 0.02 do
for z=-r, r, 0.02 do
if x*x + y*y + z*z <= r*r then
local v = math.random(21,35) --velocity
- if math.random(1,2) > 1 then
- local xrand = math.random(-5, 5) * 0.001
- local yrand = math.random(-5, 5) * 0.001
- local zrand = math.random(-5, 5) * 0.001
- tab[num] = {x=x+xrand, y=y+yrand, z=z+zrand, v=v}
- end
- num = num + 1
+ local xrand = math.random(-5, 5) * 0.001
+ local yrand = math.random(-5, 5) * 0.001
+ local zrand = math.random(-5, 5) * 0.001
+ tab[#tab+1] = {x=x+xrand, y=y+yrand, z=z+zrand, v=v}
end
end
end
@@ -94,19 +111,13 @@ end
function figures.ball(r)
local tab = {}
- local num = 1
for x= -r, r, 0.01 do
- for y= -r, r, 0.01 do
- for z= -r, r, 0.01 do
- if x*x + y*y + z*z <= r*r and x*x + y*y + z*z >= (r-0.005) * (r-0.005) then
- if math.random(1,4) > 1 then
- local xrand = math.random(-3, 3) * 0.001
- local yrand = math.random(-3, 3) * 0.001
- local zrand = math.random(-3, 3) * 0.001
- tab[num] = {x= x+xrand, y= y+yrand, z= z+zrand, v= 43}
- end
- num = num + 1
- end
+ for z= -r, r, 0.01 do
+ local y = math.sqrt(r*r-x*x-z*z)
+ if y == y then -- y ~= NaN
+ y = math.floor(y*100)/100
+ tab[#tab+1] = {x=x,y=y,z=z,v=43}
+ if y~=0 then tab[#tab+1] = {x=x,y=-y,z=z,v=43} end
end
end
end
@@ -157,40 +168,19 @@ function figures.hi(r)
--
-- 3210123
local tab = {
- {x=0,y=0,z=0,v=60},
- {x=0.03,y=0,z=0.01,v=60},
- {x=0.03,y=0,z=0.02,v=60},
- {x=0.03,y=0,z=0.03,v=60},
- {x=0.03,y=0,z=0.04,v=60},
- {x=0.03,y=0,z=-0.01,v=60},
- {x=0.03,y=0,z=-0.02,v=60},
- {x=0.03,y=0,z=-0.03,v=60},
- {x=0.03,y=0,z=-0.04,v=60},
{x=0.01,y=0,z=-0.00,v=60},
{x=0.02,y=0,z=-0.00,v=60},
- {x=0.03,y=0,z=-0.00,v=60},
- {x=0,03,y=0,z=0.01,v=60},
- {x=0,03,y=0,z=0.02,v=60},
- {x=0,03,y=0,z=0.03,v=60},
- {x=0,03,y=0,z=0.04,v=60},
- {x=0,03,y=0,z=-0.01,v=60},
- {x=0,03,y=0,z=-0.02,v=60},
- {x=0,03,y=0,z=-0.03,v=60},
- {x=0,03,y=0,z=-0.04,v=60},
- {x=-0.03,y=0,z=-0.04,v=60},
- {x=-0.03,y=0,z=-0.03,v=60},
- {x=-0.03,y=0,z=-0.02,v=60},
- {x=-0.03,y=0,z=-0.01,v=60},
- {x=-0.03,y=0,z=-0.00,v=60},
- {x=-0.03,y=0,z=0.01,v=60},
{x=-0.03,y=0,z=0.03,v=60}
}
+ figures.line(tab, {x=0.03,y=0,z=-0.04}, {x=0,y=0,z=0.01}, 8, 60)
+ figures.line(tab, {x=-0.03, y=0, z=0.01}, {x=0,y=0,z=-0.01}, 5, 60)
+ figures.line(tab, {x=0,y=0,z=-0.01}, {x=0,y=0,z=-0.01}, 3, 60)
return tab, 7, 7
end
-- Activate fireworks
-local function partcl_gen(pos, tab, size_min, size_max, colour)
+local function partcl_gen(pos, tab, size_min, size_max, color)
for _,i in pairs(tab) do
minetest.add_particle({
pos = {x=pos.x, y=pos.y, z=pos.z},
@@ -203,7 +193,7 @@ local function partcl_gen(pos, tab, size_min, size_max, colour)
vertical = false,
animation = {type="vertical_frames", aspect_w=9, aspect_h=9, length = 3.5,},
glow = 30,
- texture = "anim_white_star.png^[multiply:"..(color_map[colour] or colour),
+ texture = "anim_white_star.png^[multiply:"..(color_map[color] or color),
})
end
end
@@ -269,28 +259,21 @@ function rocket:on_step(dtime)
end
--Nodes
-for _, i in pairs(variant_list) do
- local figure_desc = ""
+local function register_fireworkz(color, figure, desc, rdt, recipe)
+ local figure_desc
+ if not desc then desc = S(color:sub(1,1):upper()..color:sub(2)) end
- if i.figure == "default" then
- figure_desc = S("Default")
- elseif i.figure == "ball" then
- figure_desc = S("Ball")
- elseif i.figure == "ball_default_love" then
+ if figure == "ball_default_love" then
figure_desc = S("Love Ball")
- elseif i.figure == "love" then
- figure_desc = S("Love")
- elseif i.figure == "hi" then
- figure_desc = S("Hi")
+ else
+ figure_desc = S(figure:sub(1,1):upper()..figure:sub(2))
end
- local figure = i.figure
- inv_image = ("rocket_default_%s.png^(rocket_default.png^[multiply:%s)"):format(
- i.colour, figure_map[figure] or "white")
- local rdt = i.rdt or {{color = i.colour, figure = i.figure},}
+ inv_image = ("rocket_default_%s.png^(rocket_default.png^[multiply:%s)"):format(color, figure_map[figure] or "white")
+ if not rdt then rdt = {{color = color, figure = figure},} end
rdt.texture = inv_image
- minetest.register_node("fireworkz:rocket_"..i.figure.."_"..i.colour, {
- description = S("Rocket").." (".. i.desc .. "|"..figure_desc..")",
+ minetest.register_node("fireworkz:rocket_"..figure.."_"..color, {
+ description = S("Rocket").." (".. desc .. "|"..figure_desc..")",
drawtype = "plantlike",
light_source = 5,
inventory_image = inv_image,
@@ -327,6 +310,28 @@ for _, i in pairs(variant_list) do
meta:set_string("firework:rdt", minetest.serialize(rdt))
end,
})
+ if recipe then
+ if recipe == true then
+ local m = figure_ingredient_map[figure]
+ if m then
+ local function r(x)
+ if not m[x] then return "" end
+ if m[x] == true then return "default:paper" end
+ return m[x]
+ end
+ minetest.register_craft {
+ output = "fireworkz:rocket_"..figure.."_"..color,
+ recipe = {
+ {r(1), r(2), r(3)},
+ {r(4), "tnt:gunpowder", r(5)},
+ {r(6), "dye:"..color, r(7)}
+ }
+ }
+ end
+ else
+ minetest.register_craft(recipe)
+ end
+ end
end
fireworkz.launch = function(pos, rdt)
@@ -340,45 +345,19 @@ fireworkz.launch = function(pos, rdt)
obj_ent.rdt = rdt
end
-for k,v in pairs {green = "green", orange = "yellow", red = "red", violet = "blue"} do
- minetest.register_alias("fireworks:"..k, "fireworkz:rocket_default_"..v)
-end
-
--- Crafting
+-- Register
for _, i in pairs(color_variants) do
for _, j in pairs(figure_variants) do
- local m = figure_ingredient_map
- local p = "default:paper"
- if m[j] then
- m = m[j]
- minetest.register_craft{
- output = ("fireworkz:rocket_%s_%s"):format(j, i),
- recipe = {
- {m[1] and p or "", m[2] and p or "", m[3] and p or ""},
- {m[4] and p or "", "tnt:gunpowder", m[5] and p or ""},
- {m[6] and p or "", "dye:"..i, m[7] and p or ""},
- }
- }
- end
+ register_fireworkz(i, j, nil, nil, true)
end
end
-minetest.register_craft({
- output = "fireworkz:rocket_ball_default_love_blue_white_red",
- recipe = {
- {"dye:blue", "dye:white", "dye:red"},
- {"default:paper", "tnt:gunpowder", "default:paper"},
- {"default:paper", "default:paper", "default:paper"}
- },
-})
+for _, i in pairs(variant_list) do
+ register_fireworkz(i.color, i.figure, i.desc, i.rdt, i.recipe)
+end
-minetest.register_craft({
- output = "fireworkz:rocket_ball_default_love_green_yellow_red",
- recipe = {
- {"dye:green", "dye:yellow", "dye:red"},
- {"default:paper", "tnt:gunpowder", "default:paper"},
- {"default:paper", "default:paper", "default:paper"}
- },
-})
+for k,v in pairs {green = "green", orange = "yellow", red = "red", violet = "blue"} do
+ minetest.register_alias("fireworks:"..k, "fireworkz:rocket_default_"..v)
+end