AFRAME.registerComponent('turnable', {
schema:{
hspeed: {type: 'int', default: 1},
vspeed: {type: 'int', default: 1}
},
init:function(){
var self=this;
var sprite = this.el;
var cam = this.el.sceneEl.querySelector('a-camera');
var turning = false;
var startX, startY;
var xtransform, ytransform;
var currentx = 0;
var currenty = 0;
this.el.addEventListener('mousedown', function(evt){
turning = true;
cam.setAttribute('look-controls', 'enabled: false');
//console.log('elementmousedown');
});
this.el.sceneEl.addEventListener('mousedown', (e) => {
//console.log('scenemousedown');
startX = e.clientX;
startY = e.clientY;
});
this.el.sceneEl.addEventListener('mousemove', (e) => {
if(!turning) return;
//console.log(startX+' '+startY+' '+e.clientX+' '+e.clientY);
var yr = sprite.getAttribute('rotation').y;
//if((yr < -90 && yr > -270)||(yr>90 && yr<270)) xtransform = ((currentx - (e.clientY - startY)*self.data.vspeed/25))%360;
xtransform = ((currentx + (e.clientY - startY)*self.data.vspeed/25))%360;
ytransform = ((currenty + (e.clientX - startX)*self.data.hspeed/25))%360;
sprite.setAttribute('rotation', xtransform+' '+ytransform+' 0');
});
this.el.sceneEl.addEventListener('mouseup', (e) => {
turning = false;
currentx = xtransform;
currenty = ytransform;
console.log(sprite.getAttribute('rotation').x+' '+sprite.getAttribute('rotation').y);
cam.setAttribute('look-controls', 'enabled: true');
//console.log('elementmousedown');
});
},
});