RequestFile() clone but without GUI?

BlitzMax Forums/BlitzMax Beginners Area/RequestFile() clone but without GUI?

Amon(Posted 2007) [#1]
Is there any sample code for loading files from a directory?

I can code it to load one file but only if i know the filename.

I have a factory where people can make maps for my game and save them with a custom filename. How would I go about coding a loader for maps so that I don't have to rely on RequestFile().

I've noticed that ReQuestFile doesn't show up during my game when in fullscreen.


FlameDuck(Posted 2007) [#2]
Is there any sample code for loading files from a directory?
LoadDir()?


Amon(Posted 2007) [#3]
Ok. Now when I use loadDir(), how could I display the contents on a graphical screen?


Amon(Posted 2007) [#4]
Tried this but I doesn't work.

Type LoadFD
	
	Global Files:String[]
	Global Xloc:Int = 100
	Global YLoc:Int = 100
	
	Function LoadMapDir()
		LoadFD.Files = LoadDir("data/userlvl/")
	End Function
	
	Function DrawMapFilesInArray()
		For Local x:Int = 0 To Len(loadfd.files)
			DrawText "MapName : "LoadFD.Files, XLoc, Yloc
			Yloc:+25
		Next
	End Function

End Type


This one works Better.
Type LoadFD
	
	Global Files:String[]
	Global Xloc:Int = 100
	Global YLoc:Int = 100
	
	Function LoadMapDir()
		LoadFD.Files = LoadDir("data/userlvl/")
	End Function
	
	Function DrawMapFilesInArray()
		For Local t$ = EachIn LoadFD.Files
			DrawText "MapName : "+t, XLoc, Yloc
			
			Yloc:+25
		Next
	End Function

End Type


It still prints them all on the same line. :/

I'm working on it. :)


Amon(Posted 2007) [#5]
Got this But I'm getting wierd results.

Graphics 800,600,0

Global MapList:TList = CreateList()
Type LoadFD
	
	Global Files:String[]
	Global Xloc:Int = 100
	Global YLoc:Int = 100
	Field MapName:String
	Global count:Int
	Global t:String
	Function LoadMapDir()
		LoadFD.Files = LoadDir("data/userlvl/")
	End Function

	Function GetMapName()
		For t = EachIn files
			Local file:LoadFD = New LoadFD
			file.MapName = t
			count:+1
			maplist.AddLast(file)
		Next
	End Function
	
	Method DrawMapFiles()
		For Local xiter:Int = 0 To count - 1
			DrawText "MapName " +t,100,100
		Next
		
	End Method
End Type

LoadFD.LoadMapDir
LoadFD.GetMapName


While not KeyHit(KEY_ESCAPE)
	Cls
	
		For Local file:LoadFD = EachIn MapList
			file.DrawMapFiles
		Next
	
	
	Flip
	
WEnd



Amon(Posted 2007) [#6]
This one works. :)


Graphics 800,600,0

Global MapList:TList = CreateList()
Type LoadFD
	
	Global Files:String[]
	Field Xloc:Int = 100
	Field YLoc:Int = 100
	Field MapName:String
	Global count:Int
	Global t:String
	
	Global tempx:Int = 100
	Global tempy:Int = 100
	
	Function LoadMapDir()
		LoadFD.Files = LoadDir("data/userlvl/")
	End Function

	Function GetMapName()
		For t = EachIn files
			Local file:LoadFD = New LoadFD
			file.MapName = t
			file.Yloc = tempy
			maplist.AddLast(file)
			tempy:+25
		Next
	End Function
	
	Method DrawMapFiles()
		
			DrawText MapName,Xloc,Yloc
		
		
	End Method
End Type

LoadFD.LoadMapDir
LoadFD.GetMapName


While not KeyHit(KEY_ESCAPE)
	Cls
	
		For Local file:LoadFD = EachIn MapList
			file.DrawMapFiles
		Next
	
	
	Flip
	
WEnd


Version 2 displays 2 colums of text if the list reaches the bottom. Gonna try and add pages so that it can display 100's of files. :)

Graphics 800,600,0

Global MapList:TList = CreateList()
Type LoadFD
	
	Global Files:String[]
	Field Xloc:Int = 100
	Field YLoc:Int = 100
	Field MapName:String
	Global count:Int
	Global t:String
	
	Global tempx:Int = 100
	Global tempy:Int = 100
	
	Function LoadMapDir()
		LoadFD.Files = LoadDir("data/temdir/")
	End Function

	Function GetMapName()
		For t = EachIn files
			Local file:LoadFD = New LoadFD
			file.MapName = t
			file.Yloc = tempy
			file.Xloc = tempx
			maplist.AddLast(file)
			tempy:+25
			count:+1
			
			If tempy > 500
				tempy = 100
				tempX:+300
			EndIf
			
		Next
	End Function
	
	Method DrawMapFiles()
		DrawText MapName,Xloc,Yloc
	End Method
End Type

LoadFD.LoadMapDir
LoadFD.GetMapName


While not KeyHit(KEY_ESCAPE)
	Cls
	
		For Local file:LoadFD = EachIn MapList
			file.DrawMapFiles
		Next
	
	
	Flip
	
WEnd



Amon(Posted 2007) [#7]
I get a duplicate identifier 'file' found in this code. Why?

Graphics 800,600,0

Global MapList:TList = CreateList()
Type MapFile
	
	Global Files:String[]
	Field Xloc:Int = 100
	Field YLoc:Int = 100
	Field MapName:String
	Global count:Int = 0
	Global t:String
	
	Global tempx:Int = 100
	Global tempy:Int = 100
	
	Function LoadMapDir()
		MapFile.Files = LoadDir("data/temdir/")
	End Function

	Function GetMapName()
		For t = EachIn files
			Local file:MapFile = New MapFile
			file.MapName = t
			file.Yloc = tempy
			file.Xloc = tempx
			maplist.AddLast(file)
			tempy:+25
			count:+1
			
			If tempy > 500
				tempy = 100
				tempX:+400
			EndIf
			
		Next
	End Function
	
	Method DrawMapFiles()
		DrawText count+MapName,Xloc,Yloc
	End Method
	
	Function ShiftText()
		If KeyDown(KEY_LEFT)
			For Local file:MapFile = EachIn MapList
				file.Xloc:- 1
			Next
		ElseIf KeyDown(KEY_RIGHT)
			For Local file:MapFile = EachIn MapList
				file.Xloc:+1
			Next
		End If
	End Function
End Type

MapFile.LoadMapDir
MapFile.GetMapName


While not KeyHit(KEY_ESCAPE)
	Cls
	
		For Local file:MapFile = EachIn MapList
			file.DrawMapFiles
		Next
		DrawText "TempX = " + MapFile.tempx,0,0
		MapFile.ShiftText
	Flip
	
WEnd


It points to this below.

	Function ShiftText()
		If KeyDown(KEY_LEFT)
			For Local file:MapFile = EachIn MapList
				file.Xloc:- 1
			Next
		ElseIf KeyDown(KEY_RIGHT)
			For Local file:MapFile = EachIn MapList
				file.Xloc:+1
			Next
		End If


When I take out one of the conditions, example keydown(right) it works perfectly.


FlameDuck(Posted 2007) [#8]
Because you're not using Strict / SuperStrict, so your variables aren't lexically scoped.


Amon(Posted 2007) [#9]
Ahh! I get what you mean but don't get the lexically scoped thingamy jig.

Now, lexical is a greek word. so I'mm assuming you mean that the scope of blah is ...... Don't get it. :/


FlameDuck(Posted 2007) [#10]
Lexical scope:
	Function ShiftText() 'Function scope starts here.
		If KeyDown(KEY_LEFT)'New If scope
			For Local file:MapFile = EachIn MapList 'New For Scope
				file.Xloc:- 1
			Next 'End of For scope
		ElseIf KeyDown(KEY_RIGHT) 'End of if scope, New If scope
			For Local file:MapFile = EachIn MapList ' New For Scope
				file.Xloc:+1
			Next 'End of For Scope
		End If 'End of If scope
	End Function'End of Function scope
Non-lexical scope:
	Function ShiftText() 'Function scope starts here.
		If KeyDown(KEY_LEFT)
			For Local file:MapFile = EachIn MapList
				file.Xloc:- 1
			Next
		ElseIf KeyDown(KEY_RIGHT)
			For Local file:MapFile = EachIn MapList
				file.Xloc:+1
			Next
		End If
	End Function'End of Function scope
Thus since you're in non-strict mode your second for loop, is using a variable with the same name, and in the scope as the first one - which is an undefined operation, and thus an error.


Amon(Posted 2007) [#11]
Can I clone you and have your clone as a pet?