From 0d40cefa158f6273c37d6f1eacce50ffb637a523 Mon Sep 17 00:00:00 2001 From: Justin Worthe Date: Wed, 12 Sep 2018 22:22:13 +0200 Subject: Mostly implemented capsules WIP: This is in SORE need of unit tests --- src/hitbox.rs | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) (limited to 'src/hitbox.rs') diff --git a/src/hitbox.rs b/src/hitbox.rs index 32f432f..75cc89b 100644 --- a/src/hitbox.rs +++ b/src/hitbox.rs @@ -2,7 +2,8 @@ use geometry::*; pub enum Hitbox { Circle(CircleHitbox), - Point(PointHitbox) + Point(PointHitbox), + Capsule(CapsuleHitbox) } pub struct CircleHitbox { @@ -14,6 +15,11 @@ pub struct PointHitbox { pub pos: Vec2d } +pub struct CapsuleHitbox { + pub line: LineSegment, + pub radius: f64 +} + impl Hitbox { pub fn intersect(a: &Hitbox, b: &Hitbox) -> bool { use self::Hitbox::*; @@ -22,7 +28,12 @@ impl Hitbox { (Circle(x), Circle(y)) => circles_intersect(x, y), (Circle(x), Point(y)) => circle_point_intersect(x, y), (Point(x), Circle(y)) => circle_point_intersect(y, x), - (Point(x), Point(y)) => points_intersect(x, y) + (Point(x), Point(y)) => points_intersect(x, y), + (Capsule(x), Capsule(y)) => capsules_intersect(x, y), + (Capsule(x), Circle(y)) => capsule_circle_intersect(x, y), + (Circle(x), Capsule(y)) => capsule_circle_intersect(y, x), + (Capsule(x), Point(y)) => capsule_point_intersect(x, y), + (Point(x), Capsule(y)) => capsule_point_intersect(y, x), } } } @@ -38,3 +49,15 @@ fn circle_point_intersect(x: &CircleHitbox, y: &PointHitbox) -> bool { fn points_intersect(x: &PointHitbox, y: &PointHitbox) -> bool { x.pos == y.pos } + +fn capsules_intersect(x: &CapsuleHitbox, y: &CapsuleHitbox) -> bool { + true //TODO +} + +fn capsule_circle_intersect(x: &CapsuleHitbox, y: &CircleHitbox) -> bool { + x.line.distance(y.pos) <= x.radius + y.radius +} + +fn capsule_point_intersect(x: &CapsuleHitbox, y: &PointHitbox) -> bool { + x.line.distance(y.pos) <= x.radius +} -- cgit v1.2.3