2017-06-19 15:54:02 +02:00
|
|
|
/**
|
|
|
|
* System takes care of updating all the entities (based on their component data)
|
|
|
|
* @param apiSystem GameLib.API.System
|
|
|
|
* @constructor
|
|
|
|
*/
|
|
|
|
GameLib.System.Input = function(
|
|
|
|
apiSystem
|
|
|
|
) {
|
|
|
|
GameLib.System.call(
|
|
|
|
this,
|
|
|
|
apiSystem
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
GameLib.System.Input.prototype = Object.create(GameLib.System.prototype);
|
|
|
|
GameLib.System.Input.prototype.constructor = GameLib.System.Input;
|
|
|
|
|
|
|
|
GameLib.System.Input.prototype.start = function() {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hookup all editor input capabilities
|
|
|
|
*/
|
|
|
|
var entities = GameLib.EntityManager.Instance.query([GameLib.D3.Input.Editor]);
|
|
|
|
|
|
|
|
entities.map(function(entity){
|
|
|
|
|
|
|
|
var component = entity.getFirstComponent(GameLib.D3.Input.Editor);
|
|
|
|
|
2017-08-23 17:53:06 +02:00
|
|
|
component.mouseDown = component.onMouseDown(entity).bind(component);
|
2017-06-19 15:54:02 +02:00
|
|
|
component.mouseMove = component.onMouseMove(entity).bind(component);
|
|
|
|
component.keyDown = component.onKeyDown(entity, GameLib.EntityManager.Instance).bind(component);
|
|
|
|
component.keyUp = component.onKeyUp(entity, GameLib.EntityManager.Instance).bind(component);
|
|
|
|
|
|
|
|
component.domElement.instance.addEventListener('mousedown', component.mouseDown, false);
|
|
|
|
component.domElement.instance.addEventListener('mousemove', component.mouseMove, false);
|
|
|
|
component.domElement.instance.addEventListener('keydown', component.keyDown, false);
|
|
|
|
component.domElement.instance.addEventListener('keyup', component.keyUp, false);
|
|
|
|
|
|
|
|
component.controls = new THREE.EditorControls(
|
|
|
|
component.camera.instance,
|
|
|
|
component.domElement.instance
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* After our mouse 'up' editor controls would have updated our camera
|
|
|
|
* instance, so we need to update our game-lib camera to reflect these
|
|
|
|
* changes - we override
|
|
|
|
*/
|
|
|
|
component.mouseUp = function(center) {
|
|
|
|
return function() {
|
|
|
|
var camera = entity.getFirstComponent(GameLib.D3.Camera);
|
|
|
|
camera.position.x = camera.instance.position.x;
|
|
|
|
camera.position.y = camera.instance.position.y;
|
|
|
|
camera.position.z = camera.instance.position.z;
|
|
|
|
|
|
|
|
camera.quaternion.x = camera.instance.quaternion.x;
|
|
|
|
camera.quaternion.y = camera.instance.quaternion.y;
|
|
|
|
camera.quaternion.z = camera.instance.quaternion.z;
|
|
|
|
camera.quaternion.w = camera.instance.quaternion.w;
|
|
|
|
|
|
|
|
camera.lookAt.x = center.x;
|
|
|
|
camera.lookAt.y = center.y;
|
|
|
|
camera.lookAt.z = center.z;
|
|
|
|
|
|
|
|
camera.lookAt.instance.copy(center);
|
|
|
|
};
|
|
|
|
}(component.controls.center).bind(component);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Same applies to our mouse 'scroll' event
|
|
|
|
*/
|
|
|
|
component.mouseWheel = function() {
|
|
|
|
return function() {
|
|
|
|
var camera = entity.getFirstComponent(GameLib.D3.Camera);
|
|
|
|
camera.position.x = camera.instance.position.x;
|
|
|
|
camera.position.y = camera.instance.position.y;
|
|
|
|
camera.position.z = camera.instance.position.z;
|
|
|
|
};
|
|
|
|
}.bind(component);
|
|
|
|
|
|
|
|
component.domElement.instance.addEventListener('mousewheel', component.mouseWheel, false);
|
|
|
|
component.domElement.instance.addEventListener('mouseup', component.mouseUp, false);
|
|
|
|
|
|
|
|
}.bind(this))
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
GameLib.System.Input.prototype.stop = function() {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Now remove all editor input capabilities
|
|
|
|
*/
|
|
|
|
var entities = GameLib.EntityManager.Instance.query([GameLib.D3.Input.Editor]);
|
|
|
|
|
|
|
|
entities.map(function(entity){
|
|
|
|
var component = entity.getFirstComponent(GameLib.D3.Input.Editor);
|
|
|
|
component.domElement.instance.removeEventListener('mousedown', component.mouseDown, false);
|
|
|
|
component.domElement.instance.removeEventListener('mousemove', component.mouseMove, false);
|
|
|
|
component.domElement.instance.removeEventListener('keydown', component.keyDown, false);
|
|
|
|
component.domElement.instance.removeEventListener('keyup', component.keyUp, false);
|
|
|
|
component.controls.dispose();
|
|
|
|
component.domElement.instance.removeEventListener('mouseup', component.mouseUp, false);
|
|
|
|
component.domElement.instance.removeEventListener('mousewheel', component.mouseWheel, false);
|
|
|
|
});
|
|
|
|
|
|
|
|
};
|
|
|
|
|