/**
* @author Serge Babayan
* @module views/3dView
* @requires util/Template
* @requires models/PlaneScene
* @requires util/Validator
* @requires models/TelemetryData
* @requires electron
* @listens models/TelemetryData~TelemetryData:data_received
* @copyright Waterloo Aerial Robotics Group 2016
* @licence https://raw.githubusercontent.com/UWARG/WARG-Ground-Station/master/LICENSE
* @description Responsible for displaying a 3D view of the aircraft's orientation using the data from the TelemetryData
* module
*/
var remote = require('electron').remote;
var Template = require('../util/Template');
var PlaneScene = require('../models/PlaneScene');
var TelemetryData = remote.require('./app/models/TelemetryData');
var Validator = require('../util/Validator');
module.exports = function (Marionette, THREE, window) {
return Marionette.ItemView.extend({
template: Template('3dView'),
className: 'threeDView',
ui: {
plane_scene: '#plane-scene'
},
initialize: function () {
this.planeScene = new PlaneScene(THREE, window);
},
onRender: function () {
this.ui.plane_scene.append(this.planeScene.renderer.domElement);
this.data_callback = this.dataCallback.bind(this);
this.ui.plane_scene.resize(function () {
this.planeScene.resize(this.ui.plane_scene.width(), this.ui.plane_scene.height());
}.bind(this));
TelemetryData.addListener('data_received', this.data_callback);
},
dataCallback: function (data) {
var set_pitch = 0, set_roll = 0, set_yaw = 0;
if (Validator.isValidHeading(data.heading)) {
set_yaw = data.heading;
}
if (Validator.isValidPitch(data.pitch)) {
set_pitch = data.pitch;
}
if (Validator.isValidRoll(data.roll)) {
set_roll = data.roll;
}
this.planeScene.rotateAircraft(set_pitch, set_yaw, set_roll);
},
onBeforeDestroy: function () {
TelemetryData.removeListener('data_received', this.data_callback);
}
});
};