local Params = { NumParticles = 80, VelocityXMin = 100, VelocityXMax = 400, VelocityYMin = 0, VelocityYMax = 0, VelocityZMin = 0, VelocityZMax = 0, BobRateZMin = 0.4, BobRateZMax = 0.7, ZoomMin = 0.5, ZoomMax = 1, SpinZ = 0, BobZ = 52, File = "_particle normal", }; local t = Def.ActorFrame{}; local tParticleInfo = {} for i=1,Params.NumParticles do tParticleInfo[i] = { X = math.random(Params.VelocityXMin, Params.VelocityXMax), Y = math.random(Params.VelocityYMin, Params.VelocityYMax), Z = math.random(Params.VelocityZMin, Params.VelocityZMax), Zoom = math.random(Params.ZoomMin*1000,Params.ZoomMax*1000) / 1000, BobZRate = math.random(Params.BobRateZMin*1000,Params.BobRateZMax*1000) / 1000, Age = 0, }; t[#t+1] = LoadActor( Params.File )..{ Name="Particle"..i; InitCommand=function(self) self:basezoom(tParticleInfo[i].Zoom); self:x(math.random(SCREEN_LEFT+(self:GetWidth()/2),SCREEN_RIGHT-(self:GetWidth()/2))); self:y(math.random(SCREEN_TOP+(self:GetHeight()/2),SCREEN_BOTTOM-(self:GetHeight()/2))); -- self:z(math.random(-64,0)); end; OnCommand=cmd(diffuse,ColorLightTone(color("#ffd400"));diffusealpha,0.8); }; end local function UpdateParticles(self,DeltaTime) tParticles = self:GetChildren(); for i=1, Params.NumParticles do local p = tParticles["Particle"..i]; local vX = tParticleInfo[i].X; local vY = tParticleInfo[i].Y; local vZ = tParticleInfo[i].Z; tParticleInfo[i].Age = tParticleInfo[i].Age + DeltaTime; p:x(p:GetX() + (vX * DeltaTime)); p:y(p:GetY() + (vY * DeltaTime)); p:z(p:GetZ() + (vZ * DeltaTime)); -- p:zoom( 1 + math.cos( -- (tParticleInfo[i].Age * math.pi*2) -- ) * 0.125 ); if p:GetX() > SCREEN_RIGHT + (p:GetWidth()/2 - p:GetZ()) then p:x(SCREEN_LEFT - (p:GetWidth()/2)); elseif p:GetX() < SCREEN_LEFT - (p:GetWidth()/2 - p:GetZ()) then p:x(SCREEN_RIGHT + (p:GetWidth()/2)); end if p:GetY() > SCREEN_BOTTOM + (p:GetHeight()/2 - p:GetZ()) then p:y(SCREEN_TOP - (p:GetHeight()/2)); elseif p:GetY() < SCREEN_TOP - (p:GetHeight()/2 - p:GetZ()) then p:y(SCREEN_BOTTOM + (p:GetHeight()/2)); end end; end; t.InitCommand = cmd(fov,90;SetUpdateFunction,UpdateParticles); return t;