diff options
| author | Rubén Beltrán del Río <ben@nsovocal.com> | 2018-05-29 02:34:38 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-05-29 02:34:38 -0500 |
| commit | 3100e0533cb89a185ea021dfb83c4f364750180f (patch) | |
| tree | a957c7efc0b1d1e5f1ddafd69e2bfd39c70b50df /lib/factories | |
| parent | 43413defcb854c8706a84a6a54a61c7977b52614 (diff) | |
Add Naive Game Rules (#11)
* Add components for tracking points
* Add methods to create new entities
* Adds nodes for points
* Add system to detect points
* Adds system to detect a winner
* Add system to render points and winner
* Add points required to win to config
* Add it all to the engine
* Add mention of points to changelog
Diffstat (limited to 'lib/factories')
| -rw-r--r-- | lib/factories/sumo.js | 63 |
1 files changed, 62 insertions, 1 deletions
diff --git a/lib/factories/sumo.js b/lib/factories/sumo.js index 18e9d72..009ba8c 100644 --- a/lib/factories/sumo.js +++ b/lib/factories/sumo.js @@ -14,8 +14,11 @@ import GrabAreaComponent from '../components/grab_area'; import GrabbableComponent from '../components/grabbable'; import GrabComponent from '../components/grab'; import MaxVelocityComponent from '../components/max_velocity'; +import PointsColliderComponent from '../components/points_collider'; +import PointsComponent from '../components/points'; import PositionComponent from '@serpentity/components.position'; import PixiContainerComponent from '../components/pixi_container'; +import WinnerComponent from '../components/winner'; import PixiFactory from '../factories/pixi'; import Config from '../config'; @@ -620,14 +623,17 @@ export default { const friction = 0; const frictionStatic = 0; const restitution = 1; + const label = config.label || 'Invisible Block'; + const isSensor = !!(config.isSensor); const body = Bodies.rectangle(position.x / Config.meterSize, position.y / Config.meterSize, config.width / Config.meterSize, config.height / Config.meterSize, { + isSensor, isStatic: true, - label: 'Invisible Block', + label, friction, restitution, frictionStatic @@ -639,5 +645,60 @@ export default { } return entity; + }, + + /** + * Creates an invisible block that accumulates points if certain + * entity collids with it + * + * @function createPointsCollider + * @memberof SumoFactory + * @param {external:Serpentity} [engine] the serpentity engine to attach + * to. If not sent, it will not be attached. + * @param {object} [config] the config to override the entity, accepts + * the key `position` as an object with an x and y property. + * @return {external:Serpentity.Entity} the created entity + */ + createPointsCollider(engine, config = {}) { + + const entity = this.createInvisibleBlock(null, Object.assign({ + isSensor: true, + label: 'Points Detector' + }, config)); + + // Points Collider + + entity.addComponent(new PointsColliderComponent(config)); + + if (engine) { + engine.addEntity(entity); + } + + return entity; + }, + + /** + * Creates an entity representing the game state + * + * @function createGameState + * @memberof SumoFactory + * @param {external:Serpentity} [engine] the serpentity engine to attach + * to. If not sent, it will not be attached. + * @param {object} [config] the config to override the entity, accepts + * the key `position` as an object with an x and y property. + * @return {external:Serpentity.Entity} the created entity + */ + createGameState(engine, config = {}) { + + const entity = new Entity(); + + entity.addComponent(new PointsComponent(config)); + entity.addComponent(new WinnerComponent(config)); + + if (engine) { + engine.addEntity(entity); + } + + return entity; } }; |