Packed Textures
Monkey Forums/Monkey Code/Packed Textures| 
 | ||
| I have added support to packed textures! I'm using this texture packer from Spoonman : http://dev.ixchels.net/forum/showthread.php?t=650&highlight=texture+packer It's export a .png file and a .txt file with the patterns info. Here is the Monkey class to load and use this packed textures! I hope that is quite useful for you as it is for me! Any questions or suggestions for improvement please reply here! =) Cezar It's very easy to use, example 
' Create and Load
Field PackedTexture : TPackedTexture
PackedTexture = New TPackedTexture("sprites.png","sprites.txt") ' Image name and patterns info filename
' Draw a custom pattern from Image
PackedTexture.Draw(patternname,X,Y,Angle,ScalrX,ScaleY)
Strict
Import mojo
Class TPattern
   Field Name:String
   Field X:Int
   Field Y:Int
   Field Width:Int
   Field Height:Int
   Method New(AName:String,AX:Int,AY:Int,AWidth:Int,AHeight:Int)
      Name=AName
      X=AX
      Y=AY
      Width=AWidth
      Height=AHeight
   End
End
Class TPackedTexture
    Field img:Image
	Field Patterns:List<TPattern>
	Field Pattern:TPattern
	Method New(AName:String,APatterns:String)
		img=LoadImage(AName)
	    Patterns = New List<TPattern>
			
		'Load Patterns from File
		Local str$=LoadString(APatterns)
		Local pos:Int
		Local patternscount:Int
		
		Local Pattern : TPattern
		
		pos=0
		Pattern = New TPattern()		
		For Local line$=Eachin str.Split( "~n" )
			If pos=0 patternscount=Int(line.Trim())
			If pos=1 Pattern.Name=line.Trim()   
			If pos=2 Pattern.X=Int(line.Trim())
			If pos=3 Pattern.Y=Int(line.Trim())
			If pos=4 Pattern.Width=Int(line.Trim())  
			If pos=5 
				Pattern.Height=Int(line.Trim())						
				Patterns.AddLast(Pattern)
				Print ("Pattern " + Pattern.Name + " " + Pattern.X + " " + Pattern.Y + " " + Pattern.Width + " " + Pattern.Height)
				Pattern = New TPattern()
				pos=0
			Endif
	
			pos+=1
		Next
	End
	
	Method FindPattern:TPattern(APatternName:String)
	    For Local tmpPattern:=Eachin Patterns
	        If tmpPattern.Name=APatternName Return tmpPattern
	    Next
	    Return Patterns.First()
	End
	
	
	Method Draw:Void(APatternName:String, AX:Int,AY:Int,ARotation:Float,AScaleX:Float,AScaleY:Float)
	    
	    'Only change pattern if the current pattern is different than the cached one
		If (Not Pattern) Or (Pattern.Name<>APatternName) Pattern=FindPattern(APatternName)
	    img.SetHandle( Pattern.Width/2, Pattern.Height/2)
		DrawImageRect( img, AX, AY, Pattern.X, Pattern.Y, Pattern.Width, Pattern.Height, ARotation, AScaleX, AScaleY, 0 )
	End
End
 | 
| 
 | ||
| Hi! Thanks for this, very useful. Will it work ok with animation too? Could you post an example please. | 
| 
 | ||
| I have created a simple sprite class with animations support which use this packed textures! I will make an example and post it here! | 
| 
 | ||
| @Wagenheimer Why dont' use Map instead of List? It should a little faster in finding the correct 'pattern' I think. You have already the KEY_NAME I'm doing a similar thing, when it's ready I'll post it. | 
| 
 | ||
| Thanks! completely useful! some example could be great! |