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