public CollisionVector CollidesWith(Vector3D vector, Vector3D origin) { CollisionVector collisionVector = null; vector = Matrix3D.Invert(_transform.TransformationMatrix).Transform(vector); origin = Matrix3D.Invert(_transform.TransformationMatrix).TransformVector(origin); foreach (BaseUnit unit in _units) { collisionVector = unit.CollidesWith(vector, origin); if (collisionVector != null) { return(new CollisionVector(collisionVector.Color, _transform.TransformationMatrix.Transform(collisionVector.Vector), collisionVector.Face)); } } return(collisionVector); }
public CollisionVector CollidesWith(Vector3D vector, Vector3D origin) { vector = Vector3D.Normalize(vector); vector = Matrix3D.Invert(_transform.TransformationMatrix).Transform(vector); origin = Matrix3D.Invert(_transform.TransformationMatrix).TransformVector(origin); var result = VectorAABBIntersection(vector, origin); bool intersected = result.intersected; if (!intersected) { return(null); } //Collision found Vector3D collisionVector = result.collisionVector; collisionVector = _transform.TransformationMatrix.Transform(collisionVector); //Find collision face //0 - South //1 - East //2 - North //3 - West //4 - Up //5 - Down //TODO: Find face byte collisionFace = 0; CollisionVector collVector = new CollisionVector(_color, collisionVector, collisionFace); return(collVector); }