<commit_before>define([
	'goo/entities/components/Component'
],
/** @lends */
function (
	Component
	) {
	'use strict';

	/**
	 * @class A generic container of data (transform, geometry, material and so on) wrapped in Components
	 *
	 * @param {World} world The {@link World} this entity will be part of when calling .addToWorld
	 * @param {String} [name] Entity name
	 * @param {number} [id] Entity id
	 */
	function Entity(world, name, id) {
		this._world = world;
		this._components = [];
		this.id = id !== undefined ? id : Entity.entityCount;
		this._index = Entity.entityCount;

		//! AT: not sure if this tags/attributes abstraction is really needed or if they are just glorified properties
		this._tags = {};
		this._attributes = {};

		/*Object.defineProperty(this, 'id', {
			value : Entity.entityCount++,
			writable : false
		});*/
		this.name = name !== undefined ? name : 'Entity_' + this.id;

		/** Set to true to skip rendering (move to meshrenderercomponent)
		 * @type {boolean}
		 * @default false<commit_msg>Rephrased the jsdocs to Entity.js based on team feedback.<commit_after>define([
	'goo/entities/components/Component'
],
/** @lends */
function (
	Component
	) {
	'use strict';

	/**
	 * @class The Goo Engine is using an Entity-Component-System API which is a software design pattern that favors composition over inheritance.
	 * With this approach a developer can create powerful objects in the {@link World} by combining [Components]{@link Component} in an entity.
	 * Components usually provide a single feature like the position and orientation of an entity in the world or the textures to be used.
	 * For example one can make a light move around a scene by setting a {@link TransformComponent}, a {@link LightComponent} and a {@link ScriptComponent} on an entity.
	 * Setting standard components can be a lot to type so there is a convenience function in the World class called [createEntity]{@link World#createEntity}.
	 * This is the function that should be used most of the time to create a new entity.
	 * Refer to this document to see what can be done with an entity.
	 * Due to the power of JavaScript there is a feature that allows Components to inject their functions directly into entities.
	 * Most notably this is done by the {@link TransformComponent}. Some examples include [setTranslation]{@link TransformComponent#setTranslation}, [setRotation]{@link TransformComponent#setRotation} and [lookAt]{@link TransformComponent#lookAt}.
	 * @param {World} world The {@link World} this entity will be part of when calling .addToWorld
	 * @param {String} [name] Entity name
	 * @param {number} [id] Entity id
	 */
	function Entity(world, name, id) {
		this._world = world;
		this._components = [];
		this.id = id !== undefined ? id : Entity.entityCount;
		this._index = Entity.entityCount;

		//! AT: not sure if this tags/attributes abstraction is really needed or if they are just glorified properties
		this._tags = {};
		this._attributes = {};

		/*Object.defineProperty(this, 'id', {
			value : Entity.entityCount++,
			writable : false
		});*/
		this.name = name !== undefined ? name : 'Entity_' + this.id;

		/** Set to true to skip rendering (move to meshrenderercomponent)
		 * @type {boolean}
		 * @default false
{'fraction_non_alphanumeric': 0.10518245936829193, 'fraction_numerical': 0.0, 'mean_word_length': 3.949924127465857, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2236896', 'n_tokens_mistral': 943, 'n_tokens_neox': 865, 'n_words': 382}