Hello, ๐
I created a new language called FuncSug.
Its purpose is to make GUI programming in the browser easier and so game programming.
The facility consists on eliminating asynchronism: In FuncSug, the code is no longer managed by an implicit/explicit global loop (I don't speak about implementation).
I intend, if I have time, to implement it for Godot as well.
In FuncSug, the first tutorial of Godot would be roughly coded as this:
func showMessage(p_message):
parallel exitWith branch 2 ||
showIn(p_message, $MessageLabel)
||
waitSeconds(2)
parallel ||
while true:
# Start of game
parallel exitWith branch 2 ||
showMessage('Dodge the\nCreeps')
||
waitSeconds(1)
awaitPressed($StartButton)
get_tree().call_group(&"mobs", &"queue_free")
score := 0
$Player.start($StartPosition.position)
# Middle of game
parallel exitWith branch 1 ||
awaitSignal('hit')
||
while true:
playSoundFile('House In a Forest Loop.ogg')
||
showMessage('Get Ready')
parallel ||
while true:
waitSeconds(1)
score += 1
||
while true:
waitSeconds(0.5)
callgd spawnMob()
# End of game
parallel ||
showMessage('Game Over')
||
playSoundFile('gameover.wav')
||
while true:
await score
$ScoreLabel.text := score
The 'player.gd' and 'mob.gd' files would be keeped as they are. The "_on_MobTimer_timeout" function would be renamed as "spawnMob" and moved to 'mob.gd'. The timers wouldn't be needed any more.
Can you tell me what you think about it?
I think it's a good learning experience, but a language isn't built over night...
Yes, that's why I hope others will be able to join me. In the meantime, you can try FuncSug in the Playground. ๐
I have written GUI from scratch at least 2 times (rendering open gl and up) so I'll skip this time, I do wish you all luck though!
Thank you for your kind wish! ๐