cannon-es-control
Version:
A lightweight 3D physics engine written in JavaScript with control system tools
107 lines (101 loc) • 2.09 kB
text/typescript
import { Vec3 } from '../math/Vec3'
import type { Body } from '../objects/Body'
import type { Shape } from '../shapes/Shape'
/**
* Storage for Ray casting data
*/
export class RaycastResult {
/**
* rayFromWorld
*/
rayFromWorld: Vec3
/**
* rayToWorld
*/
rayToWorld: Vec3
/**
* hitNormalWorld
*/
hitNormalWorld: Vec3
/**
* hitPointWorld
*/
hitPointWorld: Vec3
/**
* hasHit
*/
hasHit: boolean
/**
* shape
*/
shape: Shape | null
/**
* body
*/
body: Body | null
/**
* The index of the hit triangle, if the hit shape was a trimesh
*/
hitFaceIndex: number
/**
* Distance to the hit. Will be set to -1 if there was no hit
*/
distance: number
/**
* If the ray should stop traversing the bodies
*/
shouldStop: boolean
constructor() {
this.rayFromWorld = new Vec3()
this.rayToWorld = new Vec3()
this.hitNormalWorld = new Vec3()
this.hitPointWorld = new Vec3()
this.hasHit = false
this.shape = null
this.body = null
this.hitFaceIndex = -1
this.distance = -1
this.shouldStop = false
}
/**
* Reset all result data.
*/
reset(): void {
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
}
/**
* abort
*/
abort(): void {
this.shouldStop = true
}
/**
* Set result data.
*/
set(
rayFromWorld: Vec3,
rayToWorld: Vec3,
hitNormalWorld: Vec3,
hitPointWorld: Vec3,
shape: Shape,
body: Body,
distance: number
): void {
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
}
}