@animech-public/playcanvas
Version:
PlayCanvas WebGL game engine
2 lines (1 loc) • 2.5 kB
JavaScript
import{Quat as e}from"../../../core/math/quat.js";import{Vec3 as t}from"../../../core/math/vec3.js";import{Entity as i}from"../../../framework/entity.js";import{BoxGeometry as s}from"../../../scene/geometry/box-geometry.js";import{CylinderGeometry as h}from"../../../scene/geometry/cylinder-geometry.js";import{TriData as n}from"../tri-data.js";import{Shape as o}from"./shape.js";const _=new t,l=new t,a=new e;class r extends o{constructor(e,t={}){super(e,t),this._gap=0,this._lineThickness=.02,this._lineLength=.5,this._boxSize=.12,this._tolerance=.1,this._box=void 0,this._line=void 0,this._flipped=!1,this.triData=[new n(new s),new n(new h,1)],this._createBoxLine()}set gap(e){this._gap=null!=e?e:0,this._updateLine(),this._updateBox()}get gap(){return this._gap}set lineThickness(e){this._lineThickness=null!=e?e:1,this._updateLine(),this._updateBox()}get lineThickness(){return this._lineThickness}set lineLength(e){this._lineLength=null!=e?e:1,this._updateLine(),this._updateBox()}get lineLength(){return this._lineLength}set boxSize(e){this._boxSize=null!=e?e:1,this._updateBox()}get boxSize(){return this._boxSize}set tolerance(e){this._tolerance=e,this._updateLine()}get tolerance(){return this._tolerance}set flipped(e){this._flipped!==e&&(this._flipped=e,this._rotation.equals(t.ZERO)?_.set(0,0,this._flipped?180:0):_.copy(this._rotation).mulScalar(this._flipped?-1:1),this._line.enabled=!this._flipped,this.entity.setLocalEulerAngles(_))}get flipped(){return this._flipped}_createBoxLine(){this._createRoot("boxLine"),this._box=new i(`box:${this.axis}`),this.entity.addChild(this._box),this._updateBox(),this._addRenderMesh(this._box,"box",this._shading),this._line=new i(`line:${this.axis}`),this.entity.addChild(this._line),this._updateLine(),this._addRenderMesh(this._line,"cylinder",this._shading)}_updateBox(){_.set(0,this._gap+.5*this._boxSize+this._lineLength,0),a.set(0,0,0,1),l.set(this._boxSize,this._boxSize,this._boxSize),this.triData[0].setTransform(_,a,l),this._box.setLocalPosition(0,this._gap+.5*this._boxSize+this._lineLength,0),this._box.setLocalScale(this._boxSize,this._boxSize,this._boxSize)}_updateLine(){_.set(0,this._gap+.5*this._lineLength,0),a.set(0,0,0,1),l.set(this._lineThickness+this._tolerance,this._lineLength,this._lineThickness+this._tolerance),this.triData[1].setTransform(_,a,l),this._line.setLocalPosition(0,this._gap+.5*this._lineLength,0),this._line.setLocalScale(this._lineThickness,this._lineLength,this._lineThickness)}}export{r as BoxLineShape};