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 }