Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Finishcallback like menu callback #68

Merged
merged 2 commits into from
Apr 7, 2024

Conversation

ninovanhooff
Copy link
Collaborator

@ninovanhooff ninovanhooff commented Apr 5, 2024

An alternative implementation for the callback that doesn't use a table but adds the callback to the SoundSourceObj

Sample usage (tested):

kickstartPlayer.setFinishCallback((playerPtr: pointer) => (block:
      print("kickstartPlayer finished", cast[SamplePlayer](playerPtr).offset)
      comeOnPlayer.playVariation()
    ))

Note that in this example casting the playerPtr is rather useless as it is guaranteed to be equal to kickStartPlayer. Since it is allowed to capture kickstartPlayer in the lambda, it could be used directly inside the print statement

@ninovanhooff ninovanhooff force-pushed the finishcallback_like_menu_callback branch from 9999826 to 03ccd6b Compare April 5, 2024 17:47
@ninovanhooff ninovanhooff force-pushed the finishcallback_like_menu_callback branch from 03ccd6b to 955e8b4 Compare April 5, 2024 18:00
@ninovanhooff
Copy link
Collaborator Author

FYI: I can't get to compile this properly on windows, while it works fine on Mac.
I suspect this is a windows-thing or something about my environment. But I'm putting it out there just in case.
As far as I know the expected an provided arg count is 3 in all cases

In my game Wheelsprung I execute

PS C:\Users\ninov\codeProjects\wheelsprung> nimble install https://github.com/ninovanhooff/playdate-nim@#finishcallback_like_menu_callback

This completes fine.

Then:

PS C:\Users\ninov\codeProjects\wheelsprung> nimble simulate
  Executing task simulate in C:\Users\ninov\codeProjects\wheelsprung\wheelsprung.nimble
  Executing task simulator in C:\Users\ninov\codeProjects\wheelsprung\wheelsprung.nimble
  Verifying dependencies for [email protected]
    Reading official package list
   Checking for https://github.com/ninovanhooff/playdate-nim@#finishcallback_like_menu_callback
      Info: Dependency on https://github.com/ninovanhooff/playdate-nim@#finishcallback_like_menu_callback already satisfied
  Verifying dependencies for playdate@#finishcallback_like_menu_callback
    Reading official package list
   Checking for https://github.com/ninovanhooff/nim-chipmunk-playdate@any version
      Info: Dependency on https://github.com/ninovanhooff/nim-chipmunk-playdate@any version already satisfied
  Verifying dependencies for [email protected]
   Building wheelsprung/wheelsprung.exe using c backend
  Executing C:\nim-1.6.16\bin\nim.exe c --colors:on --noNimblePath -d:simulator -d:debug -d:NimblePkgVersion=0.3.0 --path:C:\Users\ninov\.nimble\pkgs\playdate-#finishcallback_like_menu_callback --path:C:\Users\ninov\.nimble\pkgs\chipmunk7-7.0.3 -o:C:\Users\ninov\codeProjects\wheelsprung\wheelsprung.exe C:\Users\ninov\codeProjects\wheelsprung\src\wheelsprung.nim
Hint: used config file 'C:\nim-1.6.16\config\nim.cfg' [Conf]
Hint: used config file 'C:\nim-1.6.16\config\config.nims' [Conf]
Hint: used config file 'C:\Users\ninov\codeProjects\wheelsprung\config.nims' [Conf]
.........................................................................................................................................................
C:\nim-1.6.16\lib\system\repr_v2.nim(102, 7) Hint: 'firstElement' is declared but not used [XDeclaredButNotUsed]
.
CC: ../../../../../nim-1.6.16/lib/std/private/digitsutils.nim
CC: ../../../../../nim-1.6.16/lib/system/assertions.nim
CC: ../../../../../nim-1.6.16/lib/system/formatfloat.nim
CC: ../../../../../nim-1.6.16/lib/system/dollars.nim
CC: ../../../../../nim-1.6.16/lib/system/repr_v2.nim
CC: ../../../../../nim-1.6.16/lib/system/io.nim
CC: ../../../../../nim-1.6.16/lib/system.nim
CC: ../../../../../nim-1.6.16/lib/pure/options.nim
CC: ../../../../../nim-1.6.16/lib/pure/parseutils.nim
CC: ../../../../../nim-1.6.16/lib/pure/math.nim
CC: ../../../../../nim-1.6.16/lib/pure/algorithm.nim
CC: ../../../../../nim-1.6.16/lib/pure/unicode.nim
CC: ../../../../../nim-1.6.16/lib/pure/strutils.nim
CC: ../../../../../nim-1.6.16/lib/pure/strformat.nim
CC: ../../../.nimble/pkgs/playdate-#finishcallback_like_menu_callback/playdate/bindings/graphics.nim
CC: ../../../.nimble/pkgs/playdate-#finishcallback_like_menu_callback/playdate/bindings/system.nim
CC: ../../../.nimble/pkgs/playdate-#finishcallback_like_menu_callback/playdate/bindings/file.nim
CC: ../../../.nimble/pkgs/playdate-#finishcallback_like_menu_callback/playdate/bindings/display.nim
CC: ../../../.nimble/pkgs/playdate-#finishcallback_like_menu_callback/playdate/bindings/api.nim
CC: ../../../../../nim-1.6.16/lib/pure/collections/sequtils.nim
CC: ../../../../../nim-1.6.16/lib/pure/random.nim
CC: ../../../.nimble/pkgs/playdate-#finishcallback_like_menu_callback/playdate/system.nim
CC: ../../../.nimble/pkgs/playdate-#finishcallback_like_menu_callback/playdate/graphics.nim
CC: ../../../.nimble/pkgs/playdate-#finishcallback_like_menu_callback/playdate/file.nim
CC: ../../../../../nim-1.6.16/lib/pure/collections/lists.nim
CC: ../../../.nimble/pkgs/playdate-#finishcallback_like_menu_callback/playdate/sprite.nim
CC: ../../../.nimble/pkgs/playdate-#finishcallback_like_menu_callback/playdate/sound.nim
CC: ../../../../../nim-1.6.16/lib/pure/hashes.nim
CC: ../../../../../nim-1.6.16/lib/pure/collections/tables.nim
C:\Users\ninov\.nimble\pkgs\playdate-#finishcallback_like_menu_callback\playdate\sound.nim: In function 'setFinishCallback__OOZOOZOOZOnimbleZpkgsZplaydate4535finishcallback95like95menu95callbackZplaydateZsound_514':     
C:\Users\ninov\.nimble\pkgs\playdate-#finishcallback_like_menu_callback\playdate\sound.nim:238:4: error: too many arguments to function '((const struct playdate_sound_sampleplayer *)playdate__OOZOOZOOZOnimbleZpkgsZplaydate4535finishcallback95like95menu95callbackZplaydateZbindingsZapi_30->sound->sampleplayer)->setFinishCallback'
  238 |             playdate.sound.sampleplayer.setFinishCallback(this.resource, nil, nil)
      |    ^        CC: ../../../../../nim-1.6.16/lib/pure/streams.nim
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Users\ninov\.nimble\pkgs\playdate-#finishcallback_like_menu_callback\playdate\sound.nim:240:4: error: too many arguments to function '((const struct playdate_sound_sampleplayer *)playdate__OOZOOZOOZOnimbleZpkgsZplaydate4535finishcallback95like95menu95callbackZplaydateZbindingsZapi_30->sound->sampleplayer)->setFinishCallback'
  240 |             playdate.sound.sampleplayer.setFinishCallback(this.resource, privateSampleFinishCallback, cast[pointer](this))
      |    ^        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CC: ../../../../../nim-1.6.16/lib/pure/lexbase.nim
Error: execution of an external compiler program 'C:\nim-1.6.16\dist\mingw64\bin\gcc.exe -c -w -fmax-errors=3 -mno-ms-bitfields -DTARGET_EXTENSION=1 -Wall -Wno-unknown-pragmas -Wdouble-promotion -IC:\Users\ninov\Documents\PlaydateSDK\C_API -D_WINDLL=1 -DTARGET_SIMULATOR=1 -Wstrict-prototypes -g3 -O0 -gdwarf-3   -IC:\nim-1.6.16\lib -IC:\Users\ninov\codeProjects\wheelsprung\src -o C:\Users\ninov\nimcache\wheelsprung_d\simulator\@m..@s..@[email protected]@spkgs@splaydate-@hfinishcallback_like_menu_callback@[email protected] C:\Users\ninov\nimcache\wheelsprung_d\simulator\@m..@s..@[email protected]@spkgs@splaydate-@hfinishcallback_like_menu_callback@[email protected]' failed with exit code: 1


     Error: Build failed for package: wheelsprung
        ... Execution failed with exit code 1
        ... Command: C:\nim-1.6.16\bin\nim.exe c --colors:on --noNimblePath -d:simulator -d:debug -d:NimblePkgVersion=0.3.0 --path:C:\Users\ninov\.nimble\pkgs\playdate-#finishcallback_like_menu_callback --path:C:\Users\ninov\.nimble\pkgs\chipmunk7-7.0.3 -o:C:\Users\ninov\codeProjects\wheelsprung\wheelsprung.exe C:\Users\ninov\codeProjects\wheelsprung\src\wheelsprung.nim
stack trace: (most recent call last)
C:\Users\ninov\AppData\Local\Temp\nimblecache-0\nimscriptapi_82906963.nim(187, 16)
C:\Users\ninov\.nimble\pkgs\playdate-#finishcallback_like_menu_callback\playdate\build\nimble.nim(74, 16) simulatorTask
C:\Users\ninov\.nimble\pkgs\playdate-#finishcallback_like_menu_callback\playdate\build\utils.nim(22, 10) nimble
C:\nim-1.6.16\lib\system\nimscript.nim(273, 7) exec
C:\nim-1.6.16\lib\system\nimscript.nim(273, 7) Error: unhandled exception: FAILED: nimble -d:simulator -d:debug build --verbose [OSError]
     Error: Exception raised during nimble script execution
stack trace: (most recent call last)
C:\Users\ninov\AppData\Local\Temp\nimblecache-0\nimscriptapi_82906963.nim(187, 16)
C:\Users\ninov\.nimble\pkgs\playdate-#finishcallback_like_menu_callback\playdate\build\nimble.nim(79, 12) simulateTask
C:\Users\ninov\.nimble\pkgs\playdate-#finishcallback_like_menu_callback\playdate\build\utils.nim(22, 10) nimble
C:\nim-1.6.16\lib\system\nimscript.nim(273, 7) exec
C:\nim-1.6.16\lib\system\nimscript.nim(273, 7) Error: unhandled exception: FAILED: nimble simulator [OSError]
     Error: Exception raised during nimble script execution
PS C:\Users\ninov\codeProjects\wheelsprung> 

@samdze
Copy link
Owner

samdze commented Apr 7, 2024

Merging this as is, I'll make some adjustments soon

@samdze samdze merged commit 44898f0 into samdze:main Apr 7, 2024
2 checks passed
@ninovanhooff ninovanhooff deleted the finishcallback_like_menu_callback branch November 10, 2024 14:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants