Files
itgmania212121/Themes/default/BGAnimations/ScreenWithMenuElements background/_particleLoader.lua
T
2011-03-17 01:47:30 -04:00

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;