incerase number of particles and improve bounce

master
Brett O'Donnell 2012-09-16 14:24:18 +09:30
parent 61e5bcabc6
commit 1fb64627e6
2 changed files with 21 additions and 11 deletions

28
api.lua
View File

@ -14,7 +14,7 @@ API
particles = {} particles = {}
-- dig_particles -- dig_particles
particles.dig_particles = 12 particles.dig_particles = 64
-- registered_dig_particles -- registered_dig_particles
particles.registered_dig_particles = {nodes={},textures={}} particles.registered_dig_particles = {nodes={},textures={}}
@ -29,22 +29,32 @@ particles.register_dig_particle = function(node,texture,params)
local entity = {} local entity = {}
entity.visual = "cube" entity.visual = "cube"
entity.physical = true entity.physical = true
entity.collisionbox = {-0.01,-0.01,-0.01,0.01,0.01,0.01} 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"} entity.textures = {texture..".png",texture..".png",texture..".png",texture..".png",texture..".png",texture..".png"}
for i=1,particles.dig_particles do for i=1,particles.dig_particles do
local size = math.random(11,17)/100 local size = math.random(5,9)/100
entity.visual_size = {x=size, y=size} entity.visual_size = {x=size, y=size}
entity.timer = math.random(100,150)/100 entity.timer = math.random(200,250)/100
entity.bounce = math.random(40,60)/100 entity.lastpos = nil
entity.bounced = 0
entity.on_step = function(self, dtime) entity.on_step = function(self, dtime)
self.timer = self.timer - dtime self.timer = self.timer - dtime
if self.timer < 0 then if self.timer < 0 then
self.object:remove() self.object:remove()
end end
if self.timer < self.bounce then local pos = self.object:getpos()
self.bounce = 0 if self.bounced < 2 and self.lastpos and self.lastpos.y == pos.y then
self.object:setvelocity({x=math.random()/10,y=math.random()+1,z=math.random()/10}) 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 end
self.lastpos = pos
end end
entity.on_activate = function(self, staticdata) entity.on_activate = function(self, staticdata)
self.object:setacceleration({x=0, y=-7-(math.random()*2), z=0}) self.object:setacceleration({x=0, y=-7-(math.random()*2), z=0})
@ -71,7 +81,7 @@ particles.on_dignode = function(pos, oldnode, digger)
} }
location.vel = { location.vel = {
x = math.random(-300,300)/100, x = math.random(-300,300)/100,
y = math.random()*4, y = math.random(100,500)/100,
z = math.random(-300,300)/100 z = math.random(-300,300)/100
} }
node = "particles:"..particles.registered_dig_particles.nodes[oldnode.name]..i node = "particles:"..particles.registered_dig_particles.nodes[oldnode.name]..i

View File

@ -28,7 +28,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 +55,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,