Documentation
Parcourir la documentation

DocumentationRéférence

Formes de résultat

Ce que répondent les services de PlayerVox OverCrow : la forme de chaque résultat et de chaque mise à jour d’abonnement. Le SDK exporte pour chaque forme un type TypeScript du même nom : la logique n’a donc jamais à les décrire à la main.

TSwidgets/stopwatch/logic.ts
declare module "@overcrow/sdk" {
  interface WidgetState {
    /** The latest state, or `null` while it is unknown. */
    stopwatch: Stopwatch | null;
    /** The buttons take input only in Interactive mode. */
    interactive: boolean;
  }
}

Le widget Chronomètre garde dans son état la dernière valeur Stopwatch, et la vue en lit les membres :

OCMLwidgets/stopwatch/view.ocml
      <elapsed class="value" base={state.stopwatch.elapsedMs} at={state.stopwatch.at} running={state.stopwatch.running} format="hh:mm:ss.cc"/>

Lire une forme

  • Une forme est un enregistrement exact : chaque membre est présent, et un membre sans valeur vaut null ; il n’est jamais absent.
  • « texte ou null » signifie que le membre peut valoir null : testez-le avant de l’afficher.
  • Un entier est inférieur à 2^53 : il est donc exact en JavaScript. Les temps sont en millisecondes : « Millisecondes Unix » compte depuis 1970 en UTC, comme Date.now().
  • Un membre accompagné de offsetMinutes est un horodatage à mettre en forme avec ce décalage UTC ; voir heure, dates et nombres.
  • Un identifiant asset: est une image que PlayerVox OverCrow détient pour le widget : liez-le au src d’une image ou d’un avatar, ou dessinez-le sur un canvas. Ce n’est pas une URL, et ses octets ne peuvent pas être lus.
  • Un abonnement dont la forme est « … ou null » livre null quand il n’y a rien à afficher : pas de jeu actif, pas de lecteur multimédia.

La référence des services indique quel service donne quelle forme.

Formes

HttpResponse

Réponse de http.fetch. { status, contentType } ou { status, asset }

MembreFormeSignification
statusentierCode d’état HTTP.
contentTypetexte ou nullType de média de la réponse ; le SDK y ajoute le corps décodé, body.
MembreFormeSignification
statusentierCode d’état HTTP.
assetidentifiant asset:L’image décodée (as: "image").

GameEvent

Un événement de jeu. { event, at }

MembreFormeSignification
eventtexteUn événement de jeu déclaré.
atentierHorloge monotone de l’hôte, en ms.

Session

Durée de la session du jeu actif. { elapsedMs, at }

MembreFormeSignification
elapsedMsentierTemps écoulé depuis le démarrage du processus du jeu.
atentierInstant de l’horloge monotone de l’hôte, en ms, auquel elapsedMs a été mesuré.

Telemetry

Ressources utilisées par le jeu actif. { cpu, ram, cpuTemperature, gpuTemperature, sources }

MembreFormeSignification
cpunombre ou nullPart du jeu dans toute la machine, en %, de 0 à 100.
ramentier ou nullMémoire résidente du jeu, en octets.
cpuTemperaturenombre ou null°C.
gpuTemperaturenombre ou null°C.
sources{ cpuTemperature, gpuTemperature }Capteurs dont l’hôte dispose.
sources.cpuTemperaturebooléenL’hôte dispose d’un capteur pour le CPU.
sources.gpuTemperaturebooléenL’hôte dispose d’un capteur pour le GPU.

Fps

Fréquence d’images du jeu actif. { fps, stale, status }

MembreFormeSignification
fpsentier ou nullImages par seconde.
stalebooléenAucune mesure depuis 3 s.
statusready | waiting | unsupported | permission_denied | ambiguous | events_lost | unavailableÉtat de la mesure.

Stopwatch

Le chronomètre manuel. { running, elapsedMs, at, shortcuts }

MembreFormeSignification
runningbooléenIl tourne.
elapsedMsentierTemps écoulé à l’instant at.
atentierInstant de l’horloge monotone de l’hôte, en ms, auquel elapsedMs a été mesuré.
shortcuts{ toggle, reset, bound }Raccourcis du chronomètre.
shortcuts.toggletexteRaccourci clavier, mis en forme par l’hôte.
shortcuts.resettexteRaccourci clavier, mis en forme par l’hôte.
shortcuts.boundbooléenLes raccourcis sont actifs.

Media

Le lecteur multimédia courant. { player, title, artists, playing, canPrevious, canPlayPause, canNext, cover }

MembreFormeSignification
playertexteID opaque du lecteur courant.
titletexte ou nullTitre du morceau.
artistsliste de textesArtistes.
playingbooléenEn cours de lecture.
canPreviousbooléenLe lecteur sait passer au morceau précédent.
canPlayPausebooléenLe lecteur sait lire et mettre en pause.
canNextbooléenLe lecteur sait passer au morceau suivant.
coveridentifiant asset: ou nullPochette, de 512 px au plus.

NoteItem

Une entrée de liste de tâches. { id, text, checked }

MembreFormeSignification
idtexte ou nullID de l’entrée.
texttexteTexte.
checkedbooléenCochée.

Note

Une note. { id, title, body, items }

MembreFormeSignification
idtexte ou nullID de la note.
titletexteTitre.
bodytexteTexte courant.
itemsliste de NoteItemListe de tâches.

Notes

Le document de notes de l’utilisateur. { active, notes }

MembreFormeSignification
activetexte ou nullID de la note active.
notesliste de NoteNotes.

CreatedNote

Réponse de notes.create. { note }

MembreFormeSignification
noteNoteLa nouvelle note.

Score

Note PlayerVox du jeu actif. { state, name, score, grade, ratingsCount, criteria }

MembreFormeSignification
stateidle | unsupported | loading | ready | no_ratings | not_found | unavailableÉtat de la note : idle sans jeu actif, unsupported pour un jeu sans ID d’application Steam, loading jusqu’à la première réponse pour ce jeu (jamais le score du jeu précédent), ready et no_ratings avec le score, not_found pour un jeu que PlayerVox ne reconnaît pas, unavailable pendant que l’hôte réessaie. Tout état autre que ready et no_ratings a un nom et un score null, le grade --, aucun vote et des critères null.
nametexte ou nullNom du jeu.
scorenombre ou null0–100.
gradeS+ | S | A | B | C | D | F | --Grade correspondant au score.
ratingsCountentierNombre de votes.
criteria{ gameplay, art, tech }Scores des critères.
criteria.gameplaynombre ou null0–100.
criteria.artnombre ou null0–100.
criteria.technombre ou null0–100.

Rating

La note PlayerVox que l’utilisateur a donnée au jeu actif. { gameplay, art, tech, review, publishedAt, offsetMinutes }

MembreFormeSignification
gameplayentier0–100.
artentier0–100.
techentier0–100.
reviewtexte ou nullTexte de l’avis.
publishedAtentier ou nullMillisecondes Unix.
offsetMinutesentier ou nullDécalage UTC, en minutes, avec lequel afficher l’horodatage.

RatingState

La note que l’utilisateur a lui-même donnée au jeu actif, avec son état. { state, name, offline, rating }

MembreFormeSignification
stateidle | unsupported | loading | ready | unavailableÉtat de la note : idle sans jeu actif, unsupported pour un jeu sans ID d’application Steam, loading jusqu’à la première réponse pour ce jeu et ce compte (jamais la note du jeu précédent), ready avec la note, unavailable pendant que l’hôte retente une lecture qui a échoué. Tout état autre que ready a un nom et une note null.
nametexte ou nullNom du jeu sur PlayerVox.
offlinebooléenPlayerVox est injoignable : la note est la dernière lue, et playervox.rating.publish répond not_connected.
ratingRating ou nullLa note de l’utilisateur ; null avant la première.

Review

Un avis de joueur. { id, author, grade, score, text, original, hidden, publishedAt, offsetMinutes }

MembreFormeSignification
idtexteID de l’avis.
authortexteNom de l’auteur.
gradeS+ | S | A | B | C | D | F | --Grade.
scoreentier0–100.
texttexte ou nullTexte, traduit quand une traduction existe.
originaltexte ou nullTexte non traduit quand text est une traduction ; null sinon.
hiddenbooléenMasqué par la communauté : n’affichez le texte que lorsque l’utilisateur le demande.
publishedAtentierMillisecondes Unix.
offsetMinutesentierDécalage UTC, en minutes, avec lequel afficher l’horodatage.

ReviewsState

Les avis des joueurs sur le jeu actif : ce qu’il faut lire, non les avis eux-mêmes. { state, revision, offline }

MembreFormeSignification
stateidle | unsupported | readyidle sans jeu actif, unsupported pour un jeu sans ID d’application Steam, ready quand playervox.reviews.page lit les avis du jeu.
revisionentierChange chaque fois que les avis à lire changent : autre jeu, autre compte PlayerVox, ou avis modifiés sur PlayerVox.
offlinebooléenPlayerVox est injoignable : playervox.reviews.page répond not_connected.

ReviewsPage

Une page d’avis de joueurs. { gameName, items, page, totalPages, count }

MembreFormeSignification
gameNametexteNom du jeu sur PlayerVox.
itemsliste de ReviewAvis.
pageentierNuméro de la page.
totalPagesentierNombre de pages.
countentierNombre d’avis.

JournalSession

Une session du journal. { id, startedAt, offsetMinutes, durationMs, source }

MembreFormeSignification
idtexteID de la session.
startedAtentierMillisecondes Unix.
offsetMinutesentierDécalage UTC, en minutes, avec lequel afficher l’horodatage.
durationMsentierDurée.
sourcelocal | cloudOù la session est enregistrée.

JournalState

Le journal du jeu actif. { revision, notice }

MembreFormeSignification
revisionentierChange chaque fois que le journal fusionné du jeu actif change.
noticeoffline | storage_unavailable | full | expired | busy | unavailable ou nullÉtat du journal à afficher au-dessus des sessions : offline la synchronisation est hors ligne (les sessions locales restent), storage_unavailable le journal local est illisible, full le journal local est plein, expired la connexion à PlayerVox a expiré, busy PlayerVox demande de réessayer plus tard, unavailable tout autre échec ; null quand il n’y en a pas.

JournalPage

Une page du journal du jeu. { gameName, items, page, next, previous }

MembreFormeSignification
gameNametexteJeu actif ; vide quand l’hôte n’a pas de nom.
itemsliste de JournalSessionSessions, de la plus récente à la plus ancienne.
pageentierNuméro de la page, à partir de 1.
nexttexte ou nullCurseur de la page suivante.
previoustexte ou nullCurseur de la page précédente.

ChatFragment

Une portion de texte ou une emote d’un message de chat. { text } ou { emote, alt }

MembreFormeSignification
texttextePortion de texte.
MembreFormeSignification
emoteidentifiant asset:Image de l’emote.
alttexteNom de l’emote.

ChatMessage

Un message de chat. { id, author, color, badges, fragments, reply, deleted, receivedAt }

MembreFormeSignification
idtexteID du message.
authortexteNom de l’auteur.
colortexte ou nullCouleur de l’auteur, #rrggbb.
badgesliste d’identifiants asset:Images des badges.
fragmentsliste de ChatFragmentPortions du contenu.
reply{ author, text } ou nullLe message auquel celui-ci répond.
reply.authortexteAuteur du message auquel celui-ci répond.
reply.texttexteTexte du message auquel celui-ci répond.
deletedbooléenSupprimé par un modérateur.
receivedAtentierMoment où l’hôte a reçu le message, en millisecondes Unix de l’horloge de l’hôte : comparez-le à Date.now() pour connaître l’âge d’un message (l’estompage du mode passif), y compris après un reset.

TwitchChat

État du chat Twitch. { account, channel, joinState, failure, favorites, canSend, generation, reset, messages, removed, skipped }

MembreFormeSignification
accountsigned_out | pending | connected | expiredÉtat du compte Twitch ; la connexion est affichée par l’hôte.
channeltexte ou nullIdentifiant de la chaîne rejointe.
joinStateidle | connecting | joined | reconnecting | failedÉtat de la connexion à la chaîne.
failurechannel_unavailable | connection | provider | limit ou nullPourquoi joinState vaut failed, sous la forme d’une catégorie fixe : la chaîne n’existe pas ou refuse le compte, la connexion a échoué, Twitch a répondu quelque chose d’inattendu, ou un autre widget occupe l’unique connexion de l’hôte au chat (limit). null dans tout autre état. Un échec lié au compte n’y figure pas : c’est l’hôte qui l’affiche.
favoritesliste de textesChaînes favorites.
canSendbooléenUn message peut être envoyé maintenant.
generationentierChange avec la chaîne ou le compte.
resetbooléenmessages remplace toute la liste.
messagesliste de ChatMessageMessages, du plus ancien au plus récent : toute la liste avec reset ; sinon les nouveaux messages, à ajouter, et les messages modifiés, qui remplacent sur place celui de même id.
removedliste de textesID des messages retirés.
skippedentierNouveaux messages que l’hôte a laissés de côté depuis la mise à jour précédente, parce que le chat va plus vite qu’il ne transmet ; 0 avec reset. Un retrait n’est jamais laissé de côté.