A faster starfield

BlitzMax Forums/BlitzMax Programming/A faster starfield

Thanks for the suggestion. Does this look any better in your oppinion?
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.