Type help

BlitzMax Forums/BlitzMax Beginners Area/Type help

neos300(Posted 2009) [#1]
Okay here is my basic thing.
Type MainType
Field Type:TType
End Type

Type TType
Method DoSomething()
'Do something
End Method
End Type

Global T:MainType

Now, I want to call the TType's DoSomething method, but I want to do it through T. How can i do this?


Hezkore(Posted 2009) [#2]
Type MainType
	Field Type:TType
End Type

Type TType
	Method DoSomething()
	'Do something
	End Method
End Type

Global T:MainType
T.Type.DoSomething()
I don't think you can call the field "Type" though, but I'm not sure...

And this should also work:
Type MainType
	Field MyField:int
End Type

Type TType Extends MainType
	Method DoSomething()
	'Do something
	End Method
End Type

Global T:TType
T.DoSomething()



neos300(Posted 2009) [#3]
No, I want MainType to have a field which is a TType object, and then do something like this:
T.Type.DoSomething()


Any idea how to do that?


GfK(Posted 2009) [#4]
Type MainType
  Field Type:TType = New TType ' important!  Creates an instance of TType
End Type

Type TType
  Method DoSomething()
    'Do something
  End Method
End Type

Global T:MainType = new MainType
T.Type.DoSomething()


The key point you've missed is that its not enough to define a variable as a specific type. You must also create an instance before you can use it and access its fields/methods/etc.


chimaera(Posted 2010) [#5]
May I ask what you would like to use this for? It all feels very weird of actually calling a type that is a field within another type.

There is one thing having like a Tlist in a type and the possability to access that.




Sledge(Posted 2010) [#6]
Type Tplayer
Field myList:Tlist = new Tlist


Invoke the list as global or every instance will have one.

*EDIT*
Here, see this:



chimaera(Posted 2010) [#7]
Yeah, sorry. The naming was a bit odd.

I would call it TPlayerManager. Then create a Tplayer. To create a player I would call TplayerManager.createPlayer() that in turn called a TplayerManager.list.addlast(Tplayer.create()).

Thats how I do it in my new game. Works like a charm.


MACCB(Posted 2010) [#8]
There is probably a really simple answer but please can someone help. Why when I have called "Superstrict" does this return the error in debug "Compile Error ... Function can not return a value">>>

Type level
Field grid_value%[mapWidth,mapHeight] ' define our map array

Method read(x%,y%)
Return grid_value[x,y]
End Method
Method write(x%,y%,z%)
grid_value[x,y]=z
End Method
End Type


GfK(Posted 2010) [#9]
You need to tell the method what you want it to return, i.e:
Method read:String(x:int, y:int)
  Return grid_value[x,y]
End Method

That's assuming your grid_value[] is an array of strings, which it may well not be but you get the idea.


MACCB(Posted 2010) [#10]
That's is great. Thanks that has been bugging me for an hour :)


GfK(Posted 2010) [#11]
This is the thing with SuperStrict - it assumes nothing. If you don't explicitly tell it, it won't work.