I'm having trouble with the TLink type.

BlitzMax Forums/BlitzMax Beginners Area/I'm having trouble with the TLink type.

JoJo(Posted 2005) [#1]
I'm trying to get the first object from the list without using the for...eachin loop but I'm having trouble because it can't convert from object to type Image.
Local current:TLink = ImageList.FirstLink()
Local myImage:Image = Image(current._value)


Image is an object so it should work.

Global ImageList:TList = New TList
Type Image
        Global ImageListCount:Int =0
        Field xpos,ypos:Int
        Field _image:TImage 
	Field AlphaLevel:Float 
	Field Scale:Float 

        'instantiate and each object to List
        Function Create:Image(strPath:String,startXpos:Int,startYpos:Int,imgAlpha:Float,imgScale:Float)
               Local img:Image = New Image
               img._image = LoadImage(strPath)

               ImageListCount:+1
               img.xpos = startXpos
               img.ypos = startYpos
	       img.AlphaLevel = imgAlpha
	       img.Scale = imgScale

               ListAddLast ImageList, img 
        End Function 

	Method Render()
		Local current:TLink = ImageList.FirstLink()
		Local myImage:Image = Image(current._value)
				
		MidHandleImage myImage._image
		SetScale Scale,Scale
		SetAlpha AlphaLevel
		DrawImage myImage._image, (myImage.xpos), myImage.ypos
		Update(myImage)	
	End Method
End Type




N(Posted 2005) [#2]
Try:
Local myImage:Image = Image(ImageList.First())


Can't imagine why your code wouldn't work in the first place though.


Bot Builder(Posted 2005) [#3]
TLink is a [silly] name for it in teh first place. Should be node. Ahwell. Noel is correct. Tubad the docs only cover functions and not methods.


JoJo(Posted 2005) [#4]
Didn't work. I get an 'Illegal operation on empty list'.

Strict
Graphics 800,600,0,20

Global ImageList:TList = New TList
Local block:Image = New Image


'loading path to graphics
'and create objects
Function LoadPieces()
	Local gh = GraphicsHeight() / 2
	Local gw = GraphicsWidth() / 2

	'string array
	Local arrPath:String[]=["gfx/blue.bmp","gfx/green.bmp","gfx/yellow.bmp","gfx/red.bmp","gfx/orange.bmp","gfx/violet.bmp"]
	For Local i:String = EachIn arrPath
		Image.Create(i,gw,gh,1.0,1.0)
	Next
End Function
 


Type Image
        Global ImageListCount:Int =0
        Field xpos,ypos:Int
        Field _image:TImage 
	Field AlphaLevel:Float 
	Field Scale:Float 

             'instantiate and each object to List
            Function Create:Image(strPath:String,startXpos:Int,startYpos:Int,imgAlpha:Float,imgScale:Float)
                        Local img:Image = New Image
                        img._image = LoadImage(strPath)

                        ImageListCount:+1
                        img.xpos = startXpos
                        img.ypos = startYpos
			img.AlphaLevel = imgAlpha
			img.Scale = imgScale

                        ListAddLast ImageList, img 
            End Function 

	
	'go thru each object, scale it and fade object
            Method Update(img:Image)
		Scale:+1.0
		AlphaLevel:-0.1  
		If Scale >= 15.0 Then
			ListRemove ImageList, img
			Scale=1.0
			AlphaLevel=1.0
		EndIf		
            End Method

	   Method Render()
		SetBlend ALPHABLEND
                        'For Local i:Image = EachIn ImageList
				'Local current:TLink = ImageList.FirstLink()
				'Local myImage:Image = Image(current._value)
				Print "debug"
				Local myImage:Image = Image(ImageList.First())
				Print "1"

				
				'MidHandleImage i._image
				MidHandleImage myImage._image
				SetScale Scale,Scale
				SetAlpha AlphaLevel
				'DrawImage i._image, (i.xpos), i.ypos
				DrawImage myImage._image, (myImage.xpos), myImage.ypos
				'Update(i)
				Update(myImage)
				'Exit
                        'Next	
	   End Method
	
	   Method Reset()
		      If ListIsEmpty(ImageList) = True  Then
		   		LoadPieces()			
	   	      EndIf	
	   End Method
End Type



'main
While Not KeyHit(KEY_ESCAPE)
	Cls	
	block.render()	
  
	'check to see if all objects are destroy; if so start over
	block.reset()
	Flip()
	FlushMem()
Wend

'destroy i or blitz takes care of this for me when
'the program ends
block=Null



JoJo(Posted 2005) [#5]
Got it to work. Forgot to call the loadpieces function.