Port of Hardon Collider

Monkey Archive Forums/Monkey Projects/Port of Hardon Collider

ratking(Posted 2016) [#1]
In order to learn Monkey-X more 'in-depth' I ported the LÖVE collision library Hardon Collider. The library is on git: https://github.com/ratkingsminion/hc-monkey/ It supports points, circles, and convex and concave polygons. Rectangles are just convex polys. It only checks if there is collision between the objects and doesn't separate them.

Here's an example: https://dl.dropboxusercontent.com/u/10650964/_stuff/hc-monkey/hc-monkey-example.html




Jesse(Posted 2016) [#2]
Nice! Reminds me of this this I posted a while back:
http://www.monkey-x.com/Community/posts.php?topic=2571

same principle.


Leo Santos(Posted 2016) [#3]
That's great, thanks!
I'd love to see an example that includes collision reaction. Is there a way to get a normal out of a collision?


ratking(Posted 2016) [#4]
The mtv_x and mtv_y values you get from OnCollision() (in the ICollisionResponse interface) are the delta position the shape is shoved back, so to speak. As soon as I have time I'll try to make a small example.


rIKmAN(Posted 2016) [#5]
Gotta say, unless you've made a typo that is the funniest library name I've ever seen lol!


ratking(Posted 2016) [#6]
It's neither a typo, nor is it by me. :-P It's just a straight port of an already existing collision library from the LÖVE community. As far as I know they often use such Freudian names for their libraries, like HUMP or Lovetoys or Quickie...


Richard Betson(Posted 2016) [#7]
Hi,

I've been playing around with this a little and so far so good. There does seem to be a problem with using 'Point' shapes.

I will have a little demo video in my thread showing this collision library in action. I see potential. :)

Edit:
I'd love to see an example that includes collision reaction. Is there a way to get a normal out of a collision?

I am looking into this as well. I'll need a normal for the reaction part of the collision.


Nobuyuki(Posted 2016) [#8]
Looking forward to separation code / normal generating / handling.


Raz(Posted 2016) [#9]
Thanks for this, if there's one thing I suck at, it's collision code, this will come in very useful


Raz(Posted 2016) [#10]
This is probably a really daft question. But lets say I want to extend the Shape Class as Tile. How do I go about creating an instance of Tile that uses the HC.Rectangle(x,y,width,height) function?

Class Tile Extends Shape
	Const WIDTH:Float = 16
	Const HEIGHT:Float = 16
	
	Field x:Float
	Field y:Float
	
	Function Create:Tile(tX:Float, tY:Float, tW:Float, tH:Float)
		Local tT:Tile = NApp.hc.Rectangle(tX, tY, tW, tH)
		tT.x = tX
		tT.y = tY
		Return tT
	End
	
	Method Render:Void(canvas:Canvas)
		canvas.DrawRect(x, y, WIDTH, HEIGHT)
	End Method
	
End


I thought about casting the returned Shape, but I get a null...

Local tT:Tile = NApp.hc.Rectangle(tX, tY, tW, tH)


to

Local tT:Tile = Tile(NApp.hc.Rectangle(tX, tY, tW, tH))


Any clues?


muddy_shoes(Posted 2016) [#11]
I haven't used HC, but I'd say you're probably making a bit of an error by trying to extending anything in that way. I'd imagine you'll be much better off defining your Tile class as having a collision shape member. I'd only look at extending Shape if I were really creating a new collision shape (like a CircleSectorShape or something).


Raz(Posted 2016) [#12]
I did wonder that as well, in fact that's exactly where I went initially, but assumed (wrongly it seems!) that it might be more efficient to extend.


ratking(Posted 2016) [#13]
muddy_shoes is right, you would use a Shape as a member variable.

Your code bit is a bit strange anyway, I wonder why you do Extend Shape if you don't actually implement the methods of Shape... :)