@animech-public/playcanvas
Version:
PlayCanvas WebGL game engine
2 lines (1 loc) • 1.77 kB
JavaScript
import{TorusGeometry as s}from"../../../scene/geometry/torus-geometry.js";import{TriData as t}from"../tri-data.js";import{Shape as e}from"./shape.js";class i extends e{constructor(s,e={}){var i,r,a;super(s,e),this._tubeRadius=.01,this._ringRadius=.5,this._sectorAngle=void 0,this._lightDir=void 0,this._tolerance=.05,this._tubeRadius=null!=(i=e.tubeRadius)?i:this._tubeRadius,this._ringRadius=null!=(r=e.ringRadius)?r:this._ringRadius,this._sectorAngle=null!=(a=e.sectorAngle)?a:this._sectorAngle,this.triData=[new t(this._createTorusGeometry())],this._createDisk()}_createTorusGeometry(){return new s({tubeRadius:this._tubeRadius+this._tolerance,ringRadius:this._ringRadius,sectorAngle:this._sectorAngle,segments:20})}_createTorusMesh(t){const e=new s({tubeRadius:this._tubeRadius,ringRadius:this._ringRadius,sectorAngle:t,segments:80});return this._createMesh(e,this._shading)}_createDisk(){this._createRoot("disk"),this._createRenderComponent(this.entity,[this._createTorusMesh(this._sectorAngle),this._createTorusMesh(360)]),this.drag(!1)}set tubeRadius(s){this._tubeRadius=null!=s?s:.1,this._updateTransform()}get tubeRadius(){return this._tubeRadius}set ringRadius(s){this._ringRadius=null!=s?s:.1,this._updateTransform()}get ringRadius(){return this._ringRadius}set tolerance(s){this._tolerance=s,this._updateTransform()}get tolerance(){return this._tolerance}_updateTransform(){this.triData[0].fromGeometry(this._createTorusGeometry()),this.meshInstances[0].mesh=this._createTorusMesh(this._sectorAngle),this.meshInstances[1].mesh=this._createTorusMesh(360)}drag(s){this.meshInstances[0].visible=!s,this.meshInstances[1].visible=s}hide(s){if(s)return this.meshInstances[0].visible=!1,void(this.meshInstances[1].visible=!1);this.drag(!1)}}export{i as ArcShape};