X-Git-Url: https://git.r.bdr.sh/rbdr/sumo/blobdiff_plain/764ac76aa90b75cd5d79c217220654a6975069af..refs/heads/main:/lib/sumo.js?ds=inline diff --git a/lib/sumo.js b/lib/sumo.js index 4785087..f353fe0 100644 --- a/lib/sumo.js +++ b/lib/sumo.js @@ -8,11 +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 @@ -25,8 +31,6 @@ import Serpentity from '@serpentity/serpentity'; import { Application } from 'pixi.js'; import { Engine } from 'matter-js'; -/* global window document */ - const internals = { kBackgroundColor: 0xd8c590, kNoElementError: 'No element found. Cannot render.', @@ -197,12 +201,28 @@ internals.Sumo = class Sumo { this._engine.addSystem(new DashSystem()); + this._engine.addSystem(new GrabSystem({ + engine: this._matterJs + })); + this._engine.addSystem(new ApplyForceSystem()); this._engine.addSystem(new PhysicsWorldControlSystem({ 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()); @@ -213,6 +233,8 @@ internals.Sumo = class Sumo { this._engine.addSystem(new DrawDashSystem()); + this._engine.addSystem(new DrawGrabSystem()); + this._engine.addSystem(new RenderSystem({ application: this._pixi })); @@ -229,14 +251,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 @@ -260,6 +282,8 @@ internals.Sumo = class Sumo { entityB: harness }); + // Walls + SumoFactory.createInvisibleBlock(this._engine, { width: this.horizontalResolution * 2, height: this.verticalResolution * 0.1, @@ -278,6 +302,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);