r3-legacy/src/game-lib-d3-input-editor.js

133 lines
4.3 KiB
JavaScript
Raw Normal View History

2017-01-10 17:04:30 +01:00
/**
* Input parent class
* @param graphics GameLib.D3.Graphics
* @param apiInputEditor GameLib.D3.API.Input.Editor
* @constructor
*/
GameLib.D3.Input.Editor = function (
graphics,
apiInputEditor
) {
this.graphics = graphics;
this.graphics.isNotThreeThrow();
GameLib.D3.API.Input.Editor.call(
this,
apiInputEditor.id,
apiInputEditor.name,
apiInputEditor.camera,
apiInputEditor.parentEntity
);
2017-01-11 16:09:06 +01:00
2017-01-10 17:04:30 +01:00
this.instance = this.createInstance();
};
GameLib.D3.Input.Editor.prototype = Object.create(GameLib.D3.API.Input.Editor.prototype);
GameLib.D3.Input.Editor.prototype.constructor = GameLib.D3.Input.Editor;
GameLib.D3.Input.Editor.prototype.createInstance = function(update) {
if (update) {
return this.instance;
}
var instance = document.getElementById(this.domElementId);
this.resize = this.onWindowResize.bind(this);
window.addEventListener('resize', this.resize, false );
// this.clearScene();
this.boundMouseMove = this.mouseMove.bind(this);
instance.addEventListener('contextmenu', function(event){
if (event.stopPropagation) {
event.stopPropagation();
}
if (event.preventDefault) {
event.preventDefault();
}
event.cancelBubble = true;
return false;
}, false);
instance.addEventListener('mousedown', this.mouseDown.bind(this), false);
instance.addEventListener('keydown', this.keypress.bind(this), false);
instance.addEventListener('mousemove', this.boundMouseMove, false);
return instance;
};
GameLib.D3.Input.Editor.prototype.updateInstance = function() {
this.instance = this.createInstance(true);
};
/**
* GameLib.D3.Input.Editor to GameLib.D3.API.Input.Editor
* @returns {GameLib.D3.API.Input.Editor}
*/
GameLib.D3.Input.Editor.prototype.toApiComponent = function() {
var apiInputEditor = new GameLib.D3.API.Input.Editor(
this.id,
this.name,
this.domElementId,
GameLib.Utils.IdOrNull(this.pathFollowingComponent),
GameLib.Utils.IdOrNull(this.parentEntity),
GameLib.Utils.IdOrNull(this.wheelFL),
GameLib.Utils.IdOrNull(this.wheelFR),
GameLib.Utils.IdOrNull(this.wheelRL),
GameLib.Utils.IdOrNull(this.wheelRR),
this.heightOffset,
this.distance,
this.distanceGrain,
this.rotationFactor
);
return apiInputEditor;
};
GameLib.D3.Input.Editor.FromObjectComponent = function(graphics, objectComponent) {
var apiInputEditor = GameLib.D3.API.Input.Editor.FromObjectComponent(objectComponent);
return new GameLib.D3.Input.Editor(
graphics,
apiInputEditor
);
};
GameLib.D3.Input.Editor.prototype.update = function(deltaTime) {
if (this.pathFollowingComponent) {
this.pathFollowingComponent.mesh.localPosition.x = (this.heightOffset * this.pathFollowingComponent.rotationMatrix.up.x);
this.pathFollowingComponent.mesh.localPosition.y = (this.heightOffset * this.pathFollowingComponent.rotationMatrix.up.y);
this.pathFollowingComponent.mesh.localPosition.z = (this.heightOffset * this.pathFollowingComponent.rotationMatrix.up.z);
if (this.keyLeft) {
this.distance -= this.distanceGrain;
}
if (this.keyRight) {
this.distance += this.distanceGrain;
}
this.pathFollowingComponent.mesh.localPosition.x += (this.distance * this.pathFollowingComponent.rotationMatrix.left.x);
this.pathFollowingComponent.mesh.localPosition.y += (this.distance * this.pathFollowingComponent.rotationMatrix.left.y);
this.pathFollowingComponent.mesh.localPosition.z += (this.distance * this.pathFollowingComponent.rotationMatrix.left.z);
this.wheelFL.localRotation.x += this.rotationFactor * this.pathFollowingComponent.currentSpeed;
this.wheelFR.localRotation.x += this.rotationFactor * this.pathFollowingComponent.currentSpeed;
this.wheelFL.localRotation.x += this.rotationFactor * this.pathFollowingComponent.currentSpeed;
this.wheelFR.localRotation.x += this.rotationFactor * this.pathFollowingComponent.currentSpeed;
this.wheelRL.localRotation.x += this.rotationFactor * this.pathFollowingComponent.currentSpeed;
this.wheelRR.localRotation.x += this.rotationFactor * this.pathFollowingComponent.currentSpeed;
}
};