Help with TYPES. Pulling hair here.

Blitz3D Forums/Blitz3D Programming/Help with TYPES. Pulling hair here.

Could someone please explain why this fails?!


Type Type1

End Type

Type Type2

End Type

typetype = 2

Select typetype

	Case 1

		This.Type1 = New Type1

	Case 2

		This.Type2 = New Type2

End Select



I NEVER selected the first case... so why did it assign This to that type? I chose case 2 so should that not omit the first case? Just try to run this code and you'll get a variable type mismatch. Does blitz throw pointers to types even if you dont call them?!!?!?

Any help or ideas around this would be great.. sorry im just at a loss here and going insane.

Thanks,
Scott

Not exactly sure of what you trying to do, but, this will fail because the first case define This as a Type1, then you attempt redifine This in the second case as a Type2.

A variable can be only of one type. It means that 'This' cannot be of Type1 or Type2. It has to be either one through the whole function/main without any conditionals. Blitz simply doesn't support this.

In my opinion this takes out the idea of using Object() and Handle() commands and multipurpose functions.

Thats just great. So you cant even fake function overloading with blitz then. I just find it weird that it allocates memory for that pointer even though it was not assigned. Basically im designing a combat function that allows multiple type objects to perform the same equations. Now instead of about 50 lines of code it will have to be damned near 300. *grumbles*. Thanks guys.

You can still fake it:

Type bomb
	Field s.sharedfields
	Field radius
End Type

Type player
	Field s.sharedfields
	Field name$
End Type

Type sharedfields
	Field x#,y#,speedx#,speedy#
End Type


b.bomb=New bomb
b\radius=22
b\s=New sharedfields

p.player=New player
p\name="joe"
p\s=New sharedfields

typetype = 2

Select typetype
	
	Case 1
		
		this.sharedfields = b\s
		
	Case 2
		
		this.sharedfields = p\s
		
End Select


this\x=this\x+this\speedx
this\y=this\y+this\speedy


Or you can fake it this way:
They work well.

Type bombfields
	Field radius
End Type

Type playerfields
	Field name$
End Type

Type thing
	Field x#,y#,speedx#,speedy#
	
	;only one of these is not null
	Field p.playerfields
	Field b.bombfields
End Type


tp.thing=New thing
tp\p=New playerfields
tp\p\name="joe"


tb.thing=New thing
tb\b=New bombfields
tb\b\radius=22

typetype = 2

Select typetype
	
	Case 1
		
		this.thing = tp
		
	Case 2
		
		this.thing = tb
		
End Select


this\x=this\x+this\speedx
this\y=this\y+this\speedy



Thanks Curtastic! I think you just gave me an idea. Also does anyone know if doing a for each loop on a set of objects speed is affected by the amount of data fields within the types.

For example.

Type1

field onlyone

end type

Type 2
Field 1
field 2
field 2 etc..
end type

Is searching through 200 of type 1 any faster than the same with type 2?

Thanks,
Scott

I'm guessing it doesn't. As far as I know Types are simply pointers to internal memory banks. I'm guessing that the only real difference is the 'amount of fields' you access/query during that loop...

But that's an uneducated guess...
Should be faily east to test & measure though..

D.

Effectively no speed difference, not anything worth measuring anyway.