Skip to content

Commit

Permalink
WIP Add getPersonalBest
Browse files Browse the repository at this point in the history
  • Loading branch information
ninovanhooff committed Oct 19, 2024
1 parent 96d5e83 commit b392079
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 39 deletions.
57 changes: 30 additions & 27 deletions src/playdate/bindings/scoreboards.nim
Original file line number Diff line number Diff line change
Expand Up @@ -2,48 +2,51 @@

import utils

type PDScore* {.importc: "PDScore", header: "pd_api_scoreboards.h", bycopy.} = object
rank* {.importc: "rank".}: uint32
value* {.importc: "value".}: uint32
type PDScoreRaw* {.importc: "PDScore", header: "pd_api.h", bycopy.} = object
rank* {.importc: "rank".}: cuint
value* {.importc: "value".}: cuint
player* {.importc: "player".}: cstring

type PDScoresList* {.importc: "PDScoresList", header: "pd_api_scoreboards.h", bycopy.} = object
type PDScorePtr* = ptr PDScoreRaw
type PDScore* = ref PDScoreRaw

type PDScoresListRaw* {.importc: "PDScoresList", header: "pd_api.h", bycopy.} = object
boardID* {.importc: "boardID".}: cstring
count* {.importc: "count".}: cuint
lastUpdated* {.importc: "lastUpdated".}: uint32
lastUpdated* {.importc: "lastUpdated".}: cuint
playerIncluded* {.importc: "playerIncluded".}: cint
limit* {.importc: "limit".}: cuint
scores* {.importc: "scores".}: ptr PDScore
scores* {.importc: "scores".}: ptr PDScoreRaw

type PDBoard* {.importc: "PDBoard", header: "pd_api_scoreboards.h", bycopy.} = object
type PDBoardRaw* {.importc: "PDBoard", header: "pd_api.h", bycopy.} = object
boardID* {.importc: "boardID".}: cstring
name* {.importc: "name".}: cstring

type PDBoardsList* {.importc: "PDBoardsList", header: "pd_api_scoreboards.h", bycopy.} = object
type PDBoardsListRaw* {.importc: "PDBoardsList", header: "pd_api.h", bycopy.} = object
count* {.importc: "count".}: cuint
lastUpdated* {.importc: "lastUpdated".}: uint32
boards* {.importc: "boards".}: ptr PDBoard
lastUpdated* {.importc: "lastUpdated".}: cuint
boards* {.importc: "boards".}: ptr PDBoardRaw

# todo register free functions


type AddScoreCallbackRaw* = proc (score: ptr PDScore; errorMessage: cstring) {.cdecl.}
type PersonalBestCallbackRaw* = proc (score: ptr PDScore; errorMessage: cstring) {.cdecl.}
type BoardsListCallbackRaw* = proc (boards: ptr PDBoardsList; errorMessage: cstring) {.cdecl.}
type ScoresCallbackRaw* = proc (scores: ptr PDScoresList; errorMessage: cstring) {.cdecl.}
type PersonalBestCallbackRaw* {.importc: "PersonalBestCallback", header: "pd_api.h".} = proc (score: PDScorePtr; errorMessage: cstring) {.cdecl.}
# type AddScoreCallbackRaw* = proc (score: ptr PDScoreRaw; errorMessage: cstring) {.cdecl.}
# type BoardsListCallbackRaw* = proc (boards: ptr PDBoardsListRaw; errorMessage: cstring) {.cdecl.}
# type ScoresCallbackRaw* = proc (scores: ptr PDScoresListRaw; errorMessage: cstring) {.cdecl.}

sdktype:
type PlaydateScoreboards* {.importc: "const struct playdate_scoreboards", header: "pd_api.h".} = object
addScore* {.importc: "addScore".}: proc (boardId: cstring; value: uint32;
callback: AddScoreCallbackRaw): cint {.cdecl.}
getPersonalBest* {.importc: "getPersonalBest".}: proc (boardId: cstring;
callback: PersonalBestCallbackRaw): cint {.cdecl.}
freeScore* {.importc: "freeScore".}: proc (score: ptr PDScore) {.cdecl.}
getScoreboards* {.importc: "getScoreboards".}: proc (
callback: BoardsListCallbackRaw): cint {.cdecl.}
freeBoardsList* {.importc: "freeBoardsList".}: proc (
boardsList: ptr PDBoardsList) {.cdecl.}
getScores* {.importc: "getScores".}: proc (boardId: cstring;
callback: ScoresCallbackRaw): cint {.cdecl.}
freeScoresList* {.importc: "freeScoresList".}: proc (
scoresList: ptr PDScoresList) {.cdecl.}
getPersonalBestBinding* {.importc: "getPersonalBest".}: proc (boardId: cstring;
callback: PersonalBestCallbackRaw): cint {.cdecl, raises: [].}
# addScore* {.importc: "addScore".}: proc (boardId: cstring; value: cuint;
# callback: AddScoreCallbackRaw): cint {.cdecl.}
# freeScore* {.importc: "freeScore".}: proc (score: ptr PDScore) {.cdecl.}
# getScoreboards* {.importc: "getScoreboards".}: proc (
# callback: BoardsListCallbackRaw): cint {.cdecl.}
# freeBoardsList* {.importc: "freeBoardsList".}: proc (
# boardsList: ptr PDBoardsList) {.cdecl.}
# getScores* {.importc: "getScores".}: proc (boardId: cstring;
# callback: ScoresCallbackRaw): cint {.cdecl.}
# freeScoresList* {.importc: "freeScoresList".}: proc (
# scoresList: ptr PDScoresList) {.cdecl.}
32 changes: 20 additions & 12 deletions src/playdate/scoreboards.nim
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,28 @@ export scoreboards
import bindings/scoreboards {.all.}

type
AddScoreCallback* = proc(score: ptr PDScore, errorMessage: string)
PersonalBestCallback* = proc(score: ptr PDScore, errorMessage: string)
BoardsListCallback* = proc(boards: ptr PDBoardsList, errorMessage: string)
ScoresCallback* = proc(scores: ptr PDScoresList, errorMessage: string)
# AddScoreCallback* = proc(score: ptr PDScore, errorMessage: string)
PersonalBestCallback* = proc(score: PDScore, errorMessage: string)
# BoardsListCallback* = proc(boards: ptr PDBoardsList, errorMessage: string)
# ScoresCallback* = proc(scores: ptr PDScoresList, errorMessage: string)

var privatePersonalBestCallback: PersonalBestCallback

proc invokePersonalBestCallback(score: PDScorePtr, errorMessage: cstring) {.cdecl, raises: [].} =
privatePersonalBestCallback(cast[PDScore](score), $errorMessage)

# proc addScore*(this: ptr PlaydateScoreboards, boardID: string, value: uint32, callback: AddScoreCallback): int32 =
# privateAccess(PlaydateScoreboards)

proc addScore*(this: ptr PlaydateScoreboards, boardID: string, value: uint32, callback: AddScoreCallback): int32 =
privateAccess(PlaydateScoreboards)
proc getPersonalBest*(this: ptr PlaydateScoreboards, boardID: string, callback: PersonalBestCallback): int32 =
privateAccess(PlaydateScoreboards)
privatePersonalBestCallback = callback
return this.getPersonalBestBinding(boardID.cstring, invokePersonalBestCallback)

# proc freeScore*(score: ptr PDScore)
proc getScoreboards*(this: ptr PlaydateScoreboards, callback: BoardsListCallback): int32 =
privateAccess(PlaydateScoreboards)
# proc freeBoardsList*(boardsList: ptr PDBoardsList)
proc getScores*(this: ptr PlaydateScoreboards, boardID: string, callback: ScoresCallback): int32 =
privateAccess(PlaydateScoreboards)
# proc freeScoresList*(scoresList: ptr PDScoresList)
# proc getScoreboards*(this: ptr PlaydateScoreboards, callback: BoardsListCallback): int32 =
# privateAccess(PlaydateScoreboards)
# # proc freeBoardsList*(boardsList: ptr PDBoardsList)
# proc getScores*(this: ptr PlaydateScoreboards, boardID: string, callback: ScoresCallback): int32 =
# privateAccess(PlaydateScoreboards)
# # proc freeScoresList*(scoresList: ptr PDScoresList)

0 comments on commit b392079

Please sign in to comment.