evaluate TargetNumber as a Lua expression

This commit is contained in:
Chris Danford
2005-02-16 00:16:14 +00:00
parent 40fde98efa
commit 4d31f3b4c1
7 changed files with 29 additions and 9 deletions
+3 -2
View File
@@ -376,7 +376,7 @@ void BGAnimationLayer::LoadFromNode( const CString& sDir, const XNode* pNode )
CString expr;
if( pNode->GetAttrValue("Cond",expr) || pNode->GetAttrValue("Condition",expr) )
{
if( !LUA->RunExpressionB( expr ) )
if( !LUA->RunExpressionB(expr) )
return;
}
}
@@ -672,7 +672,8 @@ bool BGAnimationLayer::EarlyAbortDraw()
if( m_sDrawCond.empty() )
return false;
if( !LUA->RunExpressionB( m_sDrawCond ) )
// TODO: Is it ok to evaluate this every frame?
if( !LUA->RunExpressionB(m_sDrawCond) )
return true;
return false;
+1 -1
View File
@@ -34,7 +34,7 @@ Command::Arg Command::GetArg( unsigned index ) const
Command::Arg::operator CString ()
{
CString sValue = s;
LUA->RunAtExpression( sValue );
LUA->RunAtExpressionS( sValue );
return sValue;
}
+16 -1
View File
@@ -364,7 +364,7 @@ bool LuaManager::RunExpressionS( const CString &str, CString &sOut )
return true;
}
bool LuaManager::RunAtExpression( CString &sStr )
bool LuaManager::RunAtExpressionS( CString &sStr )
{
if( sStr.size() == 0 || sStr[0] != '@' )
return false;
@@ -378,6 +378,21 @@ bool LuaManager::RunAtExpression( CString &sStr )
return true;
}
float LuaManager::RunAtExpressionF( const CString &_sStr )
{
if( _sStr.size() == 0 || _sStr[0] != '@' )
return 0;
CString sStr = _sStr;
/* Erase "@". */
sStr.erase( 0, 1 );
CString sOut;
RunExpressionS( sStr, sOut );
return atof( sOut );
}
void LuaManager::Fail( const CString &err )
{
lua_pushstring( L, err );
+2 -1
View File
@@ -30,7 +30,8 @@ public:
bool RunExpressionS( const CString &str, CString &sOut );
/* If sStr begins with @, evaluate the rest as an expression and store the result over sStr. */
bool RunAtExpression( CString &sStr );
bool RunAtExpressionS( CString &sStr );
float RunAtExpressionF( const CString &sStr );
void Fail( const CString &err );
+1 -1
View File
@@ -550,7 +550,7 @@ public:
Luna<T>::Register( L );
// Add global singleton if constructed already. If it's not constructed yet,
// then we'll register it later when we reload the theme just before
// then we'll register it later when we reinit Lua just before
// initializing the display.
if( PROFILEMAN )
{
+5 -2
View File
@@ -26,9 +26,12 @@ void RollingNumbers::LoadFromNode( const CString& sDir, const XNode* pNode )
pNode->GetAttrValue( "Format", m_sFormat );
pNode->GetAttrValue( "ApproachSeconds", m_fApproachSeconds );
float fTargetNumber;
if( pNode->GetAttrValue( "TargetNumber", fTargetNumber ) )
CString sTargetNumber;
if( pNode->GetAttrValue( "TargetNumber", sTargetNumber ) )
{
float fTargetNumber = LUA->RunExpressionF(sTargetNumber);
SetTargetNumber( fTargetNumber );
}
UpdateText();
}
+1 -1
View File
@@ -677,7 +677,7 @@ void ThemeManager::EvaluateString( CString &sText )
{
/* If the string begins with an @, treat it as a raw Lua expression, and don't do any
* other filtering. (XXX: maybe we should still do font aliases) */
if( LUA->RunAtExpression( sText ) )
if( LUA->RunAtExpressionS( sText ) )
return;
// "::" means newline since you can't use line breaks in an ini file.