diff options
| author | Ben Beltran <ben@nsovocal.com> | 2017-04-12 00:22:31 -0500 |
|---|---|---|
| committer | Ben Beltran <ben@nsovocal.com> | 2017-04-12 00:22:31 -0500 |
| commit | f2a4303543b0b0c1a62681c74244176aa778f417 (patch) | |
| tree | f95798bb6a0e62d39e4f9a8c234791fd3971a6f3 /dist | |
| parent | d063bd00f11577e700c848d220ac6505921632ab (diff) | |
| parent | 100b8422835fc876c8cff2c2960b63e95a01b744 (diff) | |
Merge branch 'release/2.0.0'2.0.0
Diffstat (limited to 'dist')
| -rw-r--r-- | dist/serpentity.js | 901 | ||||
| -rw-r--r-- | dist/serpentity.min.js | 2 |
2 files changed, 559 insertions, 344 deletions
diff --git a/dist/serpentity.js b/dist/serpentity.js index 8257ad2..d59bd63 100644 --- a/dist/serpentity.js +++ b/dist/serpentity.js @@ -1,282 +1,111 @@ -'use strict'; +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["Serpentity"] = factory(); + else + root["Serpentity"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __webpack_require__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 5); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { -/* -Serpentity is a simple entity framework inspired by Ash. - -Usage: - - let Serpentity = require('serpentity'); - -## Instantiating an engine - - let engine = Serpentity(); - -Add entities or systems, systems are added with a priority (the smaller -the number, the earlier it will be called): - - engine.addEntity(entityFactory()); - engine.addSystem(new GameSystem(), priority); - -Update all systems: - - engine.update(dt); - -Remove entities or systems: - - engine.removeEntity(entityReference); - engine.removeSystem(systemReference); - -## Creating Entities - -Entities are the basic object of Serpentity, and they do nothing. - - let entity = new Serpentity.Entity(); - -All the behavior is added through components - -## Creating Components - -Components define data that we can add to an entity. This data will -eventually be consumed by "Systems" - - let PositionComponent = class PositionComponent extends Serpentity.Component { - constructor (config) { - this.x = 0; - this.y = 0; - - super(config); - } - }; - -You can add components to entities by using the add method: - - entity.addComponent(new PositionComponent()); - - -Systems can refer to entities by requesting nodes. - -## Working with Nodes - -Nodes are sets of components that you define, so your system can require -entities that always follow the API defined in the node. - - let MovementNode = class MovementNode extends Serpentity.Node; - MovementNode.position = PositionComponent; - MovementNode.motion = MotionComponent; - -You can then request an array of all the nodes representing entities -that comply with that API - - engine.getNodes(MovementNode); - -## Creating Systems - -Systems are called on every update, and they use components through nodes. - - let TestSystem = class TestSystem extends Serpentity.System { - added (engine){ - this.nodeList = engine.getNodes(MovementNode); - }, - removed (engine){ - this.nodeList = undefined; - } - update (dt){ - let node; - for (node of this.nodeList) { - console.log(`Current position is: ${node.position.x},${node.position.y}`); - } - } - }; - -## That's it - -Just run `engine.update(dt)` in your game loop :D +"use strict"; -*/ -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); +/* + * Components store data. Nothing to say here really, just + * inherit and add a prototype, or don't even inherit, see? + * It's just an empty class, so what I'm trying to say is your + * components can be any class whatsoever. + */ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } -var Serpentity = function () { - function Serpentity(config) { - _classCallCheck(this, Serpentity); - - this.systems = []; - this.entities = []; - this._nodeCollections = []; - this._nodeCollectionKeys = []; - - Object.assign(this, config || {}); - } - - /* - * Adds a system to the engine, so its update method will be called - * with the others. Triggers added hook. - * - * returns true if added succesfully, false if already added - */ - - - _createClass(Serpentity, [{ - key: 'addSystem', - value: function addSystem(system, priority) { - var lastIndex = void 0, - found = void 0; - - if (this.systems.indexOf(system) >= 0) { - return false; - } - - system.priority = priority; - - found = false; - lastIndex = 0; - - this.systems.some(function findPriority(existingSystem, i) { - lastIndex = i; - if (existingSystem.priority >= system.priority) { - found = true; - return true; - } - }); - - if (!found) { - lastIndex += 1; - } - - this.systems.splice(lastIndex, 0, system); - system.added(this); - return true; - } - - /* - * Removes a system from the engine, so its update method will no - * longer will be called. Triggers the removed hook. - * - * returns true if removed succesfully, false if already added - */ - - }, { - key: 'removeSystem', - value: function removeSystem(system) { - var position = void 0; - - position = this.systems.indexOf(system); - if (position >= 0) { - this.systems[position].removed(this); - this.systems.splice(position, 1); - return true; - } - - return false; - } - - /* - * Adds an entity to the engine, adds to existing node collections - * - * returns true if added, false if already there - */ - - }, { - key: 'addEntity', - value: function addEntity(entity) { - if (this.entities.indexOf(entity) >= 0) { - return false; - } - this.entities.push(entity); - - this._nodeCollections.forEach(function (collection) { - collection.add(entity); - }); - - return true; - } - - /* - * Removes entity from system, removing from all node collections - * - * returns true if removed, false if not present - */ - - }, { - key: 'removeEntity', - value: function removeEntity(entity) { - var position = void 0; - - position = this.entities.indexOf(entity); - if (position >= 0) { - this._nodeCollections.forEach(function (collection) { - collection.remove(entity); - }); - - this.entities.splice(position, 1); - return true; - } - - return false; - } - - /* - * Given a Node Class, retrieves a list of all the nodes for each - * applicable entity. - */ - - }, { - key: 'getNodes', - value: function getNodes(nodeType) { - var position = void 0, - nodeCollection = void 0; - - position = this._nodeCollectionKeys.indexOf(nodeType); - - if (position >= 0) { - return this._nodeCollections[position].nodes; - } - - nodeCollection = new Serpentity.NodeCollection({ - type: nodeType - }); - - this._nodeCollectionKeys.push(nodeType); - this._nodeCollections.push(nodeCollection); - - this.entities.forEach(function (entity) { - nodeCollection.add(entity); - }); - - return nodeCollection.nodes; - } - - /* - * Calls update for every loaded system. - */ +var Component = function Component(config) { + _classCallCheck(this, Component); - }, { - key: 'update', - value: function update(dt) { - this.systems.forEach(function (system) { - system.update(dt); - }); - } - }]); + Object.assign(this, config); +}; - return Serpentity; -}(); +module.exports = Component; -// Add namespaced objects. -if (typeof module !== 'undefined' && undefined.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'); +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { - module.exports = Serpentity; -} -'use strict'; +"use strict"; -/* global Serpentity */ /* * The entity gives the entity framework its name. It exists only @@ -294,7 +123,7 @@ var Entity = function () { this._componentKeys = []; this._components = []; - Object.assign(this, config || {}); + Object.assign(this, config); } /* @@ -307,6 +136,7 @@ var Entity = function () { _createClass(Entity, [{ key: 'addComponent', value: function addComponent(component) { + if (this._componentKeys.indexOf(component.constructor) >= 0) { return false; } @@ -322,6 +152,7 @@ var Entity = function () { }, { key: 'hasComponent', value: function hasComponent(componentClass) { + if (this._componentKeys.indexOf(componentClass) >= 0) { return true; } @@ -335,6 +166,7 @@ var Entity = function () { }, { key: 'getComponent', value: function getComponent(componentClass) { + var position = this._componentKeys.indexOf(componentClass); if (position >= 0) { return this._components[position]; @@ -345,14 +177,14 @@ var Entity = function () { return Entity; }(); -if (typeof module !== 'undefined' && undefined.module !== module) { - module.exports = Entity; -} else { - Serpentity.Entity = Entity; -} -'use strict'; +module.exports = Entity; + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; -/* global Serpentity */ /* * A node describes a set of components in order to describe entities @@ -373,13 +205,20 @@ var Node = function () { * false otherwise */ value: function matches(entity) { - var types = this.types; - for (var typeName in types) { - if (types.hasOwnProperty(typeName)) { + var typeNames = Object.keys(this.types); + + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + try { + for (var _iterator = typeNames[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var typeName = _step.value; + + + var type = this.types[typeName]; var matched = false; - var type = types[typeName]; if (entity.hasComponent(type)) { matched = true; @@ -389,6 +228,19 @@ var Node = function () { return false; } } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } } return true; @@ -400,20 +252,20 @@ var Node = function () { this.types = {}; - Object.assign(this, config || {}); + Object.assign(this, config); } return Node; }(); -if (typeof module !== 'undefined' && undefined.module !== module) { - module.exports = Node; -} else { - Serpentity.Node = Node; -} -'use strict'; +module.exports = Node; + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; -/* global Serpentity */ /* * Node Collections contain nodes, in order to keep the lists of nodes @@ -434,7 +286,7 @@ var NodeCollection = function () { this.nodes = []; this.type = null; - Object.assign(this, config || {}); + Object.assign(this, config); } /* @@ -453,13 +305,33 @@ var NodeCollection = function () { var node = new this.type({}); var types = this.type.types; + var typeNames = Object.keys(types); node.entity = entity; - for (var typeName in types) { - if (types.hasOwnProperty(typeName)) { + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = typeNames[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var typeName = _step.value; + node[typeName] = entity.getComponent(types[typeName]); } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } } this.nodes.push(node); @@ -479,20 +351,22 @@ var NodeCollection = function () { }, { key: 'remove', value: function remove(entity) { - var found = -1; - this.nodes.forEach(function (node, i) { + var foundIndex = -1; + + var found = this.nodes.some(function (node, i) { + if (node.entity === entity) { - found = i; + foundIndex = i; + return true; } }); - if (found >= 0) { - this.nodes.splice(found, 1); - return true; + if (found) { + this.nodes.splice(foundIndex, 1); } - return false; + return found; } /* @@ -502,31 +376,32 @@ var NodeCollection = function () { }, { key: '_entityExists', value: function _entityExists(entity) { + var found = false; - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; try { - for (var _iterator = this.nodes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var node = _step.value; + for (var _iterator2 = this.nodes[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var node = _step2.value; if (node.entity === entity) { found = true; } } } catch (err) { - _didIteratorError = true; - _iteratorError = err; + _didIteratorError2 = true; + _iteratorError2 = err; } finally { try { - if (!_iteratorNormalCompletion && _iterator.return) { - _iterator.return(); + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); } } finally { - if (_didIteratorError) { - throw _iteratorError; + if (_didIteratorError2) { + throw _iteratorError2; } } } @@ -538,38 +413,14 @@ var NodeCollection = function () { return NodeCollection; }(); -if (typeof module !== 'undefined' && undefined.module !== module) { - module.exports = NodeCollection; -} else { - Serpentity.NodeCollection = NodeCollection; -} -'use strict'; - -/* global Serpentity */ - -/* - * Components store data. Nothing to say here really, just - * inherit and add a prototype, or don't even inherit, see? - * It's just an empty class, so what I'm trying to say is your - * components can be any class whatsoever. - */ - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } +module.exports = NodeCollection; -var Component = function Component(config) { - _classCallCheck(this, Component); - - Object.assign(this, config || {}); -}; +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { -if (typeof module !== 'undefined' && undefined.module !== module) { - module.exports = Component; -} else { - Serpentity.Component = Component; -} -'use strict'; +"use strict"; -/* global Serpentity */ /* * Systems contain most of the logic, and work with nodes in order to @@ -626,8 +477,372 @@ var System = function () { return System; }(); -if (typeof module !== 'undefined' && undefined.module !== module) { - module.exports = System; -} else { - Serpentity.System = System; -}
\ No newline at end of file +module.exports = System; + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/* +Serpentity is a simple entity framework inspired by Ash. + +Usage: + + const Serpentity = require('serpentity'); + +## Instantiating an engine + + const engine = new Serpentity(); + +Add entities or systems, systems are added with a priority (the smaller +the number, the earlier it will be called): + + engine.addEntity(entityFactory()); + engine.addSystem(new GameSystem(), priority); + +Update all systems: + + engine.update(dt); + +Remove entities or systems: + + engine.removeEntity(entityReference); + engine.removeSystem(systemReference); + +## Creating Entities + +Entities are the basic object of Serpentity, and they do nothing. + + const entity = new Serpentity.Entity(); + +All the behavior is added through components + +## Creating Components + +Components define data that we can add to an entity. This data will +eventually be consumed by "Systems" + + const PositionComponent = class PositionComponent extends Serpentity.Component { + constructor(config) { + + this.x = 0; + this.y = 0; + + super(config); + } + }; + +You can add components to entities by using the add method: + + entity.addComponent(new PositionComponent()); + + +Systems can refer to entities by requesting nodes. + +## Working with Nodes + +Nodes are sets of components that you define, so your system can require +entities that always follow the API defined in the node. + + const MovementNode = class MovementNode extends Serpentity.Node; + MovementNode.position = PositionComponent; + MovementNode.motion = MotionComponent; + +You can then request an array of all the nodes representing entities +that comply with that API + + engine.getNodes(MovementNode); + +## Creating Systems + +Systems are called on every update, and they use components through nodes. + + const TestSystem = class TestSystem extends Serpentity.System { + added(engine){ + + this.nodeList = engine.getNodes(MovementNode); + } + + removed(engine){ + + this.nodeList = undefined; + } + + update(dt){ + + for (const node of this.nodeList) { + console.log(`Current position is: ${node.position.x},${node.position.y}`); + } + } + }; + +## That's it + +Just run `engine.update(dt)` in your game loop :D + +*/ + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var Serpentity = function () { + function Serpentity(config) { + _classCallCheck(this, Serpentity); + + this.systems = []; + this.entities = []; + this._nodeCollections = []; + this._nodeCollectionKeys = []; + + Object.assign(this, config); + } + + /* + * Adds a system to the engine, so its update method will be called + * with the others. Triggers added hook. + * + * returns true if added succesfully, false if already added + */ + + + _createClass(Serpentity, [{ + key: 'addSystem', + value: function addSystem(system, priority) { + + if (this.systems.indexOf(system) >= 0) { + return false; + } + + system.priority = priority; + + var lastIndex = 0; + + var found = this.systems.some(function (existingSystem, i) { + + lastIndex = i; + if (existingSystem.priority >= system.priority) { + return true; + } + }); + + if (!found) { + lastIndex += 1; + } + + this.systems.splice(lastIndex, 0, system); + system.added(this); + return true; + } + + /* + * Removes a system from the engine, so its update method will no + * longer will be called. Triggers the removed hook. + * + * returns true if removed succesfully, false if already added + */ + + }, { + key: 'removeSystem', + value: function removeSystem(system) { + + var position = this.systems.indexOf(system); + if (position >= 0) { + this.systems[position].removed(this); + this.systems.splice(position, 1); + return true; + } + + return false; + } + + /* + * Adds an entity to the engine, adds to existing node collections + * + * returns true if added, false if already there + */ + + }, { + key: 'addEntity', + value: function addEntity(entity) { + + if (this.entities.indexOf(entity) >= 0) { + return false; + } + this.entities.push(entity); + + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = this._nodeCollections[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var collection = _step.value; + + collection.add(entity); + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + return true; + } + + /* + * Removes entity from system, removing from all node collections + * + * returns true if removed, false if not present + */ + + }, { + key: 'removeEntity', + value: function removeEntity(entity) { + + var position = this.entities.indexOf(entity); + if (position >= 0) { + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = this._nodeCollections[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var collection = _step2.value; + + collection.remove(entity); + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + + this.entities.splice(position, 1); + return true; + } + + return false; + } + + /* + * Given a Node Class, retrieves a list of all the nodes for each + * applicable entity. + */ + + }, { + key: 'getNodes', + value: function getNodes(nodeType) { + + var position = this._nodeCollectionKeys.indexOf(nodeType); + + if (position >= 0) { + return this._nodeCollections[position].nodes; + } + + var nodeCollection = new Serpentity.NodeCollection({ + type: nodeType + }); + + this._nodeCollectionKeys.push(nodeType); + this._nodeCollections.push(nodeCollection); + + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; + + try { + for (var _iterator3 = this.entities[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var entity = _step3.value; + + nodeCollection.add(entity); + } + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (!_iteratorNormalCompletion3 && _iterator3.return) { + _iterator3.return(); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } + } + } + + return nodeCollection.nodes; + } + + /* + * Calls update for every loaded system. + */ + + }, { + key: 'update', + value: function update(dt) { + var _iteratorNormalCompletion4 = true; + var _didIteratorError4 = false; + var _iteratorError4 = undefined; + + try { + + for (var _iterator4 = this.systems[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { + var system = _step4.value; + + system.update(dt); + } + } catch (err) { + _didIteratorError4 = true; + _iteratorError4 = err; + } finally { + try { + if (!_iteratorNormalCompletion4 && _iterator4.return) { + _iterator4.return(); + } + } finally { + if (_didIteratorError4) { + throw _iteratorError4; + } + } + } + } + }]); + + return Serpentity; +}(); + +// Add namespaced objects. +Serpentity.Component = __webpack_require__(0); +Serpentity.Entity = __webpack_require__(1); +Serpentity.Node = __webpack_require__(2); +Serpentity.NodeCollection = __webpack_require__(3); +Serpentity.System = __webpack_require__(4); + +module.exports = Serpentity; + +/***/ }) +/******/ ]); +});
\ No newline at end of file diff --git a/dist/serpentity.min.js b/dist/serpentity.min.js index abf6ba1..7f431a2 100644 --- a/dist/serpentity.min.js +++ b/dist/serpentity.min.js @@ -1 +1 @@ -"use strict";function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function e(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(){function e(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=void 0,o=void 0;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):void 0}),o||(n+=1),this.systems.splice(n,0,e),e.added(this),!0)}},{key:"removeSystem",value:function(e){var t=void 0;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=void 0;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=void 0,o=void 0;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&&(void 0).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(){function e(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(){function e(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]:void 0}}]),e}();"undefined"!=typeof module&&(void 0).module!==module?module.exports=Entity:Serpentity.Entity=Entity;var _createClass=function(){function e(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(){function e(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&&(void 0).module!==module?module.exports=Node:Serpentity.Node=Node;var _createClass=function(){function e(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(){function e(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=void 0;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&&(void 0).module!==module?module.exports=NodeCollection:Serpentity.NodeCollection=NodeCollection;var Component=function e(t){_classCallCheck(this,e),Object.assign(this,t||{})};"undefined"!=typeof module&&(void 0).module!==module?module.exports=Component:Serpentity.Component=Component;var _createClass=function(){function e(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(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:"added",value:function(){}},{key:"removed",value:function(){}},{key:"update",value:function(){}}]),e}();"undefined"!=typeof module&&(void 0).module!==module?module.exports=System:Serpentity.System=System;
\ No newline at end of file +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Serpentity=e():t.Serpentity=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=5)}([function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var o=function t(e){r(this,t),Object.assign(this,e)};t.exports=o},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var o=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),i=function(){function t(e){r(this,t),this._componentKeys=[],this._components=[],Object.assign(this,e)}return o(t,[{key:"addComponent",value:function(t){return!(this._componentKeys.indexOf(t.constructor)>=0)&&(this._componentKeys.push(t.constructor),this._components.push(t),!0)}},{key:"hasComponent",value:function(t){return this._componentKeys.indexOf(t)>=0}},{key:"getComponent",value:function(t){var e=this._componentKeys.indexOf(t);if(e>=0)return this._components[e]}}]),t}();t.exports=i},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var o=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),i=function(){function t(e){r(this,t),this.types={},Object.assign(this,e)}return o(t,null,[{key:"matches",value:function(t){var e=Object.keys(this.types),n=!0,r=!1,o=void 0;try{for(var i,s=e[Symbol.iterator]();!(n=(i=s.next()).done);n=!0){var u=i.value,a=this.types[u],c=!1;if(t.hasComponent(a)&&(c=!0),!c)return!1}}catch(t){r=!0,o=t}finally{try{!n&&s.return&&s.return()}finally{if(r)throw o}}return!0}}]),t}();t.exports=i},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var o=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),i=function(){function t(e){r(this,t),this.nodes=[],this.type=null,Object.assign(this,e)}return o(t,[{key:"add",value:function(t){if(this.type.matches(t)&&!this._entityExists(t)){var e=new this.type({}),n=this.type.types,r=Object.keys(n);e.entity=t;var o=!0,i=!1,s=void 0;try{for(var u,a=r[Symbol.iterator]();!(o=(u=a.next()).done);o=!0){var c=u.value;e[c]=t.getComponent(n[c])}}catch(t){i=!0,s=t}finally{try{!o&&a.return&&a.return()}finally{if(i)throw s}}return this.nodes.push(e),!0}return!1}},{key:"remove",value:function(t){var e=-1,n=this.nodes.some(function(n,r){if(n.entity===t)return e=r,!0});return n&&this.nodes.splice(e,1),n}},{key:"_entityExists",value:function(t){var e=!1,n=!0,r=!1,o=void 0;try{for(var i,s=this.nodes[Symbol.iterator]();!(n=(i=s.next()).done);n=!0){i.value.entity===t&&(e=!0)}}catch(t){r=!0,o=t}finally{try{!n&&s.return&&s.return()}finally{if(r)throw o}}return e}}]),t}();t.exports=i},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var o=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),i=function(){function t(){r(this,t)}return o(t,[{key:"added",value:function(){}},{key:"removed",value:function(){}},{key:"update",value:function(){}}]),t}();t.exports=i},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var o=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),i=function(){function t(e){r(this,t),this.systems=[],this.entities=[],this._nodeCollections=[],this._nodeCollectionKeys=[],Object.assign(this,e)}return o(t,[{key:"addSystem",value:function(t,e){if(this.systems.indexOf(t)>=0)return!1;t.priority=e;var n=0;return this.systems.some(function(e,r){if(n=r,e.priority>=t.priority)return!0})||(n+=1),this.systems.splice(n,0,t),t.added(this),!0}},{key:"removeSystem",value:function(t){var e=this.systems.indexOf(t);return e>=0&&(this.systems[e].removed(this),this.systems.splice(e,1),!0)}},{key:"addEntity",value:function(t){if(this.entities.indexOf(t)>=0)return!1;this.entities.push(t);var e=!0,n=!1,r=void 0;try{for(var o,i=this._nodeCollections[Symbol.iterator]();!(e=(o=i.next()).done);e=!0){o.value.add(t)}}catch(t){n=!0,r=t}finally{try{!e&&i.return&&i.return()}finally{if(n)throw r}}return!0}},{key:"removeEntity",value:function(t){var e=this.entities.indexOf(t);if(e>=0){var n=!0,r=!1,o=void 0;try{for(var i,s=this._nodeCollections[Symbol.iterator]();!(n=(i=s.next()).done);n=!0){i.value.remove(t)}}catch(t){r=!0,o=t}finally{try{!n&&s.return&&s.return()}finally{if(r)throw o}}return this.entities.splice(e,1),!0}return!1}},{key:"getNodes",value:function(e){var n=this._nodeCollectionKeys.indexOf(e);if(n>=0)return this._nodeCollections[n].nodes;var r=new t.NodeCollection({type:e});this._nodeCollectionKeys.push(e),this._nodeCollections.push(r);var o=!0,i=!1,s=void 0;try{for(var u,a=this.entities[Symbol.iterator]();!(o=(u=a.next()).done);o=!0){var c=u.value;r.add(c)}}catch(t){i=!0,s=t}finally{try{!o&&a.return&&a.return()}finally{if(i)throw s}}return r.nodes}},{key:"update",value:function(t){var e=!0,n=!1,r=void 0;try{for(var o,i=this.systems[Symbol.iterator]();!(e=(o=i.next()).done);e=!0){o.value.update(t)}}catch(t){n=!0,r=t}finally{try{!e&&i.return&&i.return()}finally{if(n)throw r}}}}]),t}();i.Component=n(0),i.Entity=n(1),i.Node=n(2),i.NodeCollection=n(3),i.System=n(4),t.exports=i}])});
\ No newline at end of file |