r3-legacy/src/game-lib-entity.js

118 lines
2.5 KiB
JavaScript
Raw Normal View History

2016-11-28 15:05:02 +01:00
/**
* Entity Runtime
* @constructor
*/
2016-12-15 14:53:39 +01:00
GameLib.Entity = function RuntimeEntity(
entityManager,
parentObject,
2016-12-09 20:32:09 +01:00
apiEntity
2016-11-28 15:05:02 +01:00
) {
2016-12-15 14:53:39 +01:00
if (GameLib.Utils.UndefinedOrNull(entityManager)) {
throw new Error('You cannot create entities without an entity manager')
2016-11-28 15:05:02 +01:00
}
2016-12-15 14:53:39 +01:00
this.entityManager = entityManager;
2016-11-28 15:05:02 +01:00
2016-12-15 14:53:39 +01:00
if (GameLib.Utils.UndefinedOrNull(parentObject)) {
parentObject = null;
}
this.parentObject = parentObject;
2016-12-09 20:32:09 +01:00
2016-12-15 14:53:39 +01:00
GameLib.API.Entity.call(
2016-12-09 20:32:09 +01:00
this,
2016-12-15 14:53:39 +01:00
apiEntity.id,
apiEntity.name,
apiEntity.components
2016-12-09 20:32:09 +01:00
);
2016-12-15 14:53:39 +01:00
this.instance = this.createInstance();
2016-12-12 17:24:05 +01:00
};
2016-12-15 14:53:39 +01:00
GameLib.Entity.prototype = Object.create(GameLib.API.Entity.prototype);
GameLib.Entity.prototype.constructor = GameLib.Entity;
2016-12-12 17:24:05 +01:00
/**
2016-12-15 14:53:39 +01:00
* Creates an entity instance
2016-12-12 17:24:05 +01:00
*/
2016-12-15 14:53:39 +01:00
GameLib.Entity.prototype.createInstance = function() {
/**
* FUCK ecsjs and tiny-ecs - no client-side support and shitty code (only takes constructors as args)
*/
return null;
};
/**
* Adds a component to this entity through the instance (should notify the entity manager instance)
* @param component
*/
GameLib.Entity.prototype.addComponent = function(component) {
this.components.push(component);
2017-01-02 17:05:40 +01:00
component.parentEntity = this;
};
/**
*
* @param component
*/
GameLib.Entity.prototype.removeComponent = function(component) {
component.parentEntity = null;
var index = this.components.indexOf(component);
if (index == -1) {
console.log('failed to remove component : ', component);
return false;
}
this.components.splice(index, 1);
return true;
2016-12-09 20:32:09 +01:00
};
/**
2016-12-15 14:53:39 +01:00
* Updates an entity instance
2016-12-09 20:32:09 +01:00
*/
2016-12-15 14:53:39 +01:00
GameLib.Entity.prototype.updateInstance = function() {
this.instance = this.createInstance(true);
};
2016-12-12 17:24:05 +01:00
2016-12-15 14:53:39 +01:00
/**
* Converts a GameLib.Entity to GameLib.API.Entity
* @returns {GameLib.API.Entity}
*/
GameLib.Entity.prototype.toApiEntity = function() {
var apiComponents = this.components.map(
function(component) {
return component.toApiComponent();
}
);
return new GameLib.API.Entity(
this.id,
this.name,
apiComponents
);
2016-12-09 20:32:09 +01:00
};
/**
*
* @param entityManager GameLib.EntityManager
2016-12-09 20:32:09 +01:00
* @param objectEntity Object
* @constructor
*/
GameLib.Entity.FromObjectEntity = function(entityManager, objectEntity) {
var apiEntity = new GameLib.API.Entity(
objectEntity.id,
objectEntity.name,
objectEntity.components
);
2016-12-15 14:53:39 +01:00
return new GameLib.Entity(
entityManager,
this,
apiEntity
);
2016-11-01 09:43:36 +01:00
};