Pointers in types??

Blitz3D Forums/Blitz3D Programming/Pointers in types??

Glad you could use it, I have however modified it to include mutiply paths with any set of waypoints each:

Graphics 800,600,16,2

;create a new blue path
path1.path=PathNew(0,0,255)

;assign 4 waypoints to it
For n=1 To 4
	WaypointNew( path1,Rnd(780),Rnd(580) )
Next

;create a new yellow path
path2.path=PathNew(255,255,0)

;assign 7 waypoints to it
For n=1 To 7
	WaypointNew( path2,Rnd(780),Rnd(580) )
Next

Type player
	
	Field waypoint.waypoint

End Type

;create player 1 and let it follow path1
player1.player=New player
player1\waypoint=PathFirstWaypoint(path1)

;create player 1 and let it follow path2
player2.player=New player
player2\waypoint=PathFirstWaypoint(path2)

Repeat
Cls
Color 255,255,255
Text 400,20,"Press 1 to let player 1 go to next waypoint in path 1 (blue)",True
Text 400,40,"Press 2 to let player 2 go to next waypoint in path 2 (yellow)",True

;draw waypoints
For w.waypoint=Each waypoint
	Color w\path\r,w\path\g,w\path\b
	Oval w\x,w\y,18,18,False
	Text w\x+9,w\y+9,w\number,True,True
Next

Color 0,0,255
If Sin(Float(MilliSecs())*10.0)>0

	Oval player1\waypoint\x+6,player1\waypoint\y+6,6,6

Else

	Oval player1\waypoint\x-3,player1\waypoint\y-3,24,24,False
		
EndIf

Color 255,255,0
If Sin(Float(MilliSecs())*10.0)>0

	Oval player2\waypoint\x+6,player2\waypoint\y+6,6,6

Else

	Oval player2\waypoint\x-3,player2\waypoint\y-3,24,24,False
		
EndIf

If KeyHit(2)

	player1\waypoint=WaypointNext(player1\waypoint)

EndIf

If KeyHit(3)

	player2\waypoint=WaypointNext(player2\waypoint)

EndIf


Flip

Until KeyDown(1)
End	


Type path

	Field r,g,b
	Field f.waypoint ;first waypoint
	Field l.waypoint ;last waypoint
	
End Type

Function PathNew.path(r,g,b)

	p.path=New path
	p\r=r
	p\g=g
	p\b=b
	Return p

End Function

Function PathFirstWaypoint.waypoint(p.path)
	Return p\f
End Function

Type waypoint

	Field path.path
	Field number
	Field x#,y#
	Field p.waypoint ;previous waypoint
	Field n.waypoint ;next waypoint
	
End Type

Function WaypointNew.waypoint(p.path,x#,y#)

	w.waypoint=New waypoint
	
	w\path=p
	w\x=x
	w\y=y
	
	;check if path's first waypoint is empty
	If p\f=Null
		p\f=w
	EndIf
	;check if path's last waypoint is empty
	If p\l=Null
		p\l=w
	EndIf
	
	;assign path's last waypoint to the current waypoint's previous waypoint link
	w\p=p\l	
	
	w\p\n=w
	
	p\l=w
	
	w\number=w\p\number+1
	
	Return w
End Function

Function WaypointNext.waypoint(w.waypoint)

	If w\n=Null
		Return w\path\f
	EndIf
	
	Return w\n

End Function

Function WaypointPrev.waypoint(w.waypoint)

	If w\p=Null
		Return w\path\l
	EndIf
	
	Return w\p

End Function