Trans modifcation for cleaner DATA folder loading

Monkey Forums/Monkey Code/Trans modifcation for cleaner DATA folder loading

Bladko(Posted 2011) [#1]
probably possible to do in other way but this is the monkey way

modify src\trans\target.monkey for auto file management so build folder contains only proper files and only proper files are loaded and cached in the application

DeleteDir dir,True
CreateDir dir

If FileType( dataPath )=FILETYPE_DIR
	CopyDir dataPath,dir,True,False
Endif

For Local file$=Eachin app.fileImports

	Local lll$ = ExtractExt( file ).ToLower()

	Select lll			
	
	'all text files in data/tetxt
	Case "txt","xml","json"
		If Not embedTextFiles 
			CopyFile file,dir+"/"+StripDir( file )
		Endif
		
	'graphic file formats in data/graphics
	Case "png","jpg","bmp"
	
		'for ios only in IOS folder
		If (ENV_TARGET = "ios")
			If (file.Contains("ios"))
				CopyFile file,dir+"/"+StripDir( file )
		'for android only in android folder		
		ElseIf (ENV_TARGET = "android")
			If (file.Contains("android"))
				CopyFile file,dir+"/"+StripDir( file )
		' other targets in desktop folder		
		Else
			If (file.Contains("desktop"))
				CopyFile file,dir+"/"+StripDir( file )
		End	
	End
	
	'audio file formats in data/sound/
	Case "wav","ogg","aac","m4a","mp4","aif","caf","mp3","wma"

		'for ios only waves
		If (ENV_TARGET = "ios" And lll = "wav")
			CopyFile file,dir+"/"+StripDir( file )
		'for android only ogg	
		ElseIf (ENV_TARGET = "android" And lll = "ogg")
			CopyFile file,dir+"/"+StripDir( file )
		'for flash copy only mp3	
		ElseIf (ENV_TARGET = "flash" And lll = "mp3")
			CopyFile file,dir+"/"+StripDir( file )
		'for other copy all of them	
		Else
			CopyFile file,dir+"/"+StripDir( file )
		End	

	End Select
Next


this is the folder structure in DATA folder
I am using another tool made in .NET to generate all graphics and sounds properly from some base folder with higher base resolution for graphics

	
DATA
	SOUNDS
		FILE.WAV
		FILE.OGG
		FILE.MP3
	MUSIC
		FILE.WAV
		FILE.OGG
		FILE.MP3
	TEXT
		FILE.TXT
	GRAPHICS
		IOS		
			FILE.PNG		'320x480 for iphone3 
			FILE@...		'640x960 for iphone retina if not avaiable load normal file
			FILE@...	'1024x768 for ipad if not available load 2x
		ANDROID
			FILE@...	'240x320 -> strech the rest
			FILE@...	'320x480 -> strech the rest
			FILE@...	'480x800 -> strech the rest
		DESKTOP
			FILE.PNG		



some code for OnCreate()

'CHECK CURRENT ORIENTATION				
IF(DEVICE_HEIGHT > DEVICE_WIDTH) ORIENTATION = 1
IF(DEVICE_HEIGHT < DEVICE_WIDTH) ORIENTATION = 0	

#TARGET = "ios"		
	'check device area 	
	if(DEVICE_HEIGHT*DEVICE_WIDTH = 320*480) IOS_DEVICE = 0		'iPhone
	if(DEVICE_HEIGHT*DEVICE_WIDTH = 640*960) IOS_DEVICE = 1		'iPhone 4 Retina
	if(DEVICE_HEIGHT*DEVICE_WIDTH = 1024*768) IOS_DEVICE = 2	'iPad		

	SOUND_EXT = ".wav"		
	
	IMAGE_PATH = "graphics/ios/"
				
	IF(IOS_DEVICE = 0) IMAGE_EXT = ".png"
	IF(IOS_DEVICE = 1) IMAGE_EXT = "@2x.png"
	IF(IOS_DEVICE = 2) IMAGE_EXT = "@PAD.png"
#END

#TARGET = "android"	
	if(ORIENTATION = 1)		
		if(DEVICE_WIDTH = 240) ANDROID_DEVICE = 0
		if(DEVICE_WIDTH = 320) ANDROID_DEVICE = 1
		if(DEVICE_WIDTH = 480) ANDROID_DEVICE = 2		
	End
	if(ORIENTATION = 0)		
		if(DEVICE_HEIGHT = 240) ANDROID_DEVICE = 0
		if(DEVICE_HEIGHT = 320) ANDROID_DEVICE = 1
		if(DEVICE_HEIGHT = 480) ANDROID_DEVICE = 2		
	End
	
	IF(ANDROID_DEVICE = 0) IMAGE_EXT = "@240.png"		'base 240x320 -> ???
	IF(ANDROID_DEVICE = 1) IMAGE_EXT = "@320.png"		'base 320x480 -> any other is widden
	IF(ANDROID_DEVICE = 2) IMAGE_EXT = "@480.png"		'base 480x800 -> and 480x854 is widen
	
	IMAGE_PATH = "graphics/android/"
	
	SOUND_EXT = ".ogg"		
#END

#TARGET = "flash"			
	IMAGE_EXT = ".png"
	SOUND_EXT = ".mp3"	
	IMAGE_PATH = "graphics/desktop/"
#END

#TARGET = "html5"		

	Local br# = GetBrowserName()		
	if(br = "Chrome" or br = "Opera" or br = "Firefox") SOUND_EXT = ".ogg"	
	if(br = "Safari" or br = "MSIE") SOUND_EXT = ".wav"	
	
	IMAGE_EXT = ".png"
	
	IMAGE_PATH = "graphics/desktop/"
#END


to load files we can just

'*******************************
'* LOAD SPLASH SCREEN DATA
'*******************************
Method LoadSplashScreens(backPath$)	
			
	back = LoadImage(IMAGE_PATH + backPath + IMAGE_EXT)
		
End

'*******************************
'* LOAD MUSIC AND PLAY
'*******************************
Method MusicLoadPlay:Void(file:String, flags:Int=1)

	StopMusic()
	SetMusicLevel(musicVolume)

	If file.Contains(".wav") Or file.Contains(".ogg") Or file.Contains(".mp3") Then		
		nextMusicPath = MUSIC_PATH + file
			
		if(soundsOn) return	
		musicOn = PlayMusic(nextMusicPath, flags)
	Else
		nextMusicPath = MUSIC_PATH + file + SOUND_EXT
		
		if(soundsOn) return	
		musicOn = PlayMusic(nextMusicPath, flags)
	End	
End	


multi layouts in application.

Application is designed to be run for 640/960 for all game mechanics and stuff (touch pad, UI, drawing, positions). All mechanics are scaled using resX and resY variables based and all graphics are loaded with proper resolution extensions so for 320x480 resX would be 0.5 and buttonMenu@... would be loaded.

'*******************************
'*
'*******************************
Method SetupOutPutResolution(modeX#, modeY#)			
	resX = modeX / 640.0
	resY = modeY / 960.0				
End

'*******************************
Method SetupOutPutResolution()			
	resX = DEVICE_WIDTH / 640.0
	resY = DEVICE_HEIGHT / 960.0				
End