|
|
@@ -0,0 +1,54 @@
|
|
|
+/**
|
|
|
+ * Game Platform SDK
|
|
|
+ *
|
|
|
+ * When running inside the platform, window.GameSDK is injected automatically
|
|
|
+ * before your bundle loads. Use it directly:
|
|
|
+ *
|
|
|
+ * const result = await GameSDK.submit(score)
|
|
|
+ * // result: { ok: true, rank: 3 } or { ok: false, error: '...' }
|
|
|
+ *
|
|
|
+ * const name = GameSDK.getPlayerName() // the current player's display name
|
|
|
+ * const id = GameSDK.gameId // this game's id string
|
|
|
+ *
|
|
|
+ * For local development (outside the platform), load this file as a script
|
|
|
+ * tag before your bundle and call GameSDK.init(gameId, apiBase):
|
|
|
+ *
|
|
|
+ * <script src="game-sdk.js"></script>
|
|
|
+ * <script>GameSDK.init('my-game', 'http://localhost:4006')</script>
|
|
|
+ * <script src="my-game.bundle.js"></script>
|
|
|
+ */
|
|
|
+
|
|
|
+;(function () {
|
|
|
+ if (window.GameSDK && window.GameSDK._platform) return // already injected by platform
|
|
|
+
|
|
|
+ const NAME_KEY = 'gameName'
|
|
|
+
|
|
|
+ window.GameSDK = {
|
|
|
+ gameId: null,
|
|
|
+ _apiBase: '',
|
|
|
+
|
|
|
+ init: function (gameId, apiBase) {
|
|
|
+ this.gameId = gameId
|
|
|
+ this._apiBase = apiBase || ''
|
|
|
+ },
|
|
|
+
|
|
|
+ getPlayerName: function () {
|
|
|
+ return localStorage.getItem(NAME_KEY) || 'anonymous'
|
|
|
+ },
|
|
|
+
|
|
|
+ submit: async function (score) {
|
|
|
+ if (!this.gameId) return { ok: false, error: 'GameSDK not initialised — call GameSDK.init(gameId)' }
|
|
|
+ const name = this.getPlayerName()
|
|
|
+ try {
|
|
|
+ const r = await fetch(`${this._apiBase}/api/games/${this.gameId}/scores`, {
|
|
|
+ method: 'POST',
|
|
|
+ headers: { 'Content-Type': 'application/json' },
|
|
|
+ body: JSON.stringify({ name, score }),
|
|
|
+ })
|
|
|
+ return await r.json()
|
|
|
+ } catch {
|
|
|
+ return { ok: false, error: 'Network error' }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ }
|
|
|
+})()
|