Quick Guestion about Types in Types

BlitzMax Forums/BlitzMax Programming/Quick Guestion about Types in Types

Duckstab[o](Posted 2007) [#1]
Im Working on adding different game modes to my program.
During a game all logic is handled by TmyLogic
Type TmyLogic
    Field GameLogic  'Type
    Field Compare    'Type 
    Field Conditions 'Type
End Type


These are following types are the logic types I dont want to extend as the variatons are to great they only share 1-2 out of 30 methods or functions
Type FallLogic
End Type

Type PlaceLogic
End Type

Type DynamicLogic
End Type

My question is how set up Types Field to Hold any of the LogicTypes

ie
Type TmyLogic
    Field GameLogic  'Type
    Field Compare    'Type 
    Field Conditions 'Type
    
    Method Create_Classic()
          GameLogic = New FallLogic 
    End Method

    Method Create_Puzzel()
          GameLogic = New PlaceLogic
    End Method

    Method Create_DynamicLogic()
          Gamelogic = New DynamicLogic
    End Method
End Type



ziggy(Posted 2007) [#2]
Make them share the same base type, and cast the appropiate type to get the appropiate logic.
Type BaseLogic
    Function ObjType:Int() abstract
End Type
Type FallLogic extends BaseLogic
    Function ObjType:Int()
        Return 1
    End Function
End Type

Type PlaceLogic extends BaseLogic
    Function ObjType:Int()
        Return 2
    End Function
End Type

Type DynamicLogic extends BaseLogic
    Function ObjType:Int()
        Return 3
    End Function
End Type

Type TmyLogic
    Field GameLogic:BaseLogic  'Type
    Field Compare    'Type 
    Field Conditions 'Type
    
    Method Create_Classic()
          GameLogic = New FallLogic 
    End Method

    Method Create_Puzzel()
          GameLogic = New PlaceLogic
    End Method

    Method Create_DynamicLogic()
          Gamelogic = New DynamicLogic
    End Method
End Type


You Can always do:
If MyTMyLogic.GameLogic.ObjType = 1 then
    FallLogic(MyTMyLogic.GameLogic).FallLogicSpefficMethod(Params)
ElseifMyTMyLogic.GameLogic.ObjType = 2 then
    PlaceLogic(MyTMyLogic.GameLogic).PlaceLogicSpefficMethod(Params)
End If