You can replace it with this: ``` suspend fun run(...
# gamedev
o
You can replace it with this:
Copy code
suspend fun run() {
     while(true) {
          …
          val dt = nextFrame() // suspending call
     }
}
In this case complex logic can be encapsulated inside a function and a lot of state machine complexity is generated by a compiler. E.g. loops, branches, etc.
d
which kind of structure would you use to suspend the
nextFrame
call? I try with
Mutex
(
nextFrame
is locked until the main loop unlock it). It works but I need to check if the lock is locked in the main loop. And I'm not sure if it's a good idea 👀 otherwise, I think I can plug in into libGDX. Conceptually it can work (example bellow): https://play.kotlinlang.org/#eyJ2ZXJzaW9uIjoiMS4zLjAiLCJwbGF0Zm9ybSI6ImphdmEiLCJhcmdzIjoiIiwibm9uZU1hcmtlcnMiOnRydWUsInRoZW1lIjoiaWRlYSIsImZvbGRlZEJ1dHRvbiI6dHJ1ZSwicmVhZE9ubHkiOmZhbHNlLCJjb2RlIjoiXG5pbXBvcnQga290bGlueC5jb3JvdXRpbmVzLkdsb2JhbFNjb3BlXG5pbXBvcnQga290bGlueC5jb3JvdXRpbmVzLmFzeW5jXG5pbXBvcnQga290bGlueC5jb3JvdXRpbmVzLmxhdW5jaFxuaW1wb3J0IGtvdGxpbnguY29yb3V0aW5lcy5zeW5jLk11dGV4XG5pbXBvcnQgamF2YS51dGlsLipcblxuXG52YWwgZnJhbWVNdXRleCA9IE11dGV4KClcblxucHJpdmF0ZSBmdW4gTXV0ZXgudW5sb2NrSWYoKSB7XG4gICAgaWYgKGlzTG9ja2VkKSB7XG4gICAgICAgIHVubG9jaygpXG4gICAgfVxufVxuXG5zdXNwZW5kIGZ1biBuZXh0RnJhbWUoKSB7XG4gICAgZnJhbWVNdXRleC5sb2NrKClcbn1cblxuLy8gZGlzcGxheSBjaGFyIGJ5IGNoYXI6IG9uZSBhdCBhIHRpbWVcbnN1c3BlbmQgZnVuIGRpc3BsYXkoc3RyOiBTdHJpbmcpIHtcbiAgICBzdHIuZm9yRWFjaCB7XG4gICAgICAgIHByaW50KGl0KVxuICAgICAgICBuZXh0RnJhbWUoKVxuICAgIH1cbiAgICBwcmludGxuKClcbn1cblxuc3VzcGVuZCBmdW4gYXNrKHN0cjogU3RyaW5nKTogU3RyaW5nIHtcbiAgICBkaXNwbGF5KHN0cilcbiAgICBwcmludChcIj4gXCIpXG4gICAgdmFsIHJlc3VsdCA9IEdsb2JhbFNjb3BlLmFzeW5jIHtcbiAgICAgICAgU2Nhbm5lcihTeXN0ZW0uYGluYCkubmV4dExpbmUoKVxuICAgIH1cbiAgICB2YWwgcmVzcG9uc2UgPSByZXN1bHQuYXdhaXQoKVxuICAgIHByaW50bG4oKVxuICAgIHJldHVybiByZXNwb25zZVxufVxuXG5mdW4gbWFpbihhcmdzOiBBcnJheTxTdHJpbmc+KSB7XG5cbiAgICBHbG9iYWxTY29wZS5sYXVuY2gge1xuICAgICAgICBkaXNwbGF5KFwiLi4ubG9hZGluZy4uLlwiKVxuICAgICAgICB2YWwgbmFtZSA9IGFzayhcIldoYXQgaXMgeW91ciBuYW1lP1wiKVxuICAgICAgICBkaXNwbGF5KFwiSGVsbG8gJG5hbWUhXCIpXG4gICAgICAgIHZhbCBhbnN3ZXIgPSBhc2soXCJTaGFsbCB3ZSBQbGF5IGEgZ2FtZT9cIilcbiAgICAgICAgd2hlbiAoYW5zd2VyKSB7XG4gICAgICAgICAgICBcInllc1wiIC0+IGRpc3BsYXkoXCIubzBPIChCT09NKSBPMG8uXCIpXG4gICAgICAgICAgICBlbHNlIC0+IGRpc3BsYXkoXCJUSEUgRU5EXCIpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzaW11bGF0ZSBtYWluIGxvb3BcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBmcmFtZU11dGV4LnVubG9ja0lmKClcbiAgICAgICAgVGhyZWFkLnNsZWVwKDEwMClcbiAgICB9XG59In0=