orangy
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.dwursteisen
11/07/2018, 10:57 PMnextFrame
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=