I have two objects - "Spaceship" and "Planet" derived from a base "Obj". I have defined several classes - Circle, Triangle, Rectangle, etc. which all inherit from a "Shape" Class.
For collision detection purposes, I want to give Obj a "shape":
Dim MyShape as Shape
So that in "Spaceship" I can:
MyShape = new Triangle(blah,blah)
and in "Planet" I can:
MyShape = new Circle(blah,blah)
I have a method (overloaded several times) which checks for collisions between different shapes, for example:
public shared overloads function intersects(byval circle1 as circle, byval circle2 as circle) as boolean
AND
public shared overloads function intersects(byval circle as circle, byval Tri as triangle) as boolean
This works fine when I call the function using the derived classes, for example:
dim A as new circle(blah, blah)
dim B as new triangle(blah, blah)
return intersects(A,B)
But when I call it using MyShape, I get an error because the method is being passed a "Shape" (rather than the derived type) which the method does not have an overload for.
I could solve it by doing something like:
Public Function Translate(byval MyShape1 as Shape, byval MyShape2 as Shape )as boolean
if shape1.gettype = gettype(circle) and shape2.gettype=gettype(circle) then ''//do circle-circle detection
if shape1.gettype = gettype(triangle) and shape2.gettype=gettype(circle) then ''//do triangle-circle detection
End Function
But that seems messy. Is there a better way?