]> git.r.bdr.sh - rbdr/sumo/blobdiff - lib/sumo.js
Physics Engine (#4)
[rbdr/sumo] / lib / sumo.js
index 81f948f74848695144ca298d546e6a6b66714fa5..d79826f95d57bda94f42cef92acae10965761ad6 100644 (file)
@@ -1,7 +1,12 @@
+import PhysicsWorldControlSystem from './systems/physics_world_control';
+import PhysicsToAttributesSystem from './systems/physics_to_attributes';
+import CreateCouplingLineSystem from './systems/create_coupling_line';
 import RenderSystem from './systems/render';
 import RenderSystem from './systems/render';
+import AttributesToRenderableSystem from './systems/attributes_to_renderable';
 import SumoFactory from './factories/sumo';
 import Serpentity from '@serpentity/serpentity';
 import { Application } from 'pixi.js';
 import SumoFactory from './factories/sumo';
 import Serpentity from '@serpentity/serpentity';
 import { Application } from 'pixi.js';
+import { Engine } from 'matter-js';
 
 /* global window document */
 
 
 /* global window document */
 
@@ -60,6 +65,7 @@ internals.Sumo = class Sumo {
 
     // Initialization functions
     this._initializeCanvas();
 
     // Initialization functions
     this._initializeCanvas();
+    this._initializeMatter();
     this._initializePixi();
     this._initializeSystems();
     this._initializeEntities();
     this._initializePixi();
     this._initializeSystems();
     this._initializeEntities();
@@ -124,6 +130,15 @@ internals.Sumo = class Sumo {
     window.addEventListener('resize', this._resizeCanvas.bind(this));
   }
 
     window.addEventListener('resize', this._resizeCanvas.bind(this));
   }
 
+  // Initialize MatterJs
+
+  _initializeMatter() {
+
+    this._matterJs = Engine.create();
+
+    this._matterJs.world.gravity.y = 0;
+  }
+
   // Initialize Pixi
 
   _initializePixi() {
   // Initialize Pixi
 
   _initializePixi() {
@@ -160,6 +175,16 @@ internals.Sumo = class Sumo {
 
   _initializeSystems() {
 
 
   _initializeSystems() {
 
+    this._engine.addSystem(new PhysicsWorldControlSystem({
+      engine: this._matterJs
+    }));
+
+    this._engine.addSystem(new PhysicsToAttributesSystem());
+
+    this._engine.addSystem(new AttributesToRenderableSystem());
+
+    this._engine.addSystem(new CreateCouplingLineSystem());
+
     this._engine.addSystem(new RenderSystem({
       application: this._pixi
     }));
     this._engine.addSystem(new RenderSystem({
       application: this._pixi
     }));
@@ -169,19 +194,42 @@ internals.Sumo = class Sumo {
 
   _initializeEntities() {
 
 
   _initializeEntities() {
 
-    SumoFactory.createSumo(this._engine, {
+    const entityA = SumoFactory.createSumo(null, {
       position: {
         x: 50,
         y: 50
       }
     });
 
       position: {
         x: 50,
         y: 50
       }
     });
 
-    SumoFactory.createSumo(this._engine, {
+    const entityB = SumoFactory.createSumo(null, {
       position: {
         x: 309,
         y: 112
       }
     });
       position: {
         x: 309,
         y: 112
       }
     });
+
+    const entityC = SumoFactory.createSumo(null, {
+      position: {
+        x: 500,
+        y: 78
+      }
+    });
+
+    SumoFactory.createRubberBand(this._engine, {
+      entityA,
+      entityB
+    });
+
+    SumoFactory.createRubberBand(this._engine, {
+      entityA: entityC,
+      entityB
+    });
+
+    // To keep the coupling behind, we'll manually add the sumos later
+
+    this._engine.addEntity(entityA);
+    this._engine.addEntity(entityB);
+    this._engine.addEntity(entityC);
   }
 };
 
   }
 };