1"use strict";function_classCallCheck(e,t){if(!(e instanceof t))throw newTypeError("Cannot call a class as a function")}function_classCallCheck(e,t){if(!(e instanceof t))throw newTypeError("Cannot call a class as a function")}function_classCallCheck(e,t){if(!(e instanceof t))throw newTypeError("Cannot call a class as a function")}function_classCallCheck(e,t){if(!(e instanceof t))throw newTypeError("Cannot call a class as a function")}function_classCallCheck(e,t){if(!(e instanceof t))throw newTypeError("Cannot call a class as a function")}function_classCallCheck(e,t){if(!(e instanceof t))throw newTypeError("Cannot call a class as a function")}var_createClass=function(){functione(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),Serpentity=function(){functione(t){_classCallCheck(this,e),this.systems=[],this.entities=[],this._nodeCollections=[],this._nodeCollectionKeys=[],Object.assign(this,t||{})}return_createClass(e,[{key:"addSystem",value:function(e,t){var n=void0,o=void0;return this.systems.indexOf(e)>=0?!1:(e.priority=t,o=!1,n=0,this.systems.some(function(t,i){return n=i,t.priority>=e.priority?(o=!0,!0):void0}),o||(n+=1),this.systems.splice(n,0,e),e.added(this),!0)}},{key:"removeSystem",value:function(e){var t=void0;return t=this.systems.indexOf(e),t>=0?(this.systems[t].removed(this),this.systems.splice(t,1),!0):!1}},{key:"addEntity",value:function(e){return this.entities.indexOf(e)>=0?!1:(this.entities.push(e),this._nodeCollections.forEach(function(t){t.add(e)}),!0)}},{key:"removeEntity",value:function(e){var t=void0;return t=this.entities.indexOf(e),t>=0?(this._nodeCollections.forEach(function(t){t.remove(e)}),this.entities.splice(t,1),!0):!1}},{key:"getNodes",value:function(t){var n=void0,o=void0;return n=this._nodeCollectionKeys.indexOf(t),n>=0?this._nodeCollections[n].nodes:(o=new e.NodeCollection({type:t}),this._nodeCollectionKeys.push(t),this._nodeCollections.push(o),this.entities.forEach(function(e){o.add(e)}),o.nodes)}},{key:"update",value:function(e){this.systems.forEach(function(t){t.update(e)})}}]),e}();"undefined"!=typeof module&&(void0).module!==module&&(Serpentity.Component=require("./serpentity/component.js"),Serpentity.Entity=require("./serpentity/entity.js"),Serpentity.Node=require("./serpentity/node.js"),Serpentity.NodeCollection=require("./serpentity/node_collection.js"),Serpentity.System=require("./serpentity/system.js"),module.exports=Serpentity);var_createClass=function(){functione(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),Entity=function(){functione(t){_classCallCheck(this,e),this._componentKeys=[],this._components=[],Object.assign(this,t||{})}return_createClass(e,[{key:"addComponent",value:function(e){return this._componentKeys.indexOf(e.constructor)>=0?!1:(this._componentKeys.push(e.constructor),this._components.push(e),!0)}},{key:"hasComponent",value:function(e){return!!(this._componentKeys.indexOf(e)>=0)}},{key:"getComponent",value:function(e){var t=this._componentKeys.indexOf(e);return t>=0?this._components[t]:void0}}]),e}();"undefined"!=typeof module&&(void0).module!==module?module.exports=Entity:Serpentity.Entity=Entity;var_createClass=function(){functione(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),Node=function(){functione(t){_classCallCheck(this,e),this.types={},Object.assign(this,t||{})}return_createClass(e,null,[{key:"matches",value:function(e){var t=this.types;for(var n in t)if(t.hasOwnProperty(n)){var o=!1,i=t[n];if(e.hasComponent(i)&&(o=!0),!o)return!1}return!0}}]),e}();"undefined"!=typeof module&&(void0).module!==module?module.exports=Node:Serpentity.Node=Node;var_createClass=function(){functione(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),NodeCollection=function(){functione(t){_classCallCheck(this,e),this.nodes=[],this.type=null,Object.assign(this,t||{})}return_createClass(e,[{key:"add",value:function(e){if(this.type.matches(e)&&!this._entityExists(e)){var t=new this.type({}),n=this.type.types;t.entity=e;for(var o in n)n.hasOwnProperty(o)&&(t[o]=e.getComponent(n[o]));return this.nodes.push(t),!0}return!1}},{key:"remove",value:function(e){var t=-1;return this.nodes.forEach(function(n,o){n.entity===e&&(t=o)}),t>=0?(this.nodes.splice(t,1),!0):!1}},{key:"_entityExists",value:function(e){var t=!1,n=!0,o=!1,i=void0;try{for(var s,r=this.nodes[Symbol.iterator]();!(n=(s=r.next()).done);n=!0){var a=s.value;a.entity===e&&(t=!0)}}catch(l){o=!0,i=l}finally{try{!n&&r["return"]&&r["return"]()}finally{if(o)throw i}}return t}}]),e}();"undefined"!=typeof module&&(void0).module!==module?module.exports=NodeCollection:Serpentity.NodeCollection=NodeCollection;var Component=functione(t){_classCallCheck(this,e),Object.assign(this,t||{})};"undefined"!=typeof module&&(void0).module!==module?module.exports=Component:Serpentity.Component=Component;var_createClass=function(){functione(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),System=function(){functione(){_classCallCheck(this,e)}return_createClass(e,[{key:"added",value:function(){}},{key:"removed",value:function(){}},{key:"update",value:function(){}}]),e}();"undefined"!=typeof module&&(void0).module!==module?module.exports=System:Serpentity.System=System;