Post by eyfenna on Jul 28, 2019 12:24:58 GMT -6
Added the mouse as simple attractor, push mousebutton 1 to ge the particles to move in direction of the mouse pointer:
'
' Particle System from the ground up....
'
' http://buildnewgames.com/particle-systems/
'
xmax = 800
ymax = 600
WindowOpen(0,"Particle Test",0,0,xmax,ymax,0)
Window(0)
CanvasOpen(0,xmax,ymax,0,0,xmax,ymax,0)
Canvas(0)
randomize(timer)
pi = 3.141592654
particles = 20
' DEFINE SYSTEM
dim particleX[particles]
dim particleY[particles]
dim particleLife[particles]
dim particleAngle[particles]
dim particleSpeed[particles]
dim particleVelX[particles]
dim particleVelY[particles]
dim particleColor[particles]
dim i
' INITIALIZE SYSTEM
for i = 0 to particles - 1
particleX[i] = 395
particleY[i] = 445
particleLife[i] = 1
particleAngle[i] = 0
particleSpeed[i] = 0
particleVelX[i] = 0
particleVelY[i] = 0
particleColor[i] = rgba(0,0,0,0)
next
' DEFINE MINIMUM MAXIMUM RANGE OF RANDOM NUMBERS
function range(minimum, maximum)
return minimum + rand((maximum + 1) - minimum)
end function
' PARTICLE FUNCTION
function Particle(p ,x, y, life, angle, speed, colour)
particleX[p] = x
particleY[p] = y
particleLife[p] = life
particleAngle[p] = Rand(angle) * pi / 180
particleSpeed[p] = 1 + rand(speed)
particleVelX[p] = particleSpeed[p] * cos(particleAngle[p])
particleVelY[p] = 0 - particleSpeed[p] * sin(particleAngle[p])
particleColor[p] = colour
end function
' PARTICLE UPDATE FUNCTION - I hope....
function particleUpdate(p)
' DECIMENT THE LIFE PERIOD
particleLife[p] = particleLife[p] - 1
' MAKING THE PARTICLE TRANSPARENT
alpha = (particleLife[p]*5)+5
particleColor[p] = rgba(255,255,255,alpha)
' IF PARTICLE IS DEAD
if particleLife[p] = 0 then
particle(i, 400, 450, 50, 180, 10, rgba(255,255,255,255))
end if
' IF STILL ACTIVE THEN UPDATE
if particleLife[p] > 0 then
dim mx
dim my
dim mb1
dim mb2
dim mb3
GetMouse(mx, my, mb1, mb2,mb3)
if mb1 then
dparticleX = mx - particleX[p]
dparticleY = my - particleY[p]
particleX[p] = particleX[p] + dparticleX/20
particleY[p] = particleY[p] + dparticleY/20
else
particleX[p] = particleX[p] + particleVelX[p]
particleY[p] = particleY[p] + particleVelY[p]
end if
end if
end function
' PARTICLE DRAW FUNCTION - I hope....
function particleDraw(p)
' IS THE PARTICLE ACTIVE?
if particleLife[p] > 0 then
setColor(particleColor[p])
circleFill(particleX[p], particleY[p], 5)
' IS THE PARTICLE STILL ON THE SCREEN?
' IF NOT THEN SET IT TO INACTIVE
if particleX[p] > xmax + 10 or particleX[p] < -10 or particleY[p] > ymax + 10 or particleY[p] < -10 then
particleLife[p] = 0
end if
end if
' DRAW FOCUS POINT
setColor(rgb(0,255,0))
rectFill(395,445,10,10)
end function
' MAIN LOOP
For i = 0 To particles - 1
particle(i, 400, 450, 50, 180, 10, rgba(255,255,255,255))
Next
do
clearcanvas
For i = 0 To particles - 1
particleUpdate(i)
particleDraw(i)
Next
update()
loop until key(k_escape) = 1