From 17ceff9f690f9689f38fe3d0d448fccba72bf044 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Sun, 31 May 2020 16:34:44 -0700 Subject: [PATCH] game: Add support for a static "meta" field to hold game metadata We use a static getter/setter function for this since JavaScript doesn't yet have wide support for static fields. Also, we duplicate the data on both a field within the class itself (Game._meta) as well as in the prototype (Game.prototype). The purpose of this is so that we can access this meta-data as either a class static (Game.meta) or via an instance (some_game.meta). --- game.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/game.js b/game.js index 20cd241..5bbd7f5 100644 --- a/game.js +++ b/game.js @@ -6,6 +6,26 @@ class Game { this.next_client_id = 1; } + /* Suport for game meta-data. + * + * What we want here is an effectively static field that is + * accessible through either the class name (SomeGame.meta) or an + * instance (some_game.meta). To pull this off we do keep two copies + * of the data. But the game classes can just set SomeGame.meta once + * and then reference it either way. + */ + static set meta(data) { + /* This allows class access (SomeGame.meta) via the get method below. */ + this._meta = data; + + /* While this allows access via an instance (some_game.meta). */ + this.prototype.meta = data; + } + + static get meta() { + return this._meta; + } + add_client(response) { const id = this.next_client_id; this.clients.push({id: id, -- 2.43.0