Add particle effects to all nodes
146
api.lua
@ -14,79 +14,99 @@ API
|
|||||||
particles = {}
|
particles = {}
|
||||||
|
|
||||||
-- dig_particles
|
-- dig_particles
|
||||||
particles.dig_particles = 64
|
particles.dig_particles = 32
|
||||||
|
|
||||||
-- registered_dig_particles
|
-- register entity
|
||||||
particles.registered_dig_particles = {nodes={},textures={}}
|
minetest.register_entity("particles:particle", {
|
||||||
|
physical = true,
|
||||||
|
collisionbox = {-0.05,-0.05,-0.05,0.05,0.05,0.05},
|
||||||
|
timer = 0,
|
||||||
|
timer2 = 0,
|
||||||
|
|
||||||
-- register_dig_particle
|
on_activate = function(self, staticdata)
|
||||||
particles.register_dig_particle = function(node,texture,params)
|
-- Let the entity move random-ish arround
|
||||||
particles.registered_dig_particles.nodes[node] = texture
|
local obj = self.object
|
||||||
if particles.registered_dig_particles.textures[texture] ~= nil then
|
obj:setacceleration({x=0, y=-5, z=0})
|
||||||
return
|
obj:setvelocity({x=(math.random(0,60)-30)/30, y=(math.random(0,60))/30, z=(math.random(0,60)-30)/30})
|
||||||
end
|
obj:setyaw(math.random(0,359)/180*math.pi)
|
||||||
particles.registered_dig_particles.textures[texture] = true
|
self.timer = math.random(0, 6)/3
|
||||||
local entity = {}
|
end,
|
||||||
entity.visual = "cube"
|
|
||||||
entity.physical = true
|
on_step = function(self, dtime)
|
||||||
entity.collisionbox = {-0.05,-0.05,-0.05,0.05,0.05,0.05}
|
-- stop "sliding" on the ground
|
||||||
entity.textures = {texture..".png",texture..".png",texture..".png",texture..".png",texture..".png",texture..".png"}
|
self.timer2 = self.timer2+dtime
|
||||||
for i=1,particles.dig_particles do
|
if self.timer2 >= 0.5 then
|
||||||
local size = math.random(5,9)/100
|
if self.object:getvelocity().y == 0 then
|
||||||
entity.visual_size = {x=size, y=size}
|
self.object:setvelocity({x=0, y=0, z=0})
|
||||||
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()
|
|
||||||
end
|
end
|
||||||
local pos = self.object:getpos()
|
self.timer2 = 0
|
||||||
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
|
|
||||||
end
|
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
|
end
|
||||||
if params~=nil then for k,v in pairs(params) do
|
end,
|
||||||
entity[k]=v
|
})
|
||||||
end end
|
|
||||||
minetest.register_entity("particles:"..texture..i, entity)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- on_dignode
|
-- on_dignode
|
||||||
particles.on_dignode = function(pos, oldnode, digger)
|
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
|
return
|
||||||
end
|
end
|
||||||
local location = {}
|
-- try to get the textures from the dig_result instead of the digged node
|
||||||
local 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
|
for i=1,particles.dig_particles do
|
||||||
location.pos = {
|
local dx = (math.random(0,10)-5)/10
|
||||||
x = pos.x+1-(math.random()*1.5),
|
local dy = (math.random(0,10)-5)/10
|
||||||
y = pos.y+math.random()/2,
|
local dz = (math.random(0,10)-5)/10
|
||||||
z = pos.z+1-(math.random()*1.5)
|
|
||||||
}
|
-- spawn at random position in the node
|
||||||
location.vel = {
|
local obj = minetest.env:add_entity({x=pos.x+dx, y=pos.y+dy, z=pos.z+dz}, "particles:particle")
|
||||||
x = math.random(-300,300)/100,
|
|
||||||
y = math.random(100,500)/100,
|
-- set the textures
|
||||||
z = math.random(-300,300)/100
|
local textures = {}
|
||||||
}
|
local max = 1
|
||||||
node = "particles:"..particles.registered_dig_particles.nodes[oldnode.name]..i
|
for i=1,6 do
|
||||||
e = minetest.env:add_entity(location.pos, node)
|
if node.tiles then
|
||||||
e:setvelocity(location.vel)
|
if node.tiles[i] then
|
||||||
e:setyaw(math.rad(math.random(1,360)))
|
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
|
||||||
end
|
end
|
||||||
|
9
init.lua
@ -13,12 +13,6 @@ MAIN LOADER
|
|||||||
-- load api
|
-- load api
|
||||||
dofile(minetest.get_modpath("particles").."/api.lua")
|
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
|
-- register_on_dignode
|
||||||
minetest.register_on_dignode(function(pos, oldnode, digger)
|
minetest.register_on_dignode(function(pos, oldnode, digger)
|
||||||
particles.on_dignode(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")
|
minetest.env:add_entity({x=pos.x+math.random()*0.5,y=pos.y,z=pos.z+math.random()*0.5}, "particles:signalbubble")
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
-- log that we started
|
|
||||||
minetest.log("action", "[MOD]"..minetest.get_current_modname().." -- loaded from "..minetest.get_modpath(minetest.get_current_modname()))
|
|
||||||
|
@ -1,49 +0,0 @@
|
|||||||
--[[
|
|
||||||
|
|
||||||
Particles for Minetest
|
|
||||||
|
|
||||||
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
|
|
||||||
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")
|
|
@ -1,51 +0,0 @@
|
|||||||
--[[
|
|
||||||
|
|
||||||
Particles for Minetest
|
|
||||||
|
|
||||||
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
|
|
||||||
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")
|
|
Before Width: | Height: | Size: 200 B |
Before Width: | Height: | Size: 200 B |
Before Width: | Height: | Size: 200 B |
Before Width: | Height: | Size: 200 B |
Before Width: | Height: | Size: 200 B |
Before Width: | Height: | Size: 200 B |
Before Width: | Height: | Size: 200 B |
Before Width: | Height: | Size: 200 B |
Before Width: | Height: | Size: 200 B |