UNPKG

whs

Version:

Super-fast 3D framework for Web Applications & Games. Based on Three.js

439 lines (343 loc) 7.64 kB
import { Geometry, Material, Mesh, MeshStandardMaterial, JSONLoader, LineCurve3, Shape as ShapeNative, Vector2, Vector3 } from 'three'; import { Loop, Component, App, CameraComponent, LightComponent, MeshComponent } from "./core"; import { Box, BoxParams, Cone, Extrude, Group, Icosahedron, Importer, Lathe, Line, Octahedron, Parametric, Plane, Polyhedron, Sphere, Shape, Ring } from './components/meshes'; import { CubeCamera, OrthographicCamera, PerspectiveCamera, } from './components/cameras'; import { AmbientLight, AreaLight, DirectionalLight, HemisphereLight, PointLight, SpotLight } from './components/lights'; import { AnimationModule, DynamicGeometryModule, TextureModule, } from './modules/mesh'; import { ControlsModule, ElementModule, EventsPatchModule, FogModule, OrbitControlsModule, PostProcessorModule, RenderingModule, ResizeModule, SceneModule, StateModule, VirtualMouseModule } from './modules/app'; // Core const app = new App(); app.start(); let loop = new Loop(() => {}); loop = new Loop(() => {}, true); loop.start(app); loop.stop(app); loop.execute(); const component = new Component(); component.addTo(app); component.clone(); const component2 = new Component(); component.copy(component2); // Testing parent of component (ModuleSystem) // TODO pass module type component.integrateModules(); component.applyModule(null); const map = component.applyBridge(); component.disposeModule(null); component.disposeModules(); component.module(null).disposeModules(); const camera = new CameraComponent(); const clonedCamera = camera.clone(); // Meshes const mesh = new MeshComponent({}); mesh.addTo(app); mesh.clone(); mesh.copy({}); mesh.build(); const boxParams: BoxParams = { build: false, position: { x : 1 }, material: new MeshStandardMaterial() } const box = new Box(boxParams); box.build(); box.addTo(app); const sphere = new Sphere({ build: false, position: { x: 1 }, material: new MeshStandardMaterial() }); sphere.buildGeometry({buffer: true}); sphere.addTo(app); const cone = new Cone({build: false}); cone.buildGeometry({buffer: true}); cone.addTo(app); const shapeNative = new ShapeNative([ new Vector2(-4,-4), new Vector2(-2,0), new Vector2(-4,4), new Vector2(0,2), new Vector2(4,4), new Vector2(2,0), new Vector2(4,-4), new Vector2(0,-2) ]); let extrude = new Extrude({ build: false, geometry: { shapes: shapeNative, options: { bevelEnabled: false, bevelSize: 0, amount: 2 } } }); extrude = new Extrude({ geometry: { shapes: [shapeNative, shapeNative], options: { bevelEnabled: false, bevelSize: 0, amount: 2 } } }); let group = new Group(); const object3D = group.build(); sphere.addTo(group); group = new Group(extrude, cone); const icosahedron = new Icosahedron({ geometry: { radius: 2, detail: 0.2 } }); icosahedron.addTo(app); new Importer({ loader: new JSONLoader(), url: 'some/path/model.json', onLoad: () => { console.log('on load'); }, onProgress: () => { console.log('loading in progress'); }, onError: () => { console.log('error loading with Importer'); }, parser(geometry: Geometry, material: Material) { return new Mesh(geometry, material); } }).addTo(app); const lathe = new Lathe({ geometry: { points: [new Vector2(1, 1)] } }); lathe.addTo(app); const line = new Line({ geometry: { curve: new LineCurve3(new Vector3(0, 0, 0), new Vector3(10, 0, 0)), points: 5 }, buffer: true }); line.addTo(app); const octahedron = new Octahedron({ geometry: { radius: 1, detail: 0 }, buffer: true }); octahedron.addTo(app); const createParametric = (u: number, v: number) => { return new Vector3(u * 30, Math.random() * 5, v * 30); }; const parametric = new Parametric({ geometry: { func: createParametric, slices: 5, stacks: 8 }, buffer: true }); parametric.addTo(app); const plane = new Plane({ geometry: { height: 3, width: 10, hSegments: 2, wSegments: 3 }, buffer: true }); plane.addTo(app); const polyhedron = new Polyhedron({ geometry: { verticesOfCube: [ -1, -1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1 ], indicesOfFaces: [ 2, 1, 0, 0, 3, 2, 0, 4, 7, 7, 3, 0, 0, 1, 5, 5, 4, 0, 1, 2, 6, 6, 5, 1, 2, 3, 7, 7, 6, 2, 4, 5, 6, 6, 7, 4 ], detail: 6, radius: 4, }, buffer: true }); polyhedron.addTo(app); const ring = new Ring({ geometry: { innerRadius: 1, outerRadius: 50, phiSegments: 5, thetaLength: Math.PI /3, thetaSegments: 10, thetaStart: 0 } }); ring.addTo(app); const shape = new Shape({ geometry: { shapes: [new ShapeNative([new Vector2(2, 2), new Vector2(3, 3)])] }, buffer: true }); shape.addTo(app); // Cameras const cubeCamera = new CubeCamera({ build: false, position: { x: 1, y: 10, z: 0 } }); const nativeCubeCamera = cubeCamera.build(); const orthographicCamera = new OrthographicCamera({ build: false, far: 100 }); const orthographicCameraNative = orthographicCamera.build(); const perspectiveCamera = new PerspectiveCamera({ build: false, far: 100 }); perspectiveCamera.wrap(); const perspectiveCameraNative = orthographicCamera.build(); // Lights const light = new LightComponent({build: false}); light.build(); const clonedLight = light.clone(); const copiedLight = light.copy(clonedLight); copiedLight.wrap(); copiedLight.addTo(app); const ambientLight = new AmbientLight({ color: 0xffffff, intensity: 0.5 }); ambientLight.addTo(app); const areaLight = new AreaLight({build: false}); areaLight.build(); areaLight.addTo(app); const hemisphereLight = new HemisphereLight({ build: false }); hemisphereLight.build(); hemisphereLight.addTo(app); const pointLight = new PointLight({build: false}); pointLight.build(); pointLight.addTo(app); const spotLight = new SpotLight({build: false}); spotLight.build(); spotLight.addTo(app); // Mesh Modules const animationModule = new AnimationModule(app, false, {speed: 1.2}); animationModule.play('clip'); const dynamicGeometryModule = new DynamicGeometryModule({attributes: false}); let textureModule = new TextureModule([{ url: 'some/path', type: 'map' }]); textureModule = new TextureModule({ url: 'some/path', type: 'bumpMap' }); // app Modules const controlsModule = new ControlsModule(); const orbitControlsModule = new OrbitControlsModule(); const elementModule = new ElementModule(document.getElementById('app')); elementModule.createElement(); const eventsPatchModule = new EventsPatchModule(); eventsPatchModule.patchEvents(null, null, ['mouseup', 'mousedown']); const fogModule = new FogModule({}, 'linear'); const postProcessorModule = new PostProcessorModule(); postProcessorModule.render(); postProcessorModule.renderToScreen(true); const renderingModule = new RenderingModule(); renderingModule.play(); renderingModule.stop(); const resizeModule = new ResizeModule({auto: true}); resizeModule.addAutoresize(); resizeModule.addCallback(function() {console.log('called back')}); resizeModule.setSize(10, 10); resizeModule.trigger(); const sceneModule = new SceneModule(false); const stateModule = new StateModule(); const data = stateModule.get('key'); const virtualMouseModule = new VirtualMouseModule(); virtualMouseModule.hovers(new Box(), false); virtualMouseModule.track(new Sphere(), false);