If ... Then func() Else ...
Blitz3D Forums/Blitz3D Bug Reports/If ... Then func() Else ... I have noticed something similar, but have not tried to pin it down yet. Next time I come across it I will post some code, but it usually results in me having to split the if.then.else statement into multiple lines with if...else...endif.
Here is an example taken directly from the code of my current game:
this code works:
this code does not:
does it in both blitzplus and blitz3d (haven't tried it in blitzbasic but probably not much point testing that one..)
this code works:
If OtherUnit\IsPlayer Then AddSoundToPlayList(OtherUnit.UnitObject,"body impact") Else AddSoundToPlayList(OtherUnit.UnitObject,"impact") endIf
this code does not:
If OtherUnit\IsPlayer Then AddSoundToPlayList(OtherUnit.UnitObject,"body impact") Else AddSoundToPlayList(OtherUnit.UnitObject,"impact")
does it in both blitzplus and blitz3d (haven't tried it in blitzbasic but probably not much point testing that one..)
I've simplified your test case. Your code is causing a problem because you're calling a function with two arguments.
As illustrated above, the Blitz3d parser chokes on single-line IF..THEN..ELSE statements where the THEN substatement is a function call with (a) any number of parameters other than one and (b) an ignored return value.
If blah Then bar() Else Print ; Expecting Expression If blah Then bar(1) Else Print ; works fine! If blah Then bar(1,2) Else Print ; Expecting ')' If blah Then bar(1,2,3) Else Print ; Expecting ')' If blah Then bar(1,2,3,4) Else Print ; Expecting ')' If blah Then bar(1,2,3,4,5) Else Print ; Expecting ')' Function bar(x1=0,x2=0,x3=0,x4=0,x5=0) End Function
As illustrated above, the Blitz3d parser chokes on single-line IF..THEN..ELSE statements where the THEN substatement is a function call with (a) any number of parameters other than one and (b) an ignored return value.
Weird. Is this a problem specific to the 1.93 update? I probably haven't hit it before because I hardly ever use If/Then/Else on a single line.
I know 1.91 also suffers from this issue because I upgraded from that to see if it'd go away.
Regardless of whether it's an old problem this parser bug should be fixed. :)
Regardless of whether it's an old problem this parser bug should be fixed. :)
If you have a function that doesn't return a value, then you can call it by taking out the brackets. I know some people prefer to use the brackets all the time, but I prefer to have these sort of functions 'look' like any other command.
So...
So...
If a=10 Then Color(255,255,255) Else Color(200,200,200)produces the error, but
If a=10 Then Color 255,255,255 Else Color 200,200,200does not.
Nice catch.
Personally, I use parenthesis even with builtin commands.
Personally, I use parenthesis even with builtin commands.
To be on the save side you may use the dedicated command delimiters:
if condition: action():else:actions2():endif
The structure is about the same.
if condition: action():else:actions2():endif
The structure is about the same.