Thanks for reading my post. I have really struggled to figure this out and would appreciate some help.
I have an object (thing1) that has a settable switch (thing2) as a component object. I want to be able to handle both “set thing1 to [1-4]” and “set thing2 to [1-4]”, by actually setting thing2.
Here is my (simplified) code:
thing1: Thing
name = 'thing1'
vocabWords = 'thing1'
desc = "This is a thing with a switch that can be set from 1 to 4. It is currently set to <<thing2.curSetting>>. "
dobjFor(SetTo) remapTo(SetTo, thing2, IndirectObject)
;
+thing2: Settable, Component 'sliding switch/slider' 'thing2'
"The switch moves along a track with four positions, 1 to 4. "
curSetting = '3'
isValidSetting(val)
{
return (val >= '1') && (val <= '4');
}
setToInvalidMsg = 'You can\'t set the switch to that. '
;
This works fine for “set thing2 to 4”. But “set thing1 to 4” gives a runtime error of “invalid comparison” in isValidSetting() because val is of type literalPhrase(miscList).
I can fix this with:
isValidSetting(val)
{
if(val.propDefined(&misc_))
{
return (val.misc_.txt_ >= '1') && (val.misc_.txt_ <= '4');
}
else
{
return (val >= '1') && (val <= '4');
}
}
but that just doesn’t seem right. What is the proper way to handle this?