154 lines
3.7 KiB
JavaScript
154 lines
3.7 KiB
JavaScript
GameLib.D3.Entity = function(
|
|
meshId,
|
|
componentIds,
|
|
position,
|
|
quaternion,
|
|
scale
|
|
) {
|
|
this.meshId = meshId;
|
|
|
|
if (typeof componentIds == 'undefined') {
|
|
componentIds = [];
|
|
}
|
|
|
|
this.componentIds = componentIds;
|
|
|
|
// constructed at runtime
|
|
this.parentScene = null;
|
|
this.mesh = null;
|
|
|
|
if(GameLib.D3.Utils.UndefinedOrNull(position)) {
|
|
position = new GameLib.D3.Vector3(0, 0, 0);
|
|
}
|
|
this.position = position;
|
|
|
|
if(GameLib.D3.Utils.UndefinedOrNull(quaternion)) {
|
|
quaternion = new GameLib.D3.Vector4(0, 0, 0, 1);
|
|
}
|
|
this.quaternion = quaternion;
|
|
|
|
if(GameLib.D3.Utils.UndefinedOrNull(scale)) {
|
|
scale = new GameLib.D3.Vector3(1, 1, 1);
|
|
}
|
|
this.scale = scale;
|
|
};
|
|
|
|
/**
|
|
* Updates the Entity and it's components
|
|
* @param deltaTime Number
|
|
*/
|
|
GameLib.D3.Entity.prototype.update = function(
|
|
deltaTime
|
|
) {
|
|
for(var c in this.componentIds) {
|
|
var componentId = this.componentIds[c];
|
|
var component = this.parentScene.componentIdToComponent[componentId];
|
|
if(component && component.onUpdate) {
|
|
component.onUpdate(deltaTime, this);
|
|
}
|
|
}
|
|
|
|
if(this.mesh) {
|
|
this.mesh.position.set(this.position.x, this.position.y, this.position.z);
|
|
this.mesh.quaternion.set(this.quaternion.x, this.quaternion.y, this.quaternion.z, this.quaternion.w);
|
|
this.mesh.scale.set(this.scale.x, this.scale.y, this.scale.z);
|
|
}
|
|
|
|
this.onUpdate(deltaTime);
|
|
};
|
|
|
|
/**
|
|
* Late updates the Entity and it's components
|
|
* @param deltaTime Number
|
|
*/
|
|
GameLib.D3.Entity.prototype.lateUpdate = function(
|
|
deltaTime
|
|
) {
|
|
for(var c in this.componentIds) {
|
|
var componentId = this.componentIds[c];
|
|
var component = this.parentScene.componentIdToComponent[componentId];
|
|
if(component && component.onLateUpdate) {
|
|
component.onLateUpdate(deltaTime, this);
|
|
}
|
|
}
|
|
|
|
this.onLateUpdate(deltaTime);
|
|
};
|
|
|
|
/**
|
|
* Gets called when the entity was registered with it's parent scene
|
|
* @param parentScene GameLib.D3.Scene
|
|
*/
|
|
GameLib.D3.Entity.prototype.register = function(
|
|
parentScene
|
|
) {
|
|
this.parentScene = parentScene;
|
|
|
|
if(this.meshId != null && parentScene.meshIdToMesh[this.meshId]) {
|
|
parentScene.instance.add(parentScene.meshIdToMesh[this.meshId]);
|
|
this.mesh = parentScene.meshIdToMesh[this.meshId];
|
|
}
|
|
|
|
this.onRegistered(parentScene);
|
|
};
|
|
|
|
/**
|
|
* Add an already registered component to the entity
|
|
* @param componentId Number
|
|
*/
|
|
GameLib.D3.Entity.prototype.addComponentId = function(
|
|
componentId
|
|
) {
|
|
this.componentIds.push(componentId);
|
|
};
|
|
|
|
/**
|
|
* Adds a components to the entity and registers it with the entity's parent scene
|
|
* @param component GameLib.D3.ComponentInterface
|
|
*/
|
|
GameLib.D3.Entity.prototype.addComponent = function(
|
|
component
|
|
) {
|
|
this.parentScene.registerComponent(component);
|
|
|
|
this.componentIds.push(component.componentId);
|
|
|
|
if(component.setParentEntity && typeof component.setParentEntity == 'function') {
|
|
component.setParentEntity(this.parentScene, this);
|
|
}
|
|
};
|
|
|
|
|
|
GameLib.D3.Entity.prototype.getComponent = function(
|
|
componentType
|
|
) {
|
|
for(var c in this.componentIds) {
|
|
var componentId = this.componentIds[c];
|
|
var component = this.parentScene.componentIdToComponent[componentId];
|
|
if (component instanceof componentType) {
|
|
return component;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
///////////////////////// Methods to override //////////////////////////
|
|
|
|
GameLib.D3.Entity.prototype.onUpdate = function(
|
|
deltaTime
|
|
) {
|
|
|
|
};
|
|
|
|
GameLib.D3.Entity.prototype.onLateUpdate = function(
|
|
deltaTime
|
|
) {
|
|
|
|
};
|
|
|
|
GameLib.D3.Entity.prototype.onRegistered = function(
|
|
parentScene
|
|
) {
|
|
|
|
}; |