RectsOverlap
BlitzMax Forums/BlitzMax Beginners Area/RectsOverlap
| ||
Do I have to program my own RectsOverlap function or am I missing the new equivalent? |
| ||
Good point. We do need a native one -- Birdie rolled this one early in the beta, so I know I've overlooked the need for it since then!Function OverLap (x0, y0, x1, y1, x2, y2, x3, y3) If x0 > x3 Or x1 < x2 Then Return False If y0 > y3 Or y1 < y2 Then Return False Return True End Function |
| ||
Or you could do.. Function OverLap (x0,y0,x1,y1,wid,hig) |
| ||
Thanks James, Birdie is closest to retaining compatability with the old one so that wins it for me. |
| ||
I'm coding my own exact replacement for the old syntax. |
| ||
Hope this helps. A slight modification of Birdie's function.'legacy function Function RectsOverlap (x0, y0, w0, h0, x2, y2, w2, h2) If x0 > (x2 + w2) Or (x0 + w0) < x2 Then Return False If y0 > (y2 + h2) Or (y0 + h0) < y2 Then Return False Return True End Function |
| ||
Shagwana did a nice n fast one. I've adapted it to use in a Bmax TRectangle type.Type TRectangle Method Intersect:Int( rect:TRectangle ) '// Thanks to Shagwana for this return ( ( ( ( (rect.X + rect.W) - X) ^ ( rect.X - (X + W) ) ) And ( ( rect.Y - (Y + H) ) ^ ( (rect.Y + rect.H) - Y ) ) ) And $80000000 ) End Method End Type This one is fast, but might give weird results with negative coordinates. |
| ||
I don't know how to use that last one? |
| ||
Here's a non-OOP'ed version then.Function RectsIntersect:Int( srcX%, srcY%, srcW%, srcH%, dstX%, dstY%, dstW%, dstH% ) return ( ( ( ( (dstX + dstW) - srcX) ^ ( dstX - (srcX + srcW) ) ) And ( ( dstY - (srcY + srcH) ) ^ ( (dstY + dstH) - srcY ) ) ) And $80000000 ) End Function |
| ||
With the OOP version, where would I put the code? |
| ||
In a subclass of TRectangle. Then you'd use your subclass everywhere instead of the standard TRectangle type.Type MyTRectangle Extends TRectangle ' Intersection Method Goes Here End Type (Edit): Never mind that. I thought that TRectangle was a built-in type. Defiance's first example is correct. |
| ||
Or change the "Method" into "Function" and just call: TRectangle.Intersect |
| ||
Is it possible somebody could post a short program? I'm confused. Thanks, |
| ||
I don't think you want to place it in the type just because you can. I really don't see why you would want a function like this inside an extended type. If you extend TRectangle with MyTRectangle then one or both of your types need to be a MyTRectangle. If I defined TRectangle myself I might put it in but in this case, I would just do function Intersect:Int( r1:TRectangle, r2:TRectangle ) '// Thanks to Shagwana for this return ( ( ( ( (r2.X + r2.W) - r1.X) ^ ( r2.X - (r1.X + r1.W) ) ) And ( ( r2.Y - (r1.Y + r1.H) ) ^ ( (r2.Y + r2.H) - r1.Y ) ) ) And $80000000 ) End Method this function just compares base information that's why I wouldn't put it in an extended type. |
| ||
Yep thats one of my babys!. Original work is here. It does work but only if you obey certain rules when working with it (see link). |
| ||
just thought i should point out to anyone using defiance's version up there, that you should have ~ instead of ^ as xor and you should be using & instead of "and" |