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 39b56c4..0000000 Binary files a/textures/particles_black.png and /dev/null differ diff --git a/textures/particles_brown.png b/textures/particles_brown.png deleted file mode 100644 index b9571c6..0000000 Binary files a/textures/particles_brown.png and /dev/null differ diff --git a/textures/particles_gray.png b/textures/particles_gray.png deleted file mode 100644 index ada7a25..0000000 Binary files a/textures/particles_gray.png and /dev/null differ diff --git a/textures/particles_green.png b/textures/particles_green.png deleted file mode 100644 index 880a25e..0000000 Binary files a/textures/particles_green.png and /dev/null differ diff --git a/textures/particles_lightgray.png b/textures/particles_lightgray.png deleted file mode 100644 index 1e07094..0000000 Binary files a/textures/particles_lightgray.png and /dev/null differ diff --git a/textures/particles_red.png b/textures/particles_red.png deleted file mode 100644 index 5faf366..0000000 Binary files a/textures/particles_red.png and /dev/null differ diff --git a/textures/particles_tan.png b/textures/particles_tan.png deleted file mode 100644 index ae1a4d6..0000000 Binary files a/textures/particles_tan.png and /dev/null differ diff --git a/textures/particles_white.png b/textures/particles_white.png deleted file mode 100644 index c0c3952..0000000 Binary files a/textures/particles_white.png and /dev/null differ diff --git a/textures/particles_yellow.png b/textures/particles_yellow.png deleted file mode 100644 index d8378ed..0000000 Binary files a/textures/particles_yellow.png and /dev/null differ