From 380908a9c5710014df1793eaf34b0f4c3b2775e5 Mon Sep 17 00:00:00 2001
From: Dominik George <nik@naturalnet.de>
Date: Thu, 22 Apr 2021 22:22:41 +0200
Subject: [PATCH] Instantiate backend and game and link properly

---
 src/backends/base.js   |  4 ++++
 src/backends/widget.js | 25 ++++++++++++++++++++++++-
 src/frontend/game.js   |  5 ++++-
 src/widget.js          |  7 ++++++-
 4 files changed, 38 insertions(+), 3 deletions(-)
 create mode 100644 src/backends/base.js

diff --git a/src/backends/base.js b/src/backends/base.js
new file mode 100644
index 0000000..61d3166
--- /dev/null
+++ b/src/backends/base.js
@@ -0,0 +1,4 @@
+class BaseBackend() {
+}
+
+export default BaseBackend;
diff --git a/src/backends/widget.js b/src/backends/widget.js
index 6539b46..69f883f 100644
--- a/src/backends/widget.js
+++ b/src/backends/widget.js
@@ -1,6 +1,29 @@
+import BaseBackend from './base';
 import WidgetApi from 'matrix-widget-api';
 
-class WidgetBackend {
+const eventNamespace = 'team.auglement.augmentile';
+const EventTypes = {
+  map: eventNamespace + '.map',
+  player: eventNamepsace + '.player'
+}
+
+class WidgetBackend extends BaseBackend {
+  constructor(widgetId, userId) {
+    this.api = new WidgetApi(widgetId);
+    this.requestCapabilities();
+    this.api.star();
+  }
+
+  requestCapabilities() {
+    this.api.requestCapabilityToReceiveState(EventTypes.map);
+    this.api.requestCapabilityToReceiveState(EventTypes.player);
+
+    this.api.requestCapabilityToSendState(EventTypes.player);
+  }
+
+  set game(value) {
+    this.api.setContentLoaded();
+  }
 }
 
 export default WidgetBackend;
diff --git a/src/frontend/game.js b/src/frontend/game.js
index ca28013..74e7650 100644
--- a/src/frontend/game.js
+++ b/src/frontend/game.js
@@ -2,7 +2,7 @@ import Phaser from 'phaser';
 import TestScene from './scenes/test';
 
 class Game {
-  constructor(width, height) {
+  constructor(width, height, backend) {
     this.config = {
       type: Phaser.AUTO,
       width: width,
@@ -11,6 +11,9 @@ class Game {
     };
 
     this.game = new Phaser.Game(this.config);
+
+    this.backend = backend;
+    this.backend.game = this;
   }
 }
 
diff --git a/src/widget.js b/src/widget.js
index 823f6d4..d96e46c 100644
--- a/src/widget.js
+++ b/src/widget.js
@@ -1,7 +1,12 @@
 import WidgetBackend from './backends/widget';
 import Game from './frontend/game';
 
+const urlParams = new URLSearchParams(window.location.search);
+const widgetId = urlParams.get('widgetId');
+const userId = urlParams.get('userId');
+
 const width = 800;
 const height = 600;
 
-let game = new Game(width, height);
+let backend = new WidgetBackend(widgetId, userId);
+let game = new Game(width, height, backend);
-- 
GitLab