summaryrefslogtreecommitdiff
path: root/webhogg/game_server/src/collide.rs
diff options
context:
space:
mode:
Diffstat (limited to 'webhogg/game_server/src/collide.rs')
-rw-r--r--webhogg/game_server/src/collide.rs28
1 files changed, 14 insertions, 14 deletions
diff --git a/webhogg/game_server/src/collide.rs b/webhogg/game_server/src/collide.rs
index 16b5357..940cffd 100644
--- a/webhogg/game_server/src/collide.rs
+++ b/webhogg/game_server/src/collide.rs
@@ -1,4 +1,4 @@
-use crate::maths::{Vec2, AABox, RBox};
+use crate::math::{Vec2, AABox, RBox};
pub trait Collide<Rhs> {
fn collides(&self, other: &Rhs) -> bool;
@@ -12,7 +12,7 @@ impl Collide<Vec2> for Vec2 {
impl Collide<Vec2> for AABox {
fn collides(&self, other: &Vec2) -> bool {
- self.pos < *other && other < &(self.pos + self.size)
+ self.pos < *other && other < &(self.pos + self.size)
}
}
@@ -25,8 +25,8 @@ impl Collide<AABox> for AABox {
impl Collide<Vec2> for RBox {
fn collides(&self, other: &Vec2) -> bool {
- let v1_diff = *other + self.v1 * (-self.v1.scalar(&(*other - self.pos)) / self.v1.distance2());
- let v2_diff = *other + self.v2 * (-self.v2.scalar(&(*other - self.pos)) / self.v2.distance2());
+ let v1_diff = *other + self.v1 * (-self.v1.dot(&(*other - self.pos)) / self.v1.norm2());
+ let v2_diff = *other + self.v2 * (-self.v2.dot(&(*other - self.pos)) / self.v2.norm2());
let v1_dist = ((v1_diff - self.pos) / self.v2).x;
let v2_dist = ((v2_diff - self.pos) / self.v1).x;
@@ -42,16 +42,16 @@ impl Collide<AABox> for RBox {
let other_size = other.pos + other.size;
// project points onto a orthogonal line
- let v1_diff = other.pos + self.v1 * (-self.v1.scalar(&(other.pos - self.pos)) / self.v1.distance2());
- let v2_diff = other.pos + self.v2 * (-self.v2.scalar(&other.pos) / self.v2.distance2());
- let v1_diff_size = other_size + self.v1 * (-self.v1.scalar(&(other_size - self.pos)) / self.v1.distance2());
- let v2_diff_size = other_size + self.v2 * (-self.v2.scalar(&(other_size - self.pos)) / self.v2.distance2());
+ let v1_diff = other.pos + self.v1 * (-self.v1.dot(&(other.pos - self.pos)) / self.v1.norm2());
+ let v2_diff = other.pos + self.v2 * (-self.v2.dot(&other.pos) / self.v2.norm2());
+ let v1_diff_size = other_size + self.v1 * (-self.v1.dot(&(other_size - self.pos)) / self.v1.norm2());
+ let v2_diff_size = other_size + self.v2 * (-self.v2.dot(&(other_size - self.pos)) / self.v2.norm2());
- // calculate the distance
- let v1_dist = ((v1_diff - self.pos) / self.v2);
- let v2_dist = ((v2_diff - self.pos) / self.v1);
- let v1_dist_size = ((v1_diff_size - self.pos) / self.v2);
- let v2_dist_size = ((v2_diff_size - self.pos) / self.v1);
+ // calculate the norm
+ let v1_dist = (v1_diff - self.pos) / self.v2;
+ let v2_dist = (v2_diff - self.pos) / self.v1;
+ let v1_dist_size = (v1_diff_size - self.pos) / self.v2;
+ let v2_dist_size = (v2_diff_size - self.pos) / self.v1;
let v1_dist = if v1_dist.x.is_finite() {v1_dist.x} else {v1_dist.y};
let v2_dist = if v2_dist.x.is_finite() {v2_dist.x} else {v2_dist.y};
@@ -150,7 +150,7 @@ impl<S, T: Collide<S>> Collide<S> for Vec<T> {
}
#[test]
- fn test_collide_Rbox_dot() {
+ fn test_collide_rbox_dot() {
let a = Vec2{x: 1.0, y: 1.0};
let b = Vec2{x: 1.0, y: 1.0};
let c = Vec2{x: 1.0, y: -1.0};