UNPKG

declarations

Version:

[![npm version](https://badge.fury.io/js/declarations.svg)](https://www.npmjs.com/package/declarations)

106 lines (105 loc) 4.38 kB
/// <reference path="../../stats/stats.d.ts" /> /// <reference path="../physijs.d.ts" /> Physijs.scripts.worker = '../physijs_worker.js'; Physijs.scripts.ammo = 'examples/js/ammo.js'; var initScene, render, _boxes = [], spawnBox, inc_ready, renderer, render_stats, physics_stats, scene, ground_material, ground, light, camera; var cubes = []; var total_cubes = 0; var total_ready = 0; var max_on_screen = 100; var spawn_per_tick = 25; initScene = function () { renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setSize(window.innerWidth, window.innerHeight); renderer.shadowMapEnabled = true; renderer.shadowMapSoft = true; document.getElementById('viewport').appendChild(renderer.domElement); render_stats = new Stats(); render_stats.domElement.style.position = 'absolute'; render_stats.domElement.style.top = '0px'; render_stats.domElement.style.zIndex = 100; document.getElementById('viewport').appendChild(render_stats.domElement); physics_stats = new Stats(); physics_stats.domElement.style.position = 'absolute'; physics_stats.domElement.style.top = '50px'; physics_stats.domElement.style.zIndex = 100; document.getElementById('viewport').appendChild(physics_stats.domElement); scene = new Physijs.Scene; scene.setGravity(new THREE.Vector3(0, -30, 0)); scene.addEventListener('update', function () { scene.simulate(undefined, 1); physics_stats.update(); while (cubes.length > max_on_screen) { scene.remove(cubes[0]); cubes[0].geometry.dispose(); cubes[0].material.dispose(); cubes.splice(0, 1); } document.getElementById('totalcubecount').textContent = (total_cubes.toString()); document.getElementById('currentcubecount').textContent = (cubes.length.toString()); document.getElementById('totalobjects').textContent = (scene.__objects.length); if (total_cubes > total_ready) { return; } for (var i = 0; i < spawn_per_tick; i++) { spawnBox(); } }); camera = new THREE.PerspectiveCamera(35, window.innerWidth / window.innerHeight, 1, 1000); camera.position.set(60, 50, 60); camera.lookAt(scene.position); scene.add(camera); // Light light = new THREE.DirectionalLight(0xFFFFFF); light.position.set(20, 40, -15); light.target.position.copy(scene.position); light.castShadow = true; light.shadowCameraLeft = -60; light.shadowCameraTop = -60; light.shadowCameraRight = 60; light.shadowCameraBottom = 60; light.shadowCameraNear = 20; light.shadowCameraFar = 200; light.shadowBias = -.0001; light.shadowMapWidth = light.shadowMapHeight = 2048; light.shadowDarkness = .7; scene.add(light); // Ground ground_material = Physijs.createMaterial(new THREE.MeshLambertMaterial({ map: THREE.ImageUtils.loadTexture('images/rocks.jpg') }), .8, .3); ground_material.map.wrapS = ground_material.map.wrapT = THREE.RepeatWrapping; ground_material.map.repeat.set(3, 3); ground = new Physijs.BoxMesh(new THREE.BoxGeometry(100, 1, 100), ground_material, 0); ground.receiveShadow = true; scene.add(ground); spawnBox(); requestAnimationFrame(render); scene.simulate(); }; spawnBox = (function () { var box_geometry = new THREE.BoxGeometry(4, 4, 4), createBox = function () { var box, material; total_cubes++; material = Physijs.createMaterial(new THREE.MeshLambertMaterial({ opacity: .9, transparent: true }), .6, .3); material.color.setRGB(Math.random() * 100 / 100, Math.random() * 100 / 100, Math.random() * 100 / 100); box = new Physijs.ConvexMesh(box_geometry, material); box.collisions = 0; box.position.set(Math.random() * 15 - 7.5, 25, Math.random() * 15 - 7.5); box.rotation.set(Math.random() * Math.PI, Math.random() * Math.PI, Math.random() * Math.PI); box.castShadow = true; box.addEventListener('ready', inc_ready); cubes.push(box); scene.add(box); }; return function () { createBox(); }; })(); inc_ready = function () { total_ready++; }; render = function () { requestAnimationFrame(render); renderer.render(scene, camera); render_stats.update(); }; window.onload = initScene;