Compare commits

...

5 Commits

Author SHA1 Message Date
PilzAdam 627ef2a122 Add particle effects to all nodes 2012-09-16 18:25:13 +02:00
Brett O'Donnell b27cae33e3 update readme 2012-09-16 21:04:34 +09:30
Brett O'Donnell 1fb64627e6 incerase number of particles and improve bounce 2012-09-16 14:24:18 +09:30
Brett O'Donnell 61e5bcabc6 increase particles and scatter range 2012-09-16 13:20:47 +09:30
Brett O'Donnell d77f358158 tweak dig nodes 2012-09-16 13:12:11 +09:30
14 changed files with 87 additions and 166 deletions

View File

@ -5,7 +5,7 @@ Particles for Minetest
Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com> Copyright (c) 2012 cornernote, Brett O'Donnell <cornernote@gmail.com>
Source Code: https://github.com/cornernote/minetest-infinite_chest Source Code: https://github.com/cornernote/minetest-particles
License: GPLv3 License: GPLv3

138
api.lua
View File

@ -14,69 +14,99 @@ API
particles = {} particles = {}
-- dig_particles -- dig_particles
particles.dig_particles = 8 particles.dig_particles = 32
-- registered_dig_particles -- register entity
particles.registered_dig_particles = {nodes={},textures={}} minetest.register_entity("particles:particle", {
physical = true,
-- register_dig_particle collisionbox = {-0.05,-0.05,-0.05,0.05,0.05,0.05},
particles.register_dig_particle = function(node,texture,params) timer = 0,
particles.registered_dig_particles.nodes[node] = texture timer2 = 0,
if particles.registered_dig_particles.textures[texture] ~= nil then
return on_activate = function(self, staticdata)
end -- Let the entity move random-ish arround
particles.registered_dig_particles.textures[texture] = true local obj = self.object
local entity = {} obj:setacceleration({x=0, y=-5, z=0})
entity.visual = "cube" obj:setvelocity({x=(math.random(0,60)-30)/30, y=(math.random(0,60))/30, z=(math.random(0,60)-30)/30})
entity.physical = true obj:setyaw(math.random(0,359)/180*math.pi)
entity.collisionbox = {-0.01,-0.01,-0.01,0.01,0.01,0.01} self.timer = math.random(0, 6)/3
entity.textures = {texture..".png",texture..".png",texture..".png",texture..".png",texture..".png",texture..".png"} end,
for i=1,particles.dig_particles do
local size = math.random(11,17)/100 on_step = function(self, dtime)
entity.visual_size = {x=size, y=size} -- stop "sliding" on the ground
entity.timer = math.random(100,150)/100 self.timer2 = self.timer2+dtime
entity.bounce = math.random(50,70)/100 if self.timer2 >= 0.5 then
entity.on_step = function(self, dtime) if self.object:getvelocity().y == 0 then
self.timer = self.timer - dtime self.object:setvelocity({x=0, y=0, z=0})
if self.timer < 0 then
self.object:remove()
end
if self.timer < self.bounce then
self.bounce = 0
self.object:setvelocity({x=math.random()/10,y=math.random()+1,z=math.random()/10})
end end
self.timer2 = 0
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(-100,100)/100,
y = math.random()*2, -- set the textures
z = math.random(-100,100)/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

View File

@ -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)
@ -28,7 +22,7 @@ end)
minetest.register_entity("particles:smoke", { minetest.register_entity("particles:smoke", {
physical = true, physical = true,
visual_size = {x=0.25, y=0.25}, visual_size = {x=0.25, y=0.25},
collisionbox = {-0.01,-0.01,-0.01,0.01,0.01,0.01}, collisionbox = {-0.05,-0.05,-0.05,0.05,0.05,0.05},
visual = "sprite", visual = "sprite",
textures = {"smoke_puff.png"}, textures = {"smoke_puff.png"},
on_step = function(self, dtime) on_step = function(self, dtime)
@ -55,7 +49,7 @@ minetest.register_abm({
minetest.register_entity("particles:signalbubble", { minetest.register_entity("particles:signalbubble", {
physical = true, physical = true,
visual_size = {x=0.10, y=0.10}, visual_size = {x=0.10, y=0.10},
collisionbox = {-0.01,-0.01,-0.01,0.01,0.01,0.01}, collisionbox = {-0.05,-0.05,-0.05,0.05,0.05,0.05},
visual = "sprite", visual = "sprite",
textures = {"particles_signalbubble.png"}, textures = {"particles_signalbubble.png"},
timer = 0, timer = 0,
@ -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()))

View File

@ -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")
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_dirt")
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_dirt")
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")

View File

@ -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")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 B