Missing type specifier?

BlitzMax Forums/BlitzMax Beginners Area/Missing type specifier?

Amon(Posted 2006) [#1]
I get a missing type specifier in this function.

		Function CreateBalloon:Int(balloon.BalloonCount:Int)
			For Local xiter:Int = 0 To balloon.BalloonCount
				Local b:balloon = New balloon
				b.XLoc = GraphicsWidth()/2
				b.YLoc = GraphicsHeight()/2
				b.Speed = Rand(3,10)
				b.BFrame = Rand(0,4)
				b.Direction = Rand(0,359)
				ListAddLast BalloonList,(b)
				
				If xiter => balloon.MaxBalloons
					Exit
				End If
				Return b			
			Next


BLIde points to the parameter section of the function as the problem part.

Any help appreciated?

[edit] I'm in SuperStrict mode.


Amon(Posted 2006) [#2]
I fixed it.

New problem. I'm getting a "can't find b" in the following listremove section.

		Method UpdateBalloons()
			DrawImage AllBalloons,xloc,yloc,BFrame
				xloc:+ Cos(Direction) * Speed
				yloc:+ Sin(Direction) * Speed
				
				If xloc > 1050 or xloc < -50 
				
					ListRemove BalloonList,b
			
				End If
				If yloc > 790 or yloc < - 50
				
					ListRemove BalloonList,b
			
				EndIf							
		End Method



[edit] Hang on. I have to redesign how I destroy things.


Amon(Posted 2006) [#3]
I don't know what I'm doing. Can someone point me in the right direction on how to properly code this type?

Type balloon
	
	Global List:TList
	Field Link:TLink
	
	Field xloc:Int
	Field YLoc:Int
	Field Speed:Int
	Field BFrame:Int
	Field Direction:Int
		
	Global BalloonCount:Int = 0
	Global MaxBalloons:Int = 20

   Method New()
      If List=Null
         List=New TList
      End If
      Link=List.AddLast(Self)
   End Method

   Method Kill()
      Link.Remove()
      Link=Null
   End Method

		Function CreateBalloon:Int(BalloonCount:Int)
		
			For Local xiter:Int = 0 To balloon.BalloonCount
				Local b:balloon = New balloon
				b.XLoc = GraphicsWidth()/2
				b.YLoc = GraphicsHeight()/2
				b.Speed = Rand(3,10)
				b.BFrame = Rand(0,4)
				b.Direction = Rand(0,359)
							
				If balloon.BalloonCount >= balloon.MaxBalloons
					Exit
				End If
				Return BalloonCount			
			Next
			
			If balloon.BalloonCount => balloon.MaxBalloons Then balloon.BalloonCount = balloon.MaxBalloons
		End Function
		
		Method UpdateBalloons()
			DrawImage AllBalloons,xloc,yloc,BFrame
				xloc:+ Cos(Direction) * Speed
				yloc:+ Sin(Direction) * Speed
				
				If xloc > 1050 or xloc < -50 
				
					balloon.Kill
			
				End If
				If yloc > 790 or yloc < - 50
				
					balloon.Kill
			
				EndIf							
		End Method
		
End Type


I want to be able to remove a balloon when it exceeds it's boundaries.

I'm still not that good with OOP. :/


Brucey(Posted 2006) [#4]
maybe something along the lines of...
Type balloon
	
	Global BalloonList:TList = New TList
	Global BalloonCount:Int = 0
	Const MaxBalloons:Int = 20
	
	Field xloc:Int
	Field YLoc:Int
	Field Speed:Int
	Field BFrame:Int
	Field Direction:Int
	
	Method Kill()
		BalloonList.Remove(Self)
	End Method
	
	Function CreateBalloon:Int(count:Int)
	
		' trim count to fit...
		If BalloonCount + count > MaxBalloons Then count = MaxBalloons - BalloonCount

		' add balloons
		For Local xiter:Int = 0 To count
			Local b:balloon = New balloon
			b.XLoc = GraphicsWidth()/2
			b.YLoc = GraphicsHeight()/2
			b.Speed = Rand(3,10)
			b.BFrame = Rand(0,4)
			b.Direction = Rand(0,359)
			ListAddLast BalloonList, b
			
			BalloonCount :+ 1
		Next

		Return BalloonCount		
	End Function
		
	Method UpdateBalloon()
		DrawImage AllBalloons,xloc,yloc,BFrame
		
		xloc:+ Cos(Direction) * Speed
		yloc:+ Sin(Direction) * Speed
		
		If xloc > 1050 Or xloc < -50 
			Kill
		End If
		If yloc > 790 Or yloc < - 50
			Kill
		EndIf							
	End Method

	Function UpdateBalloons()
		For Local b:balloon = EachIn BalloonList
			b.updateBalloon()
		Next
	End Function
End Type



Amon(Posted 2006) [#5]
Nice one. Thanks. Works perfectly. :)