From 627ef2a122e24f2fe84bb4ff5c89497d438bc4c5 Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Sun, 16 Sep 2012 18:25:13 +0200 Subject: [PATCH] Add particle effects to all nodes --- api.lua | 148 ++++++++++++++++++------------- init.lua | 9 -- mod_default.lua | 49 ---------- mod_mesecons.lua | 51 ----------- textures/particles_black.png | Bin 200 -> 0 bytes textures/particles_brown.png | Bin 200 -> 0 bytes textures/particles_gray.png | Bin 200 -> 0 bytes textures/particles_green.png | Bin 200 -> 0 bytes textures/particles_lightgray.png | Bin 200 -> 0 bytes textures/particles_red.png | Bin 200 -> 0 bytes textures/particles_tan.png | Bin 200 -> 0 bytes textures/particles_white.png | Bin 200 -> 0 bytes textures/particles_yellow.png | Bin 200 -> 0 bytes 13 files changed, 84 insertions(+), 173 deletions(-) delete mode 100644 mod_default.lua delete mode 100644 mod_mesecons.lua delete mode 100644 textures/particles_black.png delete mode 100644 textures/particles_brown.png delete mode 100644 textures/particles_gray.png delete mode 100644 textures/particles_green.png delete mode 100644 textures/particles_lightgray.png delete mode 100644 textures/particles_red.png delete mode 100644 textures/particles_tan.png delete mode 100644 textures/particles_white.png delete mode 100644 textures/particles_yellow.png diff --git a/api.lua b/api.lua index a01bb22..4504111 100644 --- a/api.lua +++ b/api.lua @@ -14,79 +14,99 @@ API particles = {} -- dig_particles -particles.dig_particles = 64 +particles.dig_particles = 32 --- registered_dig_particles -particles.registered_dig_particles = {nodes={},textures={}} - --- register_dig_particle -particles.register_dig_particle = function(node,texture,params) - particles.registered_dig_particles.nodes[node] = texture - if particles.registered_dig_particles.textures[texture] ~= nil then - return - end - particles.registered_dig_particles.textures[texture] = true - local entity = {} - entity.visual = "cube" - entity.physical = true - entity.collisionbox = {-0.05,-0.05,-0.05,0.05,0.05,0.05} - entity.textures = {texture..".png",texture..".png",texture..".png",texture..".png",texture..".png",texture..".png"} - for i=1,particles.dig_particles do - local size = math.random(5,9)/100 - entity.visual_size = {x=size, y=size} - entity.timer = math.random(200,250)/100 - entity.lastpos = nil - entity.bounced = 0 - entity.on_step = function(self, dtime) - self.timer = self.timer - dtime - if self.timer < 0 then - self.object:remove() +-- register entity +minetest.register_entity("particles:particle", { + physical = true, + collisionbox = {-0.05,-0.05,-0.05,0.05,0.05,0.05}, + timer = 0, + timer2 = 0, + + on_activate = function(self, staticdata) + -- Let the entity move random-ish arround + local obj = self.object + obj:setacceleration({x=0, y=-5, z=0}) + obj:setvelocity({x=(math.random(0,60)-30)/30, y=(math.random(0,60))/30, z=(math.random(0,60)-30)/30}) + obj:setyaw(math.random(0,359)/180*math.pi) + self.timer = math.random(0, 6)/3 + end, + + on_step = function(self, dtime) + -- stop "sliding" on the ground + self.timer2 = self.timer2+dtime + if self.timer2 >= 0.5 then + if self.object:getvelocity().y == 0 then + self.object:setvelocity({x=0, y=0, z=0}) end - local pos = self.object:getpos() - if self.bounced < 2 and self.lastpos and self.lastpos.y == pos.y then - if self.bounced==2 then - self.object:remove() - elseif self.bounced==1 then - self.object:setvelocity({x=0,y=math.random()+1,z=0}) - else - local vel = self.object:getvelocity() - self.object:setvelocity({x=vel.x/2,y=math.random(),z=vel.z/2}) - end - self.bounced = self.bounced+1 - end - self.lastpos = pos + self.timer2 = 0 end - entity.on_activate = function(self, staticdata) - self.object:setacceleration({x=0, y=-7-(math.random()*2), z=0}) + + -- remove after ~3 seconds + self.timer = self.timer+dtime + if self.timer >= 3 then + self.object:remove() end - if params~=nil then for k,v in pairs(params) do - entity[k]=v - end end - minetest.register_entity("particles:"..texture..i, entity) - end -end + end, +}) -- on_dignode particles.on_dignode = function(pos, oldnode, digger) - if not particles.registered_dig_particles.nodes[oldnode.name] then + local node = minetest.registered_nodes[oldnode.name] + -- if the no_particles group is set dont add particles + if node.groups.no_particles then return end - local location = {} - local node = "" + -- try to get the textures from the dig_result instead of the digged node + local tmp = minetest.get_node_drops(oldnode.name, digger:get_wielded_item():get_name()) + if type(tmp) == "string" then + node = minetest.registered_nodes[tmp] + elseif type(tmp) == "table" and tmp[1] and tmp[1].get_name then + node = minetest.registered_nodes[tmp[1]:get_name()] + end + -- if dig result is an item + if node == nil then + node = minetest.registered_nodes[oldnode.name] + -- prevent unwanted effects + if node == nil then + return + end + end for i=1,particles.dig_particles do - location.pos = { - x = pos.x+1-(math.random()*1.5), - y = pos.y+math.random()/2, - z = pos.z+1-(math.random()*1.5) - } - location.vel = { - x = math.random(-300,300)/100, - y = math.random(100,500)/100, - z = math.random(-300,300)/100 - } - node = "particles:"..particles.registered_dig_particles.nodes[oldnode.name]..i - e = minetest.env:add_entity(location.pos, node) - e:setvelocity(location.vel) - e:setyaw(math.rad(math.random(1,360))) + local dx = (math.random(0,10)-5)/10 + local dy = (math.random(0,10)-5)/10 + local dz = (math.random(0,10)-5)/10 + + -- spawn at random position in the node + local obj = minetest.env:add_entity({x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}, "particles:particle") + + -- set the textures + local textures = {} + local max = 1 + for i=1,6 do + if node.tiles then + if node.tiles[i] then + max = i + textures[i] = node.tiles[i] + else + textures[i] = node.tiles[max] + end + else -- its a item + textures[i] = node.inventory_image + end + end + -- set size + local vis_size= math.random(5,15)/100 + -- set drawtype + local vis = "cube" + -- make it upright_sprite if the drawtype of the node is not nodelike + if node.drawtype and node.drawtype ~= "normal" then + vis = "upright_sprite" + end + obj:set_properties({ + textures = textures, + visual_size = {x=vis_size, y=vis_size}, + visual = vis, + }) end end diff --git a/init.lua b/init.lua index 63a96fe..9f9d4d6 100644 --- a/init.lua +++ b/init.lua @@ -13,12 +13,6 @@ MAIN LOADER -- load api dofile(minetest.get_modpath("particles").."/api.lua") --- register register files for mods -dofile(minetest.get_modpath("particles").."/mod_default.lua") -if minetest.get_modpath("mesecons") ~= nil then - dofile(minetest.get_modpath("particles").."/mod_mesecons.lua") -end - -- register_on_dignode minetest.register_on_dignode(function(pos, oldnode, digger) particles.on_dignode(pos, oldnode, digger) @@ -80,6 +74,3 @@ minetest.register_abm({ minetest.env:add_entity({x=pos.x+math.random()*0.5,y=pos.y,z=pos.z+math.random()*0.5}, "particles:signalbubble") end, }) - --- log that we started -minetest.log("action", "[MOD]"..minetest.get_current_modname().." -- loaded from "..minetest.get_modpath(minetest.get_current_modname())) diff --git a/mod_default.lua b/mod_default.lua deleted file mode 100644 index 3dcfc0c..0000000 --- a/mod_default.lua +++ /dev/null @@ -1,49 +0,0 @@ ---[[ - -Particles for Minetest - -Copyright (c) 2012 cornernote, Brett O'Donnell -Source Code: https://github.com/cornernote/minetest-particles -License: GPLv3 - -DEFAULT MOD - -]]-- - --- register dig particles for default nodes -particles.register_dig_particle("default:bookshelf","default_book",{visual="sprite",textures={"default_book.png"}}) -particles.register_dig_particle("default:brick","default_brick") -particles.register_dig_particle("default:cactus","default_cactus_side") -particles.register_dig_particle("default:chest","default_wood") -particles.register_dig_particle("default:chest_locked","default_wood") -particles.register_dig_particle("default:clay","default_clay") -particles.register_dig_particle("default:cobble","default_cobble") -particles.register_dig_particle("default:desert_sand","default_desert_sand") -particles.register_dig_particle("default:desert_stone","default_desert_stone") -particles.register_dig_particle("default:dirt","default_dirt") -particles.register_dig_particle("default:dirt_with_grass","default_dirt") -particles.register_dig_particle("default:dirt_with_grass_footsteps","default_dirt") -particles.register_dig_particle("default:dry_shrub","default_dry_shrub") -particles.register_dig_particle("default:fence_wood","default_wood") -particles.register_dig_particle("default:furnace","default_cobble") -particles.register_dig_particle("default:glass","default_glass") -particles.register_dig_particle("default:gravel","default_gravel") -particles.register_dig_particle("default:junglegrass","default_junglegrass") -particles.register_dig_particle("default:jungletree","default_jungletree") -particles.register_dig_particle("default:ladder","default_wood") -particles.register_dig_particle("default:leaves","default_leaves") -particles.register_dig_particle("default:mese","default_mese") -particles.register_dig_particle("default:mossycobble","default_mossycobble") -particles.register_dig_particle("default:papyrus","default_papyrus") -particles.register_dig_particle("default:rail","default_rail") -particles.register_dig_particle("default:sand","default_sand") -particles.register_dig_particle("default:sandstone","default_sandstone") -particles.register_dig_particle("default:sapling","default_dirt") -particles.register_dig_particle("default:sign_wall","default_wood") -particles.register_dig_particle("default:steelblock","default_steelblock") -particles.register_dig_particle("default:stone","default_stone") -particles.register_dig_particle("default:stone_with_coal","default_stone") -particles.register_dig_particle("default:stone_with_iron","default_stone") -particles.register_dig_particle("default:torch","default_wood") -particles.register_dig_particle("default:tree","default_tree") -particles.register_dig_particle("default:wood","default_wood") diff --git a/mod_mesecons.lua b/mod_mesecons.lua deleted file mode 100644 index eb0988b..0000000 --- a/mod_mesecons.lua +++ /dev/null @@ -1,51 +0,0 @@ ---[[ - -Particles for Minetest - -Copyright (c) 2012 cornernote, Brett O'Donnell -Source Code: https://github.com/cornernote/minetest-particles -License: GPLv3 - -MESECONS MOD - -]]-- - - --- register dig particles for mesecons nodes -particles.register_dig_particle("mesecons_powerplant:power_plant","particles_yellow") -particles.register_dig_particle("mesecons_random:removestone","particles_gray") -particles.register_dig_particle("mesecons_lamp:lamp_off","particles_yellow") -particles.register_dig_particle("mesecons_lamp:lamp_on","particles_yellow") -particles.register_dig_particle("mesecons:mesecon_off","particles_yellow") -particles.register_dig_particle("mesecons:mesecon_on","particles_yellow") -particles.register_dig_particle("mesecons_detector:object_detector_off","particles_lightgray") -particles.register_dig_particle("mesecons_detector:object_detector_on","particles_lightgray") -particles.register_dig_particle("mesecons_wireless:wireless_inverter_on","particles_brown") -particles.register_dig_particle("mesecons_wireless:wireless_inverter_off","particles_brown") -particles.register_dig_particle("mesecons_wireless:wireless_receiver_on","particles_brown") -particles.register_dig_particle("mesecons_wireless:wireless_receiver_off","particles_brown") -particles.register_dig_particle("mesecons_wireless:wireless_transmitter_on","particles_brown") -particles.register_dig_particle("mesecons_wireless:wireless_transmitter_off","particles_brown") -particles.register_dig_particle("mesecons_switch:mesecon_switch_off","particles_gray") -particles.register_dig_particle("mesecons_switch:mesecon_switch_off","particles_gray") -particles.register_dig_particle("mesecons_button:button_on","particles_yellow") -particles.register_dig_particle("mesecons_button:button_off","particles_yellow") -particles.register_dig_particle("mesecons_pistons:piston_normal","particles_brown") -particles.register_dig_particle("mesecons_pistons:piston_sticky","particles_brown") -particles.register_dig_particle("mesecons_blinkyplant:blinky_plant_off","particles_yellow") -particles.register_dig_particle("mesecons_blinkyplant:blinky_plant_on","particles_yellow") -particles.register_dig_particle("mesecons_torch:mesecon_torch_off","particles_yellow") -particles.register_dig_particle("mesecons_torch:mesecon_torch_on","particles_yellow") -particles.register_dig_particle("mesecons_hydroturbine:hydro_turbine_off","particles_gray") -particles.register_dig_particle("mesecons_hydroturbine:hydro_turbine_on","particles_gray") -particles.register_dig_particle("mesecons_pressureplates:pressure_plate_stone_off","particles_gray") -particles.register_dig_particle("mesecons_pressureplates:pressure_plate_stone_on","particles_gray") -particles.register_dig_particle("mesecons_pressureplates:pressure_plate_wood_off","particles_brown") -particles.register_dig_particle("mesecons_pressureplates:pressure_plate_wood_on","particles_brown") -particles.register_dig_particle("mesecons_temperest:mesecon_socket_off","particles_gray") -particles.register_dig_particle("mesecons_temperest:mesecon_socket_on","particles_red") -particles.register_dig_particle("mesecons_temperest:mesecon_inverter_off","particles_gray") -particles.register_dig_particle("mesecons_temperest:mesecon_inverter_on","particles_red") -particles.register_dig_particle("mesecons_temperest:mesecon_plug","particles_black") -particles.register_dig_particle("mesecons_movestones:movestone","particles_gray") -particles.register_dig_particle("mesecons_movestones:sticky_movestone","particles_gray") diff --git a/textures/particles_black.png b/textures/particles_black.png deleted file mode 100644 index 39b56c447e0e4c0a8b87cb6fe13da6af11df199b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryEa{HEjtmSN`?>!lvI6;>1s;*b z3=G^tAk28_ZrvZCAbW|YuPgfbP0l+XkK2lq11 diff --git a/textures/particles_brown.png b/textures/particles_brown.png deleted file mode 100644 index b9571c648addbb27ac556550b8451b5f264dfcb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryEa{HEjtmSN`?>!lvI6;>1s;*b z3=G^tAk28_ZrvZCAbW|YuPgf!lvI6;>1s;*b z3=G^tAk28_ZrvZCAbW|YuPgfgTe~DWM4f4wEuP diff --git a/textures/particles_green.png b/textures/particles_green.png deleted file mode 100644 index 880a25e5dff25bfebd9573fbc27aeeda54867b0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryEa{HEjtmSN`?>!lvI6;>1s;*b z3=G^tAk28_ZrvZCAbW|YuPgfn|_rQ-MN~C9V-A&iT2ysd*&~&PAz-C8;S2 z<(VZJ3hti10pX2&;y^`GAVtCXX(i=}MX3w{iJ5sNdVa1U3T4K6rh0}3249L60#)&N jx;TbNgeQNPeUy!XNrU0NcD>Mhpg4o4tDnm{r-UW|bQ?6X diff --git a/textures/particles_lightgray.png b/textures/particles_lightgray.png deleted file mode 100644 index 1e07094acc1b3c7b9c464ca6184db7bafaaf1608..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryEa{HEjtmSN`?>!lvI6;>1s;*b z3=G^tAk28_ZrvZCAbW|YuPgf<7Isc{hQ{}!lvI6;>1s;*b z3=G^tAk28_ZrvZCAbW|YuPgfwc6x=<11Hv2m#DR*WK#GF%(@M${i&7Z^5;OBk^!!{y6v~YCO!W*6489aC1ghfk jba4!k2v6Q|T*e diff --git a/textures/particles_tan.png b/textures/particles_tan.png deleted file mode 100644 index ae1a4d6b8525cf6e8b79daca22550da71f59e061..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryEa{HEjtmSN`?>!lvI6;>1s;*b z3=G^tAk28_ZrvZCAbW|YuPgfwc6x=<11Hv2m#DR*WK#GF%(@M${i&7Z^5;OBk^!!{y6v~YCO!W*6489aC1ghfk jba4!k2v6QoUB=45a+fLCCiBn%pg4o4tDnm{r-UW|Z8J2Z diff --git a/textures/particles_white.png b/textures/particles_white.png deleted file mode 100644 index c0c395280e1019ee0a7704d956bc24887dfea2a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryEa{HEjtmSN`?>!lvI6;>1s;*b z3=G^tAk28_ZrvZCAbW|YuPgfaiAh8kfPxHw370~qEv=}#LT=BJwMkFg)(D3Q$0figD*u3fvR{s jT^vIs!jpge|8LL0`j6?~a?{2Zpg4o4tDnm{r-UW|Ej~52 diff --git a/textures/particles_yellow.png b/textures/particles_yellow.png deleted file mode 100644 index d8378ed46b10f101e96140a80e0c7d1363dfd26e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1SBVv2j2ryEa{HEjtmSN`?>!lvI6;>1s;*b z3=G^tAk28_ZrvZCAbW|YuPgfwc6x=<11Hv2m#DR*WK#GF%(@M${i&7Z^5;OBk^!!{y6v~YCO!W*6489aC1ghfk jba4!k2v7d;KVF7`Rg6h2qwSmmP@KWj)z4*}Q$iB}KkhTT