| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- /**
- * 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' }
- }
- },
- }
- })()
|