Skip to content

Pseudo asynchronous scripting helpers for Godot 4.

License

Notifications You must be signed in to change notification settings

folt-a/godot-nesink

Repository files navigation

English | 日本語 | 简体中文


MIT License


Nesinkrona (for Godot 4)

An addon to enhance the awaitability of GDScript 2.0.


  • It improves the readability and naturalness of code that is intermingled with signals and coroutines. (similar to Promise in JS or Task in C#).
  • Fast due to simple implementation.
  • Can be canceled from outside of await.
  • Contains patterns that reproduce iterations with yield. (experimental)


# Multiple Async or Signal or Coroutine can be combined into a new Async
var all_async := Async.all([
    Async.from(_coro), # from Async
    obj.signal,        # from Signal
    func(): return 0   # from Coroutine
])
var result = await all_async.wait()

# or you can await it immediately.
var result = await Async.wait_all([
    Async.from(_coro),
    obj.signal,
    func(): return 0
])

# Includes general patterns for await
Async.all()
Async.all_settled()
Async.any()
Async.race()
Async.wait_all()
Async.wait_all_settled()
Async.wait_any()
Async.wait_race()

# and support continuations and cancellations.
var another_async = async.then(func(prev_result):
    return prev_result * prev_result)
var cancel := Cancel.new()
await another_async.wait(cancel)

How do I use it?


Checking demos

  1. Git clone then open in Godot Engine.
  2. (Select demo/Demo.tscn as Main Scene then) F5!

Add-on installation

  1. Git clone then copy addons/godot-nesink to your project.
  2. Activate Nesinkrona addon.
  3. Code!

And details: 📖 Wiki (Google Translated)




Contributing

We are grateful to the community for contributing bug fixes, documentation, translations, and any other improvements!

Original repository

This repository was transfer from ydipeepo

ありがとうございます……!