- cross-posted to:
- godot
- webdev
- programming
- programming_languages
- cross-posted to:
- godot
- webdev
- programming
- programming_languages
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?
Anything that makes Godot better is a good thing.
Thanks 🙂
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! 🙂