SDK

The Haste Arcade SDK is a client-side integration that does not require server-side components, simplifying the setup process. The platform displays your registered game in a full-width and full-height iFrame, facilitating seamless communication between the host client (arcade) and your game.

Installation

npm i haste-arcade-sdk

Init()

Import and create a new instance of the GameService. Once the DOM is loaded, initialize it.

import { GameService, Origin } from "haste-arcade-sdk";

const game = new GameService(
    "f8c22e6c-1086-4529-8800-2c72f98b9915", // your gameId
    Origin.DEV, // this is the host (arcade) origin. Use DEV or PROD
);

// Ensure that the DOM is loaded before calling the init method
document.addEventListener("DOMContentLoaded", function () {
    game.init();
});

// This may be implemented differently depending on your game's framework.

Play()

Your game must include a "Play" or "Start" button to initiate gameplay. Upon clicking this button, a message will be sent to the arcade, prompting it to request that the user lock some HST into a smart-contract to begin playing.

Wait until you receive a playId back from the arcade before starting the game. This is done via the on() method.

myPlayButton.onClick(async()=> {
    // You should show some suspense here
    const res = await game.play();
    if (!res?.playId) {
        // kill suspence and DO NOT start the game
        return;
    };   
    console.log(res.playId);
    // kill suspence and start the game
};




// Alternantively, you can call play and listen for a play event
game.play();
game.on("play", (message: ReceivePlayMessage) => {
    console.log(message.playId);
});

submitScore()

When the user has finished playing the game, call the submitScore() method and pass in the playId and score. The user will will sign a message with their wallet and manually submit their score. No need to listen for messages for score submissions.

let score = 0;
let timeToFinsih = 0;
let ringsCollected = 0;

// handle setting the score variable somewhere in your game logic then call submitScore()
score += ringsCollected - timeToFinish;
const res = await game.submitScore(playId, score);
console.log(res.playId);




// Alternantively, you can call submitScore and listen for a score event
game.submitScore();
game.on("score", (message: ReceiveSubmitScoreMessage) => {
    console.log(message.playId);
});

getLeaderboard()

If you'd like to display the current leaderboard directly in your game, the SDK makes this simple.

myLeaderboardButton.onClick(()=> {
    // use suspense
    const res = await game.getLeaderboard();
    console.log(res.leaderboard);
    // kill suspence
};




// Alternantively, you can call getLeaderboard and listen for a leaderboard event
game.getLeaderboard();
game.on("leaderboard", (message: ReceiveLeaderboardMessage) => {
    console.log(message.leaderboard);
});

transferHst()

Monetize your game with HST transfers by requesting payment from within your game. Simply pass in the amount of HST to transfer.

myPaymentButton.onClick(()=> {
    // use suspense
    const res = await game.hstTransfer(100);
    if (!res.txid) {
        // If the user rejects the request, there will be no txid kill suspense
        return;
    };   
    console.log(res.txid);
    // Provision access or give them what they paid for and kil suspense
};




// Alternantively, you can call hstTransfer and listen for a hstTransfer event
game.hstTransfer(100);
game.on("hstTransfer", (message: ReceiveHstTransferMessage) => {
    console.log(message.txid);
});

Last updated