From fb009b2cc26be08279933e8c8a688dc0926c20fe Mon Sep 17 00:00:00 2001 From: ywang Date: Mon, 28 Dec 2020 12:46:38 +0100 Subject: Minor improvements --- init.lua | 195 ++++++++++++++++++++++++++++----------------------------------- 1 file 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 -- cgit v1.2.3