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 don’t understand the code, but it’s good to see you doing things.
Here, for example, is how the
showMessage
function would work:$MessageLabel
is a field defined by the programmer in Godot.- The
showIn(p_message, p_place)
function shows the messagep_message
in the fieldp_place
. - waitSeconds(2) waits 2 seconds.
- When the 2 seconds are elapsed, the second branch
waitSeconds(2)
is finished and so theparallel
block is exited (because ofexitWith branch 2
) and the other branch (the first one) is definitely interrupted (because myparallel exitWith branch N
does so). - The interruption of the first branch
showIn(p_message, $MessageLabel)
makes the$MessageLabel
invisible.
Yes, it’s very different from what is done in G’MIC. Here, the language is preferably adapted to user interactions. There aren’t many in G’MIC. 🙂
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! 🙂