z-ordering problem

BlitzMax Forums/BlitzMax Programming/z-ordering problem

verfum(Posted 2007) [#1]
Here I am trying to get a rectangle to disapear behind a circle using sorting and the Compare Method, but I can only get it to use the x and y points which are at the top of each object, so if one object is smaller than another it has to move much further upwards to move behind the larger object. the example code below explains it better, look at the small rectangles in the corner of both objects, when they reach the same level only then does one move behind the other, I need to make it detect the bottom of the objects.
Strict

Type Entity
	Field x:Float,y:Float,z:Float
	Field width:Int,height:Int,depth:Int
 	Field green:Int,red:Int,blue:Int
	
	Method Update() Abstract
	
	Method Compare(other:Object)

    		If Entity(other).z > z Return -1
    		Return 1

  	End Method

End Type

Type Rectangle Extends Entity
  		
	Function Create:Rectangle(green,red,blue,x,y,z)
		Local ent:Rectangle = New Rectangle
		ent.x = x
		ent.y = y
		ent.z = z '+ y
		ent.green = green
		ent.red = red
		ent.blue = blue
		entity_list.AddLast(ent)
		Return ent
	End Function
	
	Method Update()
	
		SetColor red,green,blue
		DrawRect x,z,100,100
		SetColor 255,255,255
		DrawRect x,y,2,2

		
		DrawText z,0,0
		DrawText y,0,15
		
		If KeyDown(KEY_RIGHT)
			x = x +1
		EndIf
		If KeyDown(KEY_LEFT)
			x = x -1
		EndIf
		If KeyDown(KEY_DOWN)
			y = y +1
			z = z +1
		EndIf
		If KeyDown(KEY_UP)
			y = y -1
			z = z -1
		EndIf
		If KeyHit(KEY_SPACE)
			Jump()
		EndIf

		
	End Method
	
	Method Jump()
	
		y=y-(Cos(40)*5)
		
	End Method
	
End Type

Type Circle Extends Entity
  		
	Function Create:Circle(green,red,blue,x,y,z)
		Local ent:Circle = New Circle
		ent.x = x
		ent.y = y
		ent.z = z
		ent.green = green
		ent.red = red
		ent.blue = blue
		entity_list.AddLast(ent)
		Return ent
	End Function
	
	Method Update()
	
		SetColor red,green,blue
		DrawOval x,y,200,200
		SetColor 255,255,255
		DrawRect x,y,2,2
		
	End Method
	
End Type

Graphics 640,480,0

Global entity_list:TList = CreateList()

Global rectangle1:Rectangle = Rectangle.Create(255,0,0,60,220,220)
Global circle1:Circle = Circle.Create(0,255,0,120,100,100)


While Not KeyHit(KEY_ESCAPE)

	SortList entity_list
		
	For Local e:Entity = EachIn entity_list
		e.Update()
	Next
	
	Flip
	Cls
Wend