]> git.r.bdr.sh - rbdr/sumo/blobdiff - lib/sumo.js
Add Naive Game Rules (#11)
[rbdr/sumo] / lib / sumo.js
index d39c055eaece84e07eed6ee579437ca0375bdcbf..835e910ff48c18ea256af2bf9eca8d4e9e42caa8 100644 (file)
@@ -8,13 +8,17 @@ import ApplyForceSystem from './systems/apply_force';
 import CreateCouplingLineSystem from './systems/create_coupling_line';
 import ControlMapperSystem from './systems/control_mapper';
 import DashSystem from './systems/dash';
+import DetectPointsCollisionSystem from './systems/detect_points_collision';
+import DetectWinnerSystem from './systems/detect_winner';
 import DrawDashSystem from './systems/draw_dash';
 import DrawGrabSystem from './systems/draw_grab';
 import ElasticSystem from './systems/elastic';
 import GrabSystem from './systems/grab';
 import PhysicsWorldControlSystem from './systems/physics_world_control';
 import PhysicsToAttributesSystem from './systems/physics_to_attributes';
+import RenderPointsSystem from './systems/render_points';
 import RenderSystem from './systems/render';
+import RenderWinnerSystem from './systems/render_winner';
 import AttributesToRenderableSystem from './systems/attributes_to_renderable';
 
 // Factories
@@ -209,6 +213,18 @@ internals.Sumo = class Sumo {
       engine: this._matterJs
     }));
 
+    this._engine.addSystem(new DetectPointsCollisionSystem());
+
+    this._engine.addSystem(new DetectWinnerSystem());
+
+    this._engine.addSystem(new RenderPointsSystem({
+      application: this._pixi
+    }));
+
+    this._engine.addSystem(new RenderWinnerSystem({
+      application: this._pixi
+    }));
+
     this._engine.addSystem(new ElasticSystem());
 
     this._engine.addSystem(new PhysicsToAttributesSystem());
@@ -237,14 +253,14 @@ internals.Sumo = class Sumo {
       }
     });
 
-    const sumoA = SumoFactory.createSumo(null, {
+    const sumoA = SumoFactory.createPlayer1Sumo(null, {
       position: {
         x: this.horizontalResolution / 2 - 100,
         y: this.verticalResolution / 2
       }
     });
 
-    const sumoB = SumoFactory.createControllableSumo(null, {
+    const sumoB = SumoFactory.createPlayer2Sumo(null, {
       position: {
         x: this.horizontalResolution / 2 + 100,
         y: this.verticalResolution / 2
@@ -268,6 +284,8 @@ internals.Sumo = class Sumo {
       entityB: harness
     });
 
+    // Walls
+
     SumoFactory.createInvisibleBlock(this._engine, {
       width: this.horizontalResolution * 2,
       height: this.verticalResolution * 0.1,
@@ -286,6 +304,33 @@ internals.Sumo = class Sumo {
       }
     });
 
+    // Points Detector
+
+    SumoFactory.createPointsCollider(this._engine, {
+      collisionTarget: sumoA,
+      pointsTarget: 'red',
+      height: this.verticalResolution,
+      width: this.horizontalResolution,
+      position: {
+        x: this.horizontalResolution + this.horizontalResolution / 2,
+        y: this.verticalResolution / 2
+      }
+    });
+
+    SumoFactory.createPointsCollider(this._engine, {
+      collisionTarget: sumoB,
+      pointsTarget: 'blue',
+      height: this.verticalResolution,
+      width: this.horizontalResolution,
+      position: {
+        x: -this.horizontalResolution / 2,
+        y: this.verticalResolution / 2
+      }
+    });
+
+    // The game state
+    SumoFactory.createGameState(this._engine);
+
     // To keep the coupling behind, we'll manually add the sumos later
 
     this._engine.addEntity(sumoA);