Assigning meshes to arrays

Blitz3D Forums/Blitz3D Programming/Assigning meshes to arrays

Unless of course, you use entitylinepick extensively. ;)

Quick terrain manipulation demo I just made. first time using entitypick. :) Mouse1 lowers the terrain. Unlike "terrain", each square is a separate surface which can be textured individually.

	Graphics3D 800,600,0,2
	camera=CreateCamera()
	light=CreateLight(2)
	LightConeAngles light,360,360
	PositionEntity light,10.5,0,-3
	AmbientLight 255,255,255
	LightColor light,-10,-10,-10
	RotateEntity light,10,0,0
	Dim map(20,15,0)
	SeedRnd MilliSecs()
	
	For x = 1 To 20
		For y = 1 To 15
			map(x,y,0)=CreateMesh()
			surface=CreateSurface(map(x,y,0))
			AddVertex surface,0,0,0,0,0
			AddVertex surface,0,0,1,0,1
			AddVertex surface,1,0,0,1,0
			AddVertex surface,1,0,1,1,1
			AddTriangle surface,0,1,2
			AddTriangle surface,3,2,1
			PositionEntity map(x,y,0),x,0,y
			brush=CreateBrush(Rand(255),Rand(255),Rand(255))
			PaintEntity map(x,y,0),brush
			EntityPickMode map(x,y,0),2
			FreeBrush brush
			UpdateNormals map(x,y,0)
			Next
		Next
		
	PositionEntity camera,10.5,10,-3
	RotateEntity camera,60,0,0
	PointEntity light,map(10,5,0)
	UpdateWorld
	RenderWorld
	
	While Not KeyHit(1)
	RenderWorld
	If MouseDown(1) Then
		CameraPick camera,MouseX(),MouseY()
		If PickedEntity() Then
			MoveEntity PickedEntity(),0,-.1,0
			LinePick PickedX()-1,1000,PickedZ(),0,-2000,0	;adjust entity on left side
			If PickedEntity() Then 
				surface=GetSurface(PickedEntity(),1)
				vertexdown surface,2
				vertexdown surface,3
				LinePick PickedX()+1,1000,PickedZ(),0,-2000,0
				End If
			LinePick PickedX()+1,1000,PickedZ(),0,-2000,0	;adjust entity on right side
			If PickedEntity() Then 
				surface=GetSurface(PickedEntity(),1)
				vertexdown surface,0
				vertexdown surface,1
				LinePick PickedX()-1,1000,PickedZ(),0,-2000,0
				End If
			LinePick PickedX(),1000,PickedZ()+1,0,-2000,0 ;adjust entity on upper side
			If PickedEntity() Then
				surface=GetSurface(PickedEntity(),1)
				vertexdown surface,0
				vertexdown surface,2
				LinePick PickedX(),1000,PickedZ()-1,0,-2000,0
				LinePick PickedX()-1,1000,PickedZ()+1,0,-2000,0
				If PickedEntity() Then
					surface=GetSurface(PickedEntity(),1)
					vertexdown surface,2
					LinePick PickedX()+1,1000,PickedZ()-1,0,-2000,0
					End If
				LinePick PickedX()+1,1000,PickedZ()+1,0,-2000,0
				If PickedEntity() Then
					surface=GetSurface(PickedEntity(),1)
					vertexdown surface,0
					LinePick PickedX()-1,1000,PickedZ()-1,0,-2000,0
					End If
				End If
			LinePick PickedX(),1000,PickedZ()-1,0,-2000,0 ;adjust entity on lower side
			If PickedEntity() Then
				surface=GetSurface(PickedEntity(),1)
				vertexdown surface,1
				vertexdown surface,3
				LinePick PickedX(),1000,PickedZ()+1,0,-2000,0
				LinePick PickedX()-1,1000,PickedZ()-1,0,-2000,0
				If PickedEntity() Then
					surface=GetSurface(PickedEntity(),1)
					vertexdown surface,3
					LinePick PickedX()+1,1000,PickedZ()+1,0,-2000,0
					End If
				LinePick PickedX()+1,1000,PickedZ()-1,0,-2000,0
				If PickedEntity() Then
					surface=GetSurface(PickedEntity(),1)
					vertexdown surface,1
					LinePick PickedX()-1,1000,PickedZ()+1,0,-2000,0
					End If
				End If
			End If
		End If
	Flip
	Wend
	End
	
	Function VertexDown(surface,number)
		VertexCoords surface,number,VertexX(surface,number),VertexY(surface,number)-.1,VertexZ(surface,number)
		End Function