73 lines
2.2 KiB
Lua
73 lines
2.2 KiB
Lua
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;
|