1 module prova.attachables.colliders.circlecollider; 2 3 import prova.attachables; 4 import prova.collision.intersects; 5 import prova.collision.resolve; 6 import prova.core; 7 import prova.graphics; 8 import prova.math; 9 10 /// 11 class CircleCollider : Collider2D 12 { 13 private float _radius; 14 15 /// 16 this(float radius) 17 { 18 super(Shape.CIRCLE); 19 _radius = radius; 20 } 21 22 /// 23 @property float radius() 24 { 25 return _radius; 26 } 27 28 /// 29 @property void radius(float radius) 30 { 31 resize(radius); 32 } 33 34 /// 35 void resize(float radius) 36 { 37 this._radius = radius; 38 updateSize(); 39 } 40 41 /// 42 override Vector2 getSize() 43 { 44 return Vector2(_radius * 2, _radius * 2); 45 } 46 47 /// 48 override bool intersects(PointCollider collider) 49 { 50 return pointIntersectsCircle(collider, this); 51 } 52 53 /// 54 override bool intersects(CircleCollider collider) 55 { 56 return circleIntersectsCircle(this, collider); 57 } 58 59 /// 60 override bool intersects(RectCollider collider) 61 { 62 return circleIntersectsRect(this, collider); 63 } 64 65 alias intersects = Collider2D.intersects; 66 67 /// 68 override Vector2 resolve(PointCollider collider) 69 { 70 return -resolvePointCircle(collider, this); 71 } 72 73 /// 74 override Vector2 resolve(CircleCollider collider) 75 { 76 return resolveCircleCircle(this, collider); 77 } 78 79 /// 80 override Vector2 resolve(RectCollider collider) 81 { 82 return resolveCircleRect(this, collider); 83 } 84 85 alias resolve = Collider2D.resolve; 86 }