UNPKG

meta-client

Version:
230 lines (181 loc) 4.99 kB
//TODO no more globals! //TODO there must be some more in WORLD: livings import {Object3D, WebGLRenderer, Scene, PerspectiveCamera, CubeGeometry, MeshBasicMaterial, Mesh} from 'three'; import {CSS3DRenderer, CSS3DObject} from './lib/three/CSS3D'; import {Events} from './Utilities'; //WebGLRenderer global.renderer = new WebGLRenderer({antialias:true}) renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.sortObjects = false; document.body.style.overflow = "hidden"; document.body.style.margin = "0"; document.body.style.padding = "0"; //CSS3D Renderer global.renderer2 = new CSS3DRenderer(); renderer2.setSize(window.innerWidth, window.innerHeight); renderer2.domElement.style.position = "fixed"; renderer2.domElement.style.left = "0"; renderer2.domElement.style.top = "0"; document.body.appendChild(renderer2.domElement); //Livings let livings = []; //human let HUMAN = false; //TODO NOT SO SWEET (see Device.js) class World extends Object3D{ constructor(){ super(); if(typeof WORLD != 'undefined') SCENE.remove(WORLD); SCENE.add(this); } isFor(theGuy){ HUMAN = theGuy; } live(animation){ livings.push([animation]); } } class Container extends Object3D{ constructor(){ super(); let that = this; this.events = {}; return; if(typeof HUMAN != undefined){ HUMAN.on('touch', (data) => { if(data != undefined && data.object != undefined && data.object.parent != undefined && data.object.parent===that) that.go('touch'); }); HUMAN.on('release', (data) => { if(data != undefined && data.object != undefined && data.object.parent != undefined && data.object.parent===that) that.go('release'); }); } } on(eventName, callback){ if(this.events[eventName]){ this.events[eventName].push(callback); }else{ this.events[eventName] = [callback]; } } go(eventName, ...rest){ if(this.events[eventName]){ this.events[eventName].forEach(cb =>{ cb(...rest); }) } } live(animation){ livings.push(animation); } } let theHuman = false; class F { constructor(){ console.log('there is an F now.') } static what(){ console.log('you are able to make an F'); } } F.what(); class Matter extends Mesh { constructor( geometry, material){ super( geometry, material); let that = this; this.events = {}; livings.push([]); this.living = livings.length-1; if(HUMAN != undefined){ HUMAN.on('touch', (data) => { if(data!=undefined && data.object===that) that.go('touch'); }); HUMAN.on('release', (data) => { if(data!=undefined && data.object===that) that.go('release'); }); } } on(eventName, callback){ if(this.events[eventName]){ this.events[eventName].push(callback); }else{ this.events[eventName] = [callback]; } } go(eventName, ...rest){ if(this.events[eventName]){ this.events[eventName].forEach(cb => { cb(...rest); }) } } live(mode, animation){ /* if(typeof mode && mode != undefined) return; */ switch(mode){ case 'on': livings[this.living].push(animation); break; case 'again': livings[this.living] = []; livings[this.living].push(animation); break; } } } //WebGL Scene global.SCENE = new Scene(); //TODO INTER! //CSS3D Scene global.SCENE2 = new Scene(); //TODO INTER! SCENE.add(SCENE2); global.CAMERA = new PerspectiveCamera( 50, window.innerWidth / window.innerHeight, .001, 10000 ); SCENE.add(CAMERA) global.CAMERA2D = new PerspectiveCamera( 50, window.innerWidth / window.innerHeight, .001, 10000 ); SCENE2.add(CAMERA2D) global.CONTROLS = false; function live(){ if(CONTROLS) CONTROLS.update(); for(var i=0;i<livings.length;i++){ //are there any living beeings? if(livings.length>0){ //does it have more than one life? for(var j=0;j<livings[i].length;j++){ if(livings[i].length>0){ livings[i][j](); }else{ livings[i](); } } } } if(typeof EFFECT != 'undefined'){ EFFECT.requestAnimationFrame(live); EFFECT.render( SCENE, CAMERA ); renderer2.render(SCENE2, CAMERA2D); }else{ requestAnimationFrame(live); renderer.render(SCENE, CAMERA); renderer2.render(SCENE2, CAMERA2D); } } live(); addEventListener('load', () => { document.body.appendChild(renderer.domElement) }); addEventListener('resize', function(){ renderer.setSize(innerWidth, innerHeight); CAMERA.aspect = window.innerWidth / window.innerHeight; CAMERA.updateProjectionMatrix(); renderer2.setSize(innerWidth, innerHeight); CAMERA2D.aspect = window.innerWidth / window.innerHeight; CAMERA2D.updateProjectionMatrix(); }) export default World; export {Container, Matter}