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.showIn(p_message, p_place)
function shows the messagep_message
in the fieldp_place
.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).showIn(p_message, $MessageLabel)
makes the$MessageLabel
invisible.