This is a simple issue with a simple fix, but I’m confused as to why it’s happening.
If you set a text element’s text to 0 via:
this.entity.element.text = 0;
the text element sets its text to "" and prints nothing.
The simple fix would be to change it to
this.entity.element.text = "" + 0;
but it’s strange that this is occurring in the first place.
My guess, which might be completely off, is that internally there’s a check of the same kind as 0 == '' which evaluates to true thanks to js’s strange rules.
If you want it to print 0, you would put the quotes around the 0. 0 on its own is registered as null, and thus it won’t show anything (this happens because texts register strings only and not numbers, it’ll register 0 as null because 0 means nothing or null). If you want it to print 0, you need to have it in quotations for it to register the 0 as a string.
I met the issue in my leaderboards at some point, when I noticed some players had no score. As you said, @TingleyWJ, it was easy to fix, so I started to explicitly convert my scores to string before assigning to the element property.
@Leonidas pointed to the sources of the engine, where the check happens. As you assumed, it is due to the way JS evaluates zeros:
var val = 0;
if (val) {} // false
However, I do agree, that this is not intuitive. If I am able to do:
this.entity.element.text = 7;
Then I should be able to assign a zero as well. You can consider creating an issue in the engine repo.