/* This file is part of Gabriel's Qt/QML CardBoard Sample (or short GQQCS) GQQCS is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. GQQCS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Foobar. If not, see . Updated: 07/08/2015 by: Gabriel F. */ import QtQuick 2.4 import QtQuick.Window 2.2 import QtSensors 5.0 Window { id: mainRoot property string fileName: "main.qml" property bool debug: false property double l_scale: 0.5 property bool stereo: true property bool gyro: false property bool useGyro: true property string appState: "Unknown" onAppStateChanged: { console.log(appState) if (appState != "Active" && !config.visible) { Qt.quit() } } property var rotations: [] property int updateCounter: 0 onUpdateCounterChanged: { if (updateCounter > 1000) { updateCounter = 0 } mainSensorLoop() } property var rotXY: {"x":0,"y":0} visible: true width: 1280*l_scale height: 720*l_scale color: "black" LocaleHelper { id: localeHelper loadCallback: function() { config.visible = true } } function logMe(message,owner,filename) { if (debug) { console.log(filename+" || "+owner+" || "+message) } } //Sensors function startSensor() { var types = [] types = QmlSensors.sensorTypes(); console.log(types.join(", ")); if (types.indexOf("QRotationSensor") >= 0) { rotSensor.start() } else { logMe("NO ROTATION SENSOR AVAILABLE","startSensor",fileName) } } function testGyro() { var types = [] types = QmlSensors.sensorTypes(); console.log(types.join(", ")); if (types.indexOf("QRotationSensor") >= 0) { gyro = true useGyro = true logMe("testGyro: ROTATION SENSOR OK!","testGyro",fileName) return true } else { gyro = false useGyro = false stereo = false logMe("testGyro: NO ROTATION SENSOR AVAILABLE!","testGyro",fileName) return false } } RotationSensor { id: rotSensor onReadingChanged: { rotations.push([reading.x,reading.y,reading.z]) if (rotations.length > 2) { rotations.shift() updateXY() updateCounter++ } } } function updateXY() { var x = rotations[1][2] < 0 ? -rotations[1][2] : rotations[1][2] var vX = 6*(mainRoot.rotations[1][2] - mainRoot.rotations[0][2]) var y = rotations[1][1] < 0 ? -rotations[1][1] : rotations[1][1] var vY = 6*(mainRoot.rotations[1][1] - mainRoot.rotations[0][1]) var pY = (y-40)/70 < 0 ? 0 : (y-40)/70 > 1.0 ? 1.0 : (y-40)/70 rotXY.x = vX rotXY.y = pY } function mainSensorLoop() { if ((menu.visible || sobre.visible) && !detail.visible) { if (useGyro) { menu.updateMenuPositionGyro() } else { menu.updateMenuPositionTouch() } } } Component.onCompleted: { if (!localeHelper.loaded) { localeHelper.loadLocaleData() } testGyro() } function startApp() { if (gyro && useGyro) { rotSensor.start() } splash.show() } Config { id: config continueCallback: function() { startApp() } } FakeSplash { id: splash timerEndCallback: function() { config.visible = false; introducao.show() } } Introducao { id: introducao fadeInEndCallback: function() { splash.hide() } panEndCallback: function() { menu.show() } } property var accumTouch: { "x":0,"y":0 } property var accumTouchTemp: { "x":0,"y":0 } property var currentTouch: { "x":mainRoot.width*200,"y":mainRoot.height*200, "t": false} function hitwall() { touchArea.updateHits() } Menu { id: menu fadeInEndCallback: function() { introducao.hide(); } fadeOutCallback: function() { splash.show() } MultiPointTouchArea { id: touchArea anchors.fill: parent visible: !useGyro enabled: visible property var origin: {"x":0,"y":0} touchPoints: [TouchPoint { id: point1 }] function updateHits() { var getImage = menu.getPosImage() accumTouch.x = getImage[0] accumTouch.y = getImage[1] origin.x = point1.x origin.y = point1.y } onPressed: { var getImage = menu.getPosImage() accumTouch.x = getImage[0] accumTouch.y = getImage[1] origin.x = point1.x origin.y = point1.y currentTouch.x = point1.x currentTouch.y = point1.y currentTouch.t = true updateCounter++ } onUpdated: { var vY = point1.y - origin.y accumTouchTemp.x = point1.x - origin.x accumTouchTemp.y = vY currentTouch.x = point1.x currentTouch.y = point1.y currentTouch.t = point1.pressed updateCounter++ } onReleased: { accumTouch.x += accumTouchTemp.x accumTouch.y += accumTouchTemp.y accumTouchTemp = {"x":0,"y":0} currentTouch.x = mainRoot.width*200 currentTouch.y = mainRoot.height*200 currentTouch.t = false updateCounter++ } } } VideoTitle { id: videoTitle fadeInEndCallback: function() { logMe("videoTitle fadeInEndCallback -> show detail","videoTitle,fadeInEndCallback",fileName) detail.show() } } Detail { id: detail fadeInEndCallback: function() { videoTitle.hide() playVideo() } } Sobre { id: sobre } property string debugText: "" Text { text: debugText anchors.top: parent.top anchors.horizontalCenter: parent.horizontalCenter font.pixelSize: parent.height*0.04 width: parent.width wrapMode: Text.WordWrap color: "white" visible: false } }