Problem with OOP

BlitzMax Forums/BlitzMax Programming/Problem with OOP

JoshK(Posted 2005) [#1]
In other versions of Blitz, I experienced some limtations with types and started using banks for all my structures.

For example, if I have a field in a type that needs to be able to reference multiple types of objects, it isn't possible:

Type thing
Field target.otherthing


If "target" is a .terrain, I can't reference it, unless I use Handle() to store the object integer handle. Then when I am using the target value, I have to do this mess:

If Object.terrain(thing\target)<>Null
If Object.mesh(thing\target)<>Null
If Object.texture(thing\target)<>Null


If I use banks, I can just do this:
target=PeekInt(thing,THING_TARGET)
class=PeekInt(target,OBJECT_CLASS)


Also, types don't work well if you are controlling the application with a script, or (theoretically) compiling it to a dll.

Has anything changed in BlitzMax that makes this different? Am I overlooking anything important?


AntonyWells(Posted 2005) [#2]
Yes, make terrain and other shared objects a extended type of a base resource. That way you can do common type check functions and usage functions. No need to know what type it is, just call obj.update() or whatever.


JoshK(Posted 2005) [#3]
What about the handles? Is there a way to store aan object as an integer, and then convert it back into an object without a lot of hassle?


FlameDuck(Posted 2005) [#4]
What about the handles? Is there a way to store aan object as an integer, and then convert it back into an object without a lot of hassle?
No. But like DonnieDarko just said, you don't need to.


JoshK(Posted 2005) [#5]
You do if you want the program to be able to interact with anything external.


Hotcakes(Posted 2005) [#6]
Here's a dodgy example:
Type mytype Extends Object
  Field blah
End Type
Type myothertype Extends Object
  Field jugglies
End Type
type1:mytype=New mytype
type2:myothertype=New myothertype

Function stuff(whatever:Object)
  If mytype(whatever) then Print "mytype was passed!"
  If Int(whatever) then Print "Integer was passed!"
End Function

stuff("passing a string will do nothing in this example")
stuff(type1)

Anyway I think that's how it works, I can't remember exactly off the top of my head and can't find any quick documentation (suprise surprise) to back it up :)


JoshK(Posted 2005) [#7]
Cool, I will read up on the new OOP stuff.