@animech-public/playcanvas
Version:
PlayCanvas WebGL game engine
2 lines (1 loc) • 1.67 kB
JavaScript
import{Vec2 as e}from"../../core/math/vec2.js";import{CapsuleGeometry as r}from"../../scene/geometry/capsule-geometry.js";import{ConeGeometry as t}from"../../scene/geometry/cone-geometry.js";import{CylinderGeometry as o}from"../../scene/geometry/cylinder-geometry.js";import{TorusGeometry as m}from"../../scene/geometry/torus-geometry.js";import{Mesh as a}from"../../scene/mesh.js";import{BoxGeometry as s}from"../../scene/geometry/box-geometry.js";import{SphereGeometry as n}from"../../scene/geometry/sphere-geometry.js";import{PlaneGeometry as i}from"../../scene/geometry/plane-geometry.js";const y=[];function c(c,h){let u=null;for(let e=0;e<y.length;e++)y[e].type===h&&y[e].device===c&&(u=y[e].primData);if(!u){let p,f;switch(h){case"box":p=a.fromGeometry(c,new s),f={x:2,y:2,z:2,uv:2/3};break;case"capsule":p=a.fromGeometry(c,new r({radius:.5,height:2})),f={x:2*Math.PI,y:Math.PI,z:2*Math.PI,uv:1/3+1/3/3*2};break;case"cone":p=a.fromGeometry(c,new t({baseRadius:.5,peakRadius:0,height:1})),f={x:2.54,y:2.54,z:2.54,uv:1/3+1/3/3};break;case"cylinder":p=a.fromGeometry(c,new o({radius:.5,height:1})),f={x:Math.PI,y:1.58,z:Math.PI,uv:1/3+1/3/3*2};break;case"plane":p=a.fromGeometry(c,new i({halfExtents:new e(.5,.5),widthSegments:1,lengthSegments:1})),f={x:0,y:1,z:0,uv:1};break;case"sphere":p=a.fromGeometry(c,new n({radius:.5})),f={x:Math.PI,y:Math.PI,z:Math.PI,uv:1};break;case"torus":p=a.fromGeometry(c,new m({tubeRadius:.2,ringRadius:.3})),f={x:.5*Math.PI*.5-.1*Math.PI*.1,y:.4,z:.4,uv:1};break;default:throw new Error(`Invalid primitive type: ${h}`)}p.incRefCount(),u={mesh:p,area:f},y.push({type:h,device:c,primData:u})}return u}export{c as getShapePrimitive};