/* Proposed port of "Shapes" Adapted to the Ancient Brain "three" API Awaiting permission to do this */ /* ! Excerpted from "3D Game Programming for Kids, Second Edition", ! published by The Pragmatic Bookshelf. ! Copyrights apply to this code. It may not be used to create training material, ! courses, books, articles, and the like. Contact us if you are in doubt. ! We make no guarantees that this code is fit for any purpose. ! Visit http://www.pragmaticprogrammer.com/titles/csjava2 for more book information. */ const startRadius = 500; // distance from centre we start the camera at const maxRadius = startRadius * 10; // maximum distance from camera we render things const skycolor = 'LightBlue'; // sky color const skycolorObject = new THREE.Color ( skycolor.toLowerCase() ); // not using API camera control buttons (see API docs): ABWorld.drawCameraControls = false; var clock = new THREE.Clock(); var ball, box, tube, ground, donut; AB.world.newRun = function() { var shape, cover; // set up a 3D scene: ABWorld.init3d ( startRadius, maxRadius, skycolorObject ); AB.msg ( "
Drag and zoom the camera (built-in).
" ); var flat = {flatShading: true}; var light = new THREE.AmbientLight('white', 0.8); ABWorld.scene.add( light ); shape = new THREE.SphereGeometry(100, 20, 15); cover = new THREE.MeshNormalMaterial(flat); ball = new THREE.Mesh(shape, cover); ABWorld.scene.add(ball); ball.position.set(-250,250,-250); shape = new THREE.CubeGeometry(300, 100, 100); cover = new THREE.MeshNormalMaterial(flat); box = new THREE.Mesh(shape, cover); ABWorld.scene.add(box); box.rotation.set(0.5, 0.5, 0); box.position.set(250, 250, -250); shape = new THREE.CylinderGeometry(1, 100, 100, 4); cover = new THREE.MeshNormalMaterial(flat); tube = new THREE.Mesh(shape, cover); ABWorld.scene.add(tube); tube.rotation.set(0.5, 0, 0); tube.position.set(250, -250, -250); shape = new THREE.PlaneGeometry(100, 100); cover = new THREE.MeshNormalMaterial(flat); ground = new THREE.Mesh(shape, cover); ABWorld.scene.add(ground); ground.rotation.set(0.5, 0, 0); ground.position.set(-250, -250, -250); shape = new THREE.TorusGeometry(100, 25, 8, 25); cover = new THREE.MeshNormalMaterial(flat); donut = new THREE.Mesh(shape, cover); ABWorld.scene.add(donut); }; AB.world.nextStep = function() { var t = clock.getElapsedTime(); ball.rotation.set(t, 2*t, 0); box.rotation.set(t, 2*t, 0); tube.rotation.set(t, 2*t, 0); ground.rotation.set(t, 2*t, 0); donut.rotation.set(t, 2*t, 0); };