Slide 1

Slide 1 text

Functional Reactive Game Programming
 RxJS 5, Immutable.js and three.js @manuelwieser

Slide 2

Slide 2 text

Manuel Wieser Lead Developer
 Technical Lead/Senior Front-End Developer
 karriere.at Lecturer
 Hypermedia User Experience Engineering
 FH OÖ Campus Hagenberg

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

RxJS RxJS is a library for reactive programming using Observables, to make it easier to compose asynchronous or callback-based code.

Slide 5

Slide 5 text

const button = document.querySelector('button'); Rx.Observable.fromEvent(button, 'click') .subscribe(() => console.log('Yay!'));

Slide 6

Slide 6 text

Immutable.js Immutable data encourages pure functions (data-in, data-out) and lends itself to much simpler application development and enabling techniques from functional programming.

Slide 7

Slide 7 text

const map1 = Immutable.Map({ a: 1, b: 2, c: 3 }); const map2 = map1.set('b', 1337); map1.get('b'); // 2 map2.get('b'); // 1337

Slide 8

Slide 8 text

three.js The aim of the project is to create an easy to use, lightweight, 3D library. The library provides , , CSS3D and WebGL renderers.

Slide 9

Slide 9 text

const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); camera.position.z = 5; const renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); const geometry = new THREE.BoxGeometry(1, 1, 1); const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); const cube = new THREE.Mesh(geometry, material); scene.add(cube); function render() { requestAnimationFrame(render); cube.rotation.x += 0.1; cube.rotation.y += 0.1; renderer.render(scene, camera); } render();

Slide 10

Slide 10 text

const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(75, windowWidth / windowHeight, 0.1, 1000); camera.position.z = 5; const renderer = new THREE.WebGLRenderer(); renderer.setSize(windowWidth, windowHeight); document.body.appendChild(renderer.domElement);

Slide 11

Slide 11 text

const geometry = new THREE.BoxGeometry(1, 1, 1); const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); const cube = new THREE.Mesh(geometry, material); scene.add(cube);

Slide 12

Slide 12 text

function render() { requestAnimationFrame(render); cube.rotation.x += 0.1; cube.rotation.y += 0.1; renderer.render(scene, camera); } render();

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

Thank you for your attention Code
 GitHub.com/Lorti/Corsair Blog manu.ninja
 Twitter @manuelwieser