diff --git a/#server.js# b/#server.js#
new file mode 100644
index 0000000..8682165
--- /dev/null
+++ b/#server.js#
@@ -0,0 +1,116 @@
+const express = require('express')
+const http = require('http')
+const WebSocket = require('ws')
+
+const osc = require('osc')
+
+const port = 6676
+// Vzemi iz argumenta
+const tty = process.argv[2]
+
+const include_files = [
+ '/anim.js',
+ '/control.js',
+ '/test.js',
+ '/node_modules/three/build/three.min.js',
+ '/node_modules/nouislider/distribute/nouislider.min.js',
+ '/node_modules/nouislider/distribute/nouislider.min.css',
+ '/node_modules/osc/dist/osc-browser.js'
+];
+
+const app = express();
+const server = http.Server(app);
+
+// Odprti serijski OSC link
+const scon = new osc.SerialPort({
+ devicePath: tty,
+ bitrate: 115200
+})
+scon.on('error', e => {
+ console.log('tty error', e)
+})
+scon.open()
+
+app.get('/', (req, res) => {
+ res.sendFile(__dirname + '/index.html');
+});
+
+app.get('/ctl', (req, res) => {
+ res.sendFile(__dirname + '/control.html');
+});
+
+app.get('/test', (req, res) => {
+ res.sendFile(__dirname + '/test.html');
+});
+
+let settings = {};
+app.get('/settings', function(req, res) {
+ res.send(settings);
+});
+
+include_files.map(function(file) {
+ app.get(file, function(req, res){
+ res.sendFile(__dirname + file);
+ });
+});
+
+server.listen(port, () => console.log('listening on *:' + port))
+
+// Websocket init
+const wss = new WebSocket.Server({ server })
+
+const sendAll = (msg, wss, ws = null) => {
+ wss.clients.forEach( client => {
+ if (client != ws) {
+ client.send(msg)
+ }
+ })
+}
+
+// Debug osc
+/*
+scon.on('osc', msg => {
+ console.log('tty osc', msg.address, ...msg.args.map(val => Math.round(val * 1000) / 1000))
+})
+*/
+
+wss.on('connection', function (ws) {
+ const oscWS = new osc.WebSocketPort({
+ socket: ws,
+ metadata: true
+ });
+
+ // Arduino OSC gre v web
+ scon.on('osc', msg => {
+ switch(msg.address) {
+ case '/gyro/':
+ const [gx, gy, gz] = msg.args
+ sendAll('adjust:rotx:' + gx, wss)
+ sendAll('adjust:roty:' + gy, wss)
+ sendAll('adjust:rotz:' + gz, wss)
+ break;
+ case '/quaternion/':
+ const [qw, qx, qy, qz] = msg.args
+ sendAll('adjust:quaternion:' + [qw, qx, qy, qz].join(':'), wss)
+ break;
+ case '/accel/':
+ const [ax, ay, az] = msg.args
+ sendAll('adjust:posx:' + ax, wss)
+ sendAll('adjust:posy:' + ay, wss)
+ sendAll('adjust:posz:' + az, wss)
+ break;
+ }
+ })
+
+ ws.on('message', (msg) => {
+ //console.log('got msg', msg)
+ const parts = msg.split(":")
+ const cmd = parts[0]
+
+ // Broadcast adjust msg
+ switch (cmd) {
+ case 'adjust':
+ sendAll(msg, wss, ws)
+ }
+ })
+})
diff --git a/#test.html# b/#test.html#
new file mode 100644
index 0000000..981fca7
--- /dev/null
+++ b/#test.html#
@@ -0,0 +1,24 @@
+
+
+
+ cancerainbow test
+
+
+
+ TEST
+
+
+
+
diff --git a/.#server.js b/.#server.js
new file mode 120000
index 0000000..e699048
--- /dev/null
+++ b/.#server.js
@@ -0,0 +1 @@
+g1smo@dbn.20170:1628540355
\ No newline at end of file
diff --git a/anim.js b/anim.js
index ea3e479..c0c8ea0 100644
--- a/anim.js
+++ b/anim.js
@@ -47,10 +47,6 @@ var svetlost = 0.4;
var wDiff = 0.5;
var hDiff = 0.5;
-var gostota_obj = 2;
-
-
-
// Scena, kamera in render
diff --git a/control.html b/control.html
index 32b386c..e6a31c3 100644
--- a/control.html
+++ b/control.html
@@ -1,7 +1,7 @@
- cancerainbow control
+ wavey wind control
+
+
+
+
+
+
+
+
+
diff --git a/test.js b/test.js
new file mode 100644
index 0000000..e8af15a
--- /dev/null
+++ b/test.js
@@ -0,0 +1,140 @@
+console.log("Hello, Sky!");
+
+/**** ☭☭☭☭☭☭☭☭☭☭☭☭ ******
+/☭☭☭☭ Parametri razni ☭☭☭☭ *
+******☭☭☭☭☭☭☭☭☭☭☭☭******/
+
+// Odmik kamere
+var odmik_kamere = 100;
+
+// Rotacija kamere
+var cam_rot_offset = 1;
+
+// Vidni kot
+var FOV = 140;
+
+// Sirina in visina test objekta
+var width = 25;
+var height = 150;
+var depth = 50;
+
+// Stevec, za razno animiranje
+var stevec = 0;
+
+// Parametri animacije
+var rotacijaX = 0.000;
+var rotacijaY = 0.000;
+var rotacijaZ = 0.000;
+
+// Pozicija
+var posX = 0;
+var posY = 0;
+var posZ = 0;
+
+// Zamik pri novem objektu
+var barva = 0.333;
+var saturacija = 1;
+var svetlost = 0.4;
+
+// Drugi parametri
+var wDiff = 0.5;
+
+// Scena, kamera in render
+scene = new THREE.Scene;
+
+camera = new THREE.PerspectiveCamera(FOV, window.innerWidth / window.innerHeight, 0.1, 2000);
+camera.position.z = odmik_kamere;
+
+renderer = new THREE.WebGLRenderer({
+ alpha: true
+});
+renderer.setSize(window.innerWidth, window.innerHeight);
+
+// Belo ozadje
+renderer.setClearColor(0xFFFFFF, 1);
+// Črno ozadje
+//renderer.setClearColor(0x000000, 1);
+
+// Dodaj test skatlo
+var geo = new THREE.BoxGeometry(width, height, depth);
+var mat = new THREE.MeshBasicMaterial({
+ color: 0xff00ff,
+ wireframe: true
+});
+var cube = new THREE.Mesh(geo, mat);
+scene.add(cube); //
+
+var objekti = [cube];
+
+function render () {
+ requestAnimationFrame(render);
+
+ stevec += 1;
+ renderer.render(scene, camera);
+
+ objAnim();
+ //camRotate();
+};
+
+// Funkcija za animacijo objektov
+function objAnim() {
+ objekti.map(function (obj) {
+ obj.setRotationFromEuler(new THREE.Euler(rotacijaX, rotacijaY, rotacijaZ, 'XYZ'));
+
+ /*
+ obj.rotation.y = -rotacijaX;
+ obj.rotation.x = rotacijaY;
+ obj.rotation.z = rotacijaZ;
+ */
+
+ /*
+ const cor = 0.8;
+ obj.position.x += posX / 1000;
+ obj.position.x *= cor;
+ obj.position.y += posY / 1000;
+ obj.position.y *= cor;
+ obj.position.z += posZ / 1000;
+ obj.position.z *= cor;
+ */
+ });
+};
+
+
+var xAksa = new THREE.Vector3(0, 1, 0);
+function camRotate () {
+ // rotiraj po z osi
+ camera.translateX(cam_rot_offset);
+ camera.translateZ(odmik_kamere - Math.sqrt(Math.pow(odmik_kamere, 2) + Math.pow(cam_rot_offset, 2)));
+
+ /*
+ camera.translateY(cam_rot_offset);
+ camera.translateX(odmik_kamere - Math.sqrt(Math.pow(odmik_kamere, 2) + Math.pow(cam_rot_offset, 2)));
+
+ camera.translateY(cam_rot_offset);
+ camera.translateX(odmik_kamere - Math.sqrt(Math.pow(odmik_kamere, 2) + Math.pow(cam_rot_offset, 2)));
+
+
+
+ camera.position.x = Math.sin((stevec % 10) / 10) * cam_rot_offset;
+ camera.position.y = Math.cos((stevec % 10) / 10) * cam_rot_offset;
+ */
+
+ camera.lookAt(scene.position);
+};
+
+// Inicializiraj
+document.onreadystatechange = function () {
+ if (document.readyState === 'complete') {
+ document.getElementById("anim-container").appendChild(renderer.domElement);
+
+ render();
+ }
+};
+
+// Lep risajz
+function onWindowResize() {
+ camera.aspect = window.innerWidth / window.innerHeight;
+ camera.updateProjectionMatrix();
+ renderer.setSize(window.innerWidth, window.innerHeight);
+}
+window.addEventListener('resize', onWindowResize, false);