diff --git a/src/js/hardware/gancube.js b/src/js/hardware/gancube.js index f2e5b292..949e9759 100644 --- a/src/js/hardware/gancube.js +++ b/src/js/hardware/gancube.js @@ -1040,6 +1040,26 @@ execMain(function() { giikerutil.log('[gancube]', 'v4 battery level', batteryLevel); giikerutil.updateBattery([batteryLevel, deviceName + '*']); } else if (mode == 0xEC) { // gyro + var zero = parseInt(value.slice(16, 32), 2); + var one = parseInt(value.slice(32, 48), 2); + var two = parseInt(value.slice(48, 64), 2); + var three = parseInt(value.slice(64, 80), 2); + + var quaterW = (1 - (zero >> 15) * 2) * (zero & 0x7FFF) / 0x7FFF; + var quaterX = (1 - (one >> 15) * 2) * (one & 0x7FFF) / 0x7FFF; + var quaterY = (1 - (two >> 15) * 2) * (two & 0x7FFF) / 0x7FFF; + var quaterZ = (1 - (three >> 15) * 2) * (three & 0x7FFF) / 0x7FFF; + + var angleSpeedX = parseInt(value.slice(80, 84), 2); + var angleSpeedY = parseInt(value.slice(84, 88), 2); + var angleSpeedZ = parseInt(value.slice(88, 92), 2); + + window.puzzleObj.twisty._3d.useQuaternion = true; + + var newQuat = new THREE.Quaternion(quaterX, quaterY, quaterZ, quaterW).normalize(); + window.puzzleObj.twisty._3d.quaternion = newQuat; + + window.puzzleObj.twistyScene.render() } else { giikerutil.log('[gancube]', 'v4 received unknown event', mode, value); } diff --git a/src/js/timer/giiker.js b/src/js/timer/giiker.js index f594eb7f..a42db3ce 100644 --- a/src/js/timer/giiker.js +++ b/src/js/timer/giiker.js @@ -44,6 +44,10 @@ execMain(function(timer) { curVRCCubie.selfMoveStr(puzzleObj.move2str(preScramble[i])); } puzzleObj.applyMoves(preScramble); // process pre scramble (cube orientation) + + // temporary hack + window.puzzleObj = puzzleObj; + var targetOri = kernel.getProp('giiOri'); targetOri = targetOri == 'auto' ? -1 : ~~targetOri; setOri(targetOri); diff --git a/src/js/twisty/twisty.js b/src/js/twisty/twisty.js index 6a68699e..21729e0c 100644 --- a/src/js/twisty/twisty.js +++ b/src/js/twisty/twisty.js @@ -399,6 +399,8 @@ window.twistyjs = (function() { moveCameraDelta(deltaTheta, 0); } + this.render = render; + function render() { renderer.render(scene, camera); }