File: src/collision/RaycastResult.js
var Vec3 = require('../math/Vec3');
module.exports = RaycastResult;
/**
* Storage for Ray casting data.
* @class RaycastResult
* @constructor
*/
function RaycastResult(){
/**
* @property {Vec3} rayFromWorld
*/
this.rayFromWorld = new Vec3();
/**
* @property {Vec3} rayToWorld
*/
this.rayToWorld = new Vec3();
/**
* @property {Vec3} hitNormalWorld
*/
this.hitNormalWorld = new Vec3();
/**
* @property {Vec3} hitPointWorld
*/
this.hitPointWorld = new Vec3();
/**
* @property {boolean} hasHit
*/
this.hasHit = false;
/**
* The hit shape, or null.
* @property {Shape} shape
*/
this.shape = null;
/**
* The hit body, or null.
* @property {Body} body
*/
this.body = null;
/**
* The index of the hit triangle, if the hit shape was a trimesh.
* @property {number} hitFaceIndex
* @default -1
*/
this.hitFaceIndex = -1;
/**
* Distance to the hit. Will be set to -1 if there was no hit.
* @property {number} distance
* @default -1
*/
this.distance = -1;
/**
* If the ray should stop traversing the bodies.
* @private
* @property {Boolean} _shouldStop
* @default false
*/
this._shouldStop = false;
}
/**
* Reset all result data.
* @method reset
*/
RaycastResult.prototype.reset = function () {
this.rayFromWorld.setZero();
this.rayToWorld.setZero();
this.hitNormalWorld.setZero();
this.hitPointWorld.setZero();
this.hasHit = false;
this.shape = null;
this.body = null;
this.hitFaceIndex = -1;
this.distance = -1;
this._shouldStop = false;
};
/**
* @method abort
*/
RaycastResult.prototype.abort = function(){
this._shouldStop = true;
};
/**
* @method set
* @param {Vec3} rayFromWorld
* @param {Vec3} rayToWorld
* @param {Vec3} hitNormalWorld
* @param {Vec3} hitPointWorld
* @param {Shape} shape
* @param {Body} body
* @param {number} distance
*/
RaycastResult.prototype.set = function(
rayFromWorld,
rayToWorld,
hitNormalWorld,
hitPointWorld,
shape,
body,
distance
){
this.rayFromWorld.copy(rayFromWorld);
this.rayToWorld.copy(rayToWorld);
this.hitNormalWorld.copy(hitNormalWorld);
this.hitPointWorld.copy(hitPointWorld);
this.shape = shape;
this.body = body;
this.distance = distance;
};