Accessing a base types functions
BlitzMax Forums/BlitzMax Beginners Area/Accessing a base types functions
| ||
I have a TPlayer type that extends a TEntity type. Now, the TEntity type contains a function called Create() which create a new entity. This is fine if I do something like Entity:TEntity=TEntity.Create() but it doesn`t seem to work if I do Player:TPlayer=TPlayer.Make() Why won`t this work? Shouldn`t the extended type contain all of the base types functions and fields too? I do not want to have a separate Create() function inside of the TPlayer type in this case so is there a way of getting this to work? Am I doing something wrong? Thanks for any help, Jason. |
| ||
Change it to a Create method. Then you can do something like player = TPlayer(New TPlayer.Create()) (you will of course need to change the internals of the method to work from inside the object) |
| ||
Thanks Brucey, thats exactly what I was looking for. Jason. |
| ||
BlitzMax supports covariance in method return values, so you can do:Type TEntity Method Init:TEntity(...) ... Return Self End Method End Type Type TPlayer Extends TEntity Method Init:TPlayer(...) Super.Init(...) Return Self End Method End Type Local e:TEntity = New TEntity.Init(...) Local p:TPlayer = New TPlayer.Init(...) |
| ||
I`m still a little puzzled. Why does the following fail to run?SuperStrict Type TEntity Global List:TList=CreateList() Field X:Int Field Y:Int Method New() ListAddLast(List,Self) End Method Method Make:TEntity() Local Entity:TEntity=New TEntity Return Entity End Method End Type Type TPlayer Extends TEntity Field Z:Int End Type Local Player:TPlayer=TPlayer.Make() I`m obviously missing something? I see the post above works fine but do I have to add another Method to TPlayer to get this to work as it is already in the base type? I`m confused??? Jason. |
| ||
Make() is a Method, not a Function. You either do : Method Make:TEntity() ' do some initialisation stuff here Return Self End Method Local Player:TPlayer = New TPlayer.Make() or Function Make:TEntity() Local Entity:TEntity=New TEntity ' do some initialisation stuff here Return Entity End Method Local Player:TPlayer = TPlayer.Make() |
| ||
You can only call a Method on a Type, if you have an instance of an Object. (you need a TPlayer object, in your example) A Function is Global (or static, in other languages), which means you can call it without a live object, simply using the Type identifier followed by the function name. MyType.MyFunction(). |
| ||
OK got it. Thanks for the explanation. Jason. |