Thanks for the suggestion. Does this look any better in your oppinion?
The usage is exactly the same.
Type TStarfield Global list:TList = CreateList() Field sx#,sy# Field layersX:Float[] Field layersY:Float[] Field layersR:Int[] Field layersG:Int[] Field layersB:Int[] Field layersSpeed:Float[] Field layersSize:Float[] Field layersTime:Int[] Field nstars Field rate Method New() list.addlast(Self) End Method Function Create:TStarfield(density#) Local s:TStarfield = New TStarfield s.nstars = width*height*density s.rate = 700 s.layersX = New Float[s.nstars] s.layersY = New Float[s.nstars] s.layersR = New Int[s.nstars] s.layersG = New Int[s.nstars] s.layersB = New Int[s.nstars] s.layersSize = New Float[s.nstars] s.layersSpeed = New Float[s.nstars] s.layersTime = New Int[s.nstars] For Local t = 0 To s.nstars-1 s.layersX[t]= Rnd(width) s.layersY[t]= Rnd(height) s.layersR[t]= Rand(100)+155 s.layersG[t]= Rand(100)+155 s.layersB[t]= Rand(100)+155 s.layersSpeed[t]= (Rnd(2)+1)/2 s.layersSize[t]= Rnd(2)+1 Next Return s End Function Function DrawAll() For Local i:TStarfield = EachIn(list) i.draw() Next End Function Method Randomize() For Local i = 0 To nstars-1 layersX[i]= Rnd(width) layersY[i]= Rnd(height) layersR[i]= Rand(100)+155 layersG[i]= Rand(100)+155 layersB[i]= Rand(100)+155 layersSpeed[i]= (Rnd(2)+1)/2 layersSize[i]= Rnd(2)+1 Next End Method Method Move(x#,y#) For Local i = 0 To nstars-1 layersX[i]:+x*layersSpeed[i] layersY[i]:+y*layersSpeed[i] If layersX[i]>width layersX[i] = 0 layersY[i] = Rnd(height) layersR[i]= Rand(100)+155 layersG[i]= Rand(100)+155 layersB[i]= Rand(100)+155 layersSpeed[i]= (Rnd(2)+1)/2 layersSize[i]= Rnd(2)+1 ElseIf layersX[i]<0 layersX[i] = width layersY[i] = Rnd(height) layersR[i]= Rand(100)+155 layersG[i]= Rand(100)+155 layersB[i]= Rand(100)+155 layersSpeed[i]= (Rnd(2)+1)/2 layersSize[i]= Rnd(2)+1 EndIf If layersY[i]>height layersY[i] = 0 layersX[i] = Rnd(width) layersR[i]= Rand(100)+155 layersG[i]= Rand(100)+155 layersB[i]= Rand(100)+155 layersSpeed[i]= (Rnd(2)+1)/2 layersSize[i]= Rnd(2)+1 ElseIf layersY[i]<0 layersY[i] = height layersX[i] = Rnd(width) layersR[i]= Rand(100)+155 layersG[i]= Rand(100)+155 layersB[i]= Rand(100)+155 layersSpeed[i]= (Rnd(2)+1)/2 layersSize[i]= Rnd(2)+1 EndIf Next End Method Method Draw() Local time = MilliSecs() For Local i = 0 To nstars-1 If layersX[i]>0 And layersX[i]<width And layersY[i]>0 And layersY[i]<height If time - layersTime[i]>rate And Rand(4000) = 1 Then layersTime[i] = MilliSecs() If time-layersTime[i]<rate SetColor layersR[i]/2,layersG[i]/2,layersB[i]/2 DrawRect layersX[i]-layersSize[i]/2,layersY[i]-layersSize[i]/2,layersSize[i],layersSize[i] Else SetColor layersR[i],layersG[i],layersB[i] DrawRect layersX[i]-layersSize[i]/2,layersY[i]-layersSize[i]/2,layersSize[i],layersSize[i] EndIf EndIf Next SetColor 255,255,255 End Method End Type
The usage is exactly the same.