File Requestor in FUllScreen 3d

Blitz3D Forums/Blitz3D Beginners Area/File Requestor in FUllScreen 3d

I still get errors such as texture does not exist or entity parent does not exist.


Normally that means that Draw3D is not initialized (Origin) ore Escape3D is not startet. But with the new drivers of nVidia and Blitz 1.99 there are some problems at the moment as i use the Createtextur command(see bug section), that is why i can not give support now.

But it is (like other problems) reported as bug, so i think that i can give you support for all this if it is fixed in the next 2 years. (.....)

But you can still use ONLY the simple Escape Version, it is 2D and you can draw this simple after your 3D stuff (Renderworld). All what you must do is call the Filerequester (so..very simple). As Escape3D is compatible to the 3D Version, this maybe help you out the first time and you can replace later. But here another code that i have found here in the forum, but it is also simple 2D.

;File requester
;
;activePath$ = the active path 
;
;selectedFile$ = the selected file
;
;drv$(drive) = the selected drive
;
;-------------------------------------------------------------------------

Graphics 640, 480, 0, 3

SetBuffer BackBuffer()

;cam=CreateCamera ()

;light=CreateLight()

;CameraClsColor cam,40, 40, 55


;------------------------GLOBALS------------------------------------------
Global filter$=".que"	;file filter

Dim drctrs$(0)			;temp directories
Dim realfiles$(0)		;temp files
Dim txtfiles$(0)		;temp filtered files
Dim drv$(0)				;drives

Global selectedFile$	;current selected file $
Global directories		;temp no. of directories
Global drvcnt			;no. of drives
Global check$			;$ to compare with filter$
Global txtcount			;temp no. of files in a directory
Global drd1				;start position of directories to display
Global drd2				;end    -"-      -"-
Global trd1				;start position of files to display
Global trd2				;end    -"-      -"-
Global dscr				;how many more directories then 20
Global tscr				;how many more files then 20
Global drive			;current drive no.
Global mouseInUse		;if mouse in use
Global activePath$	="levels"	;the active path

;----------------OPEN FILE------------------------------------------------
count_drives

;--------------------loop
While Not  KeyHit(1)
Cls
;RenderWorld

;highlight ^up--------------------------------------------------
If MouseY()>47 And MouseY()<60 And MouseX()>144 And MouseX()<170
Color 64,80,110
Rect 144,47,27,12
 If MouseDown(1)
				ypos=0
				ypos2=0
	actualpos=0
	pos=1
	While (pos>actualpos)And (pos<Len(activePath$))
 		actualpos=pos
		pos=Instr(activePath$,"",pos+1)
	Wend
	If (actualpos=1) Then actualpos=0
	activePath$ =Left$(activePath$,actualpos)
	
	read_dir(drive,activePath$)
	selectedFile$=""	
  Repeat
  Until (Not MouseDown(1))
 EndIf
EndIf

;----------------------
Color 56,78,112:Rect 0,30,40,270:Rect 0,0,400,29
Line 41,45,400,45:Line 41,60,400,60
Line 384,46,384,300:Line 180,46,180,300:Line 196,46,196,300
Color 50,50,75:Rect 41,30,359,15
Color 50,255,100:Line 40,0,40,300:Line 0,29,400,29

Text 1,2,"Select"
Text 1,13,"Drive"
Text 50,7,"Open file     Back"
Text 50,48,"Directories                    File:"
Text 50,32,"Path: "
Color 255,255,80:Text 80,32,drv$(drive)+":"+Left$(activePath$, 60)
Text 145,48,"|^Up|":Text 233,48,Left$(selectedFile$,29)
Text 200,7,"Filter: "+filter$

;-----------------------------------------------------

If MouseY()<29
		;----open file --------------------
		If MouseX()>50 And MouseX()<100
		Color 50,170,170:Rect 47,3,51,23,0

;Put here your action when open file is pressed
			If MouseDown(1) Then End

		EndIf
		; back--------------------------
		If MouseX()>113 And MouseX()<145
		Color 50,170,170:Rect 113,3,36,23,0
		
			If MouseDown(1) Then End			
				
		EndIf		
		
	EndIf

;------------------------------------------------

For t=0 To drvcnt-1

Color 50,255,100
Text 16,35+t*20,drv$(t)+":"

	If MouseX()<29 And MouseY()>30+t*20
	
		If MouseY()<30+(drvcnt)*20 And MouseDown(1)
	
		drive=(MouseY()-30)/20
		read_dir(drive,"")
		activePath$=""
		selectedFile$=""
		ypos=0
		ypos2=0
	
	EndIf
;---------------------------------------------	
	If MouseY()>30+(drvcnt)*20 Then Goto skip
	
	Color 50,170,170	
	Rect 1,31+t*20,38,20,0
	
		If t=0 Then Goto skip
		Color 56,78,112
		Rect 1,31+(t-1)*20,38,20,0
.skip
		EndIf
	Next


;--------------------scroller position----------------------------
If directories>19		
	FlushMouse()
	If MouseDown(1)
		If (MouseX()>179 And MouseX()<197 Or (mouseInUse And MouseX()<210 And MouseX()>160)) And MouseY()>61 And MouseY()<299

		ypos = MouseY()-6
		If dscr >0 
		met#=227.0/dscr
		drd1=Floor ((ypos-56)/met#)
		drd2=drd1+19
		EndIf
		mouseInUse =True

		EndIf
	Else
		mouseInUse =False
	EndIf

	Color 255,234,99
	If (ypos<62) Then ypos=62
	If (ypos>284) Then ypos=284
	Rect 182,ypos,13,15		
	
EndIf
	
	;-----------------------------------------------	
If txtcount>19
	FlushMouse()
	If MouseDown(1)	
		If (MouseX()>383 And MouseX()<400 Or (mouseInUse And MouseX()<400 And MouseX()>360)) And MouseY()>61 And MouseY()<292
			ypos2 = MouseY()-6
			If tscr >0 
			met2#=227.0/tscr
			trd1=Floor ((ypos2-56)/met2#)
			trd2=trd1+19
			EndIf
		mouseInUse =True
		EndIf 
	Else
		mouseInUse =False
	EndIf

	Color 255,234,99
	If (ypos2<62) Then ypos2=62
	If (ypos2>284) Then ypos2=284
	Rect 386,ypos2,13,15

EndIf

;---------------------file selector highlight-----------------------------

	If MouseY()>60 And MouseX()>50 And MouseX()<180 And (Not mouseInUse)
	
	Color 64,80,110
	Rect 49,49+((MouseY()-46)/12)*12,130,11
			FlushMouse()
			If MouseDown(1)
			
			dirmet=(drd1+Floor ((MouseY()-46)/12))-1
			
			If dirmet<directories
				activePath$ = activePath$+drctrs$(dirmet)+""
				read_dir(drive,activePath$)
				ypos=0
				ypos2=0
				selectedFile$=""
			EndIf 

			Repeat 
			Until Not MouseDown(1)
			
		EndIf
		
	EndIf
;--------------------------------------------------------------------	

If MouseY()>60 And MouseX()>202 And MouseX()<384 And (Not mouseInUse)
	
	Color 64,80,110
	Rect 201,49+((MouseY()-46)/12)*12,182,11


		If MouseDown(1)

		filmet=(trd1+Floor ((MouseY()-46)/12))-1
		If filmet<txtcount
			selectedFile$ = txtfiles$(filmet)
		EndIf

			Repeat 
			Until Not MouseDown(1)
			
		EndIf
	
	EndIf

;----------display Directories and Files-------------
display
	
Flip

Wend



;---------------F U N C T I O N S ----------------------------------------



;---------------READ_DIR--------------------------------------------------

Function read_dir(drive,path$)
directories=0
drf=0
drd1=0
trd1=0

dir=ReadDir (drv$(drive)+":"+path$)

Repeat

file$=NextFile$(dir)

If file$="" Then Goto readfiles
	drf=drf+1
	If file$<>".." And file$<>"."
	If FileType (drv$(drive)+":"+path$+file$)=2 Then directories=directories+1
	EndIf
Forever

;--------readfiles---------------------------

.readfiles
Dim drctrs$(directories)
Dim realfiles$(drf-directories)


tempdir=(ReadDir(drv$(drive)+":"+path$))
tmpcnt=0

For i=0 To drf-1
temp$=NextFile$(tempdir)
 
	If FileType (drv$(drive)+":"+path$+temp$)=2 
	If temp$<>".." And temp$<>"."
	drctrs$(tmpcnt)=temp$
	tmpcnt=tmpcnt+1
	EndIf
	
	Else realfiles$(i-tmpcnt)=temp$
	EndIf
		
Next

; sort directories
For i=1 To directories-1
If Upper(drctrs$(i))< Upper(drctrs$(i-1))
 temp$ = Upper(drctrs$(i-1))
 drctrs$(i-1) = Upper(drctrs$(i))
 drctrs$(i) =Upper$(temp$)
 For j= i-1 To 1 Step -1
  If drctrs$(j)<drctrs$(j-1)
   temp$ = Upper(drctrs$(j-1))
   drctrs$(j-1) = Upper(drctrs$(j))
   drctrs$(j) =Upper(temp$)
  Else 
   j=1
  EndIf
 Next 
EndIf
Next 

; get only filtered files
tmpcnt=0
For i=0 To drf-directories-1
 check$ = Right(realfiles$(i),4)
 check$=Lower(check$)
 If (check$=filter$)
  tmpcnt=tmpcnt+1
 EndIf	 	
Next
txtcount =tmpcnt

Dim txtfiles$(txtcount+21)
tmpcnt=0
For i=0 To drf-directories-1
 check$ = Right(realfiles$(i),4)
 check$=Lower(check$)
 If (check$=filter$)
  txtfiles$(tmpcnt)=realfiles$(i)
  tmpcnt=tmpcnt+1
 EndIf	 	
Next
 
; sort filtered files
For i=1 To txtcount-1
If Upper(txtfiles$(i)) < Upper(txtfiles$(i-1))
 temp$ = Upper(txtfiles$(i-1))
 txtfiles$(i-1) = Upper(txtfiles$(i))
 txtfiles$(i) =temp$
 For j= i-1 To 1 Step -1
  If txtfiles$(j)<txtfiles$(j-1)
   temp$ = Upper(txtfiles$(j-1))
   txtfiles$(j-1) = Upper(txtfiles$(j))
    txtfiles$(j) = Upper(temp$)
  Else 
   j=1
  EndIf
 Next 
EndIf
Next 

;---if more then 20 directories or files calculate how many more
	If directories<20
		drd2=directories-1
				Else drd2=19:dscr=directories-20
			EndIf

	If txtcount<20
		trd2=txtcount-1
			Else trd2=19:tscr=txtcount-20
		EndIf

End Function

;-------------------DISPLAY-----------------------------------------------
Function display()

Color 70,255,220
For i=drd1 To drd2
Text 50,60+12*(i-drd1), Left$(drctrs$(i),25)
Next

Color 180,180,230
For i=trd1 To trd2
Text 205,60+12*(i-trd1), Left$(txtfiles$(i),35)
Next

End Function

;---------COUNT_DRIVES----------------------------------------------------
Function count_drives()
drvcnt=0

Dim drv$(14)
    
	For i=Asc("C") To Asc("K")
;For i=Asc("c") To Asc("k");put this if the above doesn't work
	fr=ReadDir(Chr$(i)+":")
	If fr<>0 Then
	drv$(drvcnt)=Chr$(i)
	drvcnt=drvcnt+1
	CloseDir(fr)
	EndIf
	Next

End Function


You can be shure that you will not find a 100% perfekt requester, but with this code you can start to make your own with nice gfx and whatever you need. ;)


cu