diff options
author | Mitchell Stokes <mogurijin@gmail.com> | 2013-07-23 02:46:17 +0400 |
---|---|---|
committer | Mitchell Stokes <mogurijin@gmail.com> | 2013-07-23 02:46:17 +0400 |
commit | 33e52d0df4d2d9dfd248144e2aac08af4c1bbeff (patch) | |
tree | 46f7dc5df8eb03f48c94b39692a6c1859def8e1e /source/gameengine/Expressions | |
parent | 1b853285451b66890b35a4a31d90038f34218c85 (diff) |
BGE: Fix for [#34398] "«illegal operator» in Expression Controller" reported by Andrey Kashlak (andreymal)
The expressions system now supports the not operator on ints and floats.
Diffstat (limited to 'source/gameengine/Expressions')
-rw-r--r-- | source/gameengine/Expressions/FloatValue.cpp | 9 | ||||
-rw-r--r-- | source/gameengine/Expressions/IntValue.cpp | 9 |
2 files changed, 15 insertions, 3 deletions
diff --git a/source/gameengine/Expressions/FloatValue.cpp b/source/gameengine/Expressions/FloatValue.cpp index b7d7f528155..0f468e328ed 100644 --- a/source/gameengine/Expressions/FloatValue.cpp +++ b/source/gameengine/Expressions/FloatValue.cpp @@ -97,7 +97,7 @@ ret: a new object containing the result of applying operator op to this return new CFloatValue (-m_float); break; case VALUE_NOT_OPERATOR: - return new CErrorValue (op2str(op) + "only allowed on booleans"); + return new CBoolValue (m_float == 0.f); break; case VALUE_AND_OPERATOR: case VALUE_OR_OPERATOR: @@ -160,6 +160,9 @@ ret: a new object containing the result of applying operator op to val and case VALUE_LEQ_OPERATOR: ret = new CBoolValue(((CIntValue *) val)->GetInt() <= m_float); break; + case VALUE_NOT_OPERATOR: + ret = new CBoolValue(m_float == 0); + break; default: ret = new CErrorValue("illegal operator. please send a bug report."); break; @@ -212,7 +215,9 @@ ret: a new object containing the result of applying operator op to val and case VALUE_POS_OPERATOR: ret = new CFloatValue (m_float); break; - + case VALUE_NOT_OPERATOR: + ret = new CBoolValue(m_float == 0); + break; default: ret = new CErrorValue("illegal operator. please send a bug report."); break; diff --git a/source/gameengine/Expressions/IntValue.cpp b/source/gameengine/Expressions/IntValue.cpp index 2cacea98467..fa4c9ad8ac9 100644 --- a/source/gameengine/Expressions/IntValue.cpp +++ b/source/gameengine/Expressions/IntValue.cpp @@ -96,7 +96,7 @@ object and val return new CIntValue (-m_int); break; case VALUE_NOT_OPERATOR: - return new CErrorValue (op2str(op) + "only allowed on booleans"); + return new CBoolValue (m_int == 0); break; case VALUE_AND_OPERATOR: case VALUE_OR_OPERATOR: @@ -170,7 +170,11 @@ CValue* CIntValue::CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *v case VALUE_POS_OPERATOR: ret = new CIntValue (m_int); break; + case VALUE_NOT_OPERATOR: + ret = new CBoolValue(m_int == 0); + break; default: + printf("Found op: %d\n", op); ret = new CErrorValue("illegal operator. please send a bug report."); break; } @@ -215,6 +219,9 @@ CValue* CIntValue::CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *v case VALUE_LEQ_OPERATOR: ret = new CBoolValue(((CFloatValue *) val)->GetFloat() <= m_int); break; + case VALUE_NOT_OPERATOR: + ret = new CBoolValue(m_int == 0); + break; default: ret = new CErrorValue("illegal operator. please send a bug report."); break; |