“getTrailingNumber” function in T2D
by yurembo
Hello all!
I used Torque 3D for a long time. I liked to use “getTrailingNumber” function. This function is very useful to get a tail number of an object. For example, you have many objects, all of these have a name ”Gun” and to differ these you add a number to the end of a name, like “Gun22”. Then you need to get this number, right, you should call “getTrailingNumber” function and pass a target word with a number as a parameter to this function. It returns a tailing number. But T2D miss this function. Ok, we can add “getTrailingNumber” to T2D. It is very simple.
So, open up your project in VS, open \engine\source\string\stringBuffer.h file and add a declaration of a function in the StringBuffer class:
static const UTF8* GetTrailingNumber(const char* str, S32& number);
You should notice that this is a static function. Next open engine\source\string\stringBuffer.cc file to write a definition of this function:
const UTF8* StringBuffer::GetTrailingNumber(const char* str, S32& number)
{
// Check for trivial strings
if (!str || !str[0])
return StringTable->EmptyString;
// Find the number at the end of the string
StringBuffer base = str;
const char* p = base.getPtr8() + base.length() - 1;
// Ignore trailing whitespace
while ((p != base.getPtr8()) && dIsspace(*p))
p--;
// Need at least one digit!
if (!isdigit(*p))
return base.getPtr8();
// Back up to the first non-digit character
while ((p != base.getPtr8()) && isdigit(*p))
p--;
// Convert number => allow negative numbers, treat '_' as '-' for Maya
if ((*p == '-') || (*p == '_'))
number = -dAtoi(p + 1);
else
number = ((p == base.getPtr8()) ? dAtoi(p) : dAtoi(++p));
// Remove space between the name and the number
while ((p > base.getPtr8()) && dIsspace(*(p-1)))
p--;
return base.substring(0, p - base.getPtr8()).getPtr8();
}
I used Torque 3D for a long time. I liked to use “getTrailingNumber” function. This function is very useful to get a tail number of an object. For example, you have many objects, all of these have a name ”Gun” and to differ these you add a number to the end of a name, like “Gun22”. Then you need to get this number, right, you should call “getTrailingNumber” function and pass a target word with a number as a parameter to this function. It returns a tailing number. But T2D miss this function. Ok, we can add “getTrailingNumber” to T2D. It is very simple.
So, open up your project in VS, open \engine\source\string\stringBuffer.h file and add a declaration of a function in the StringBuffer class:
static const UTF8* GetTrailingNumber(const char* str, S32& number);
You should notice that this is a static function. Next open engine\source\string\stringBuffer.cc file to write a definition of this function:
const UTF8* StringBuffer::GetTrailingNumber(const char* str, S32& number)
{
// Check for trivial strings
if (!str || !str[0])
return StringTable->EmptyString;
// Find the number at the end of the string
StringBuffer base = str;
const char* p = base.getPtr8() + base.length() - 1;
// Ignore trailing whitespace
while ((p != base.getPtr8()) && dIsspace(*p))
p--;
// Need at least one digit!
if (!isdigit(*p))
return base.getPtr8();
// Back up to the first non-digit character
while ((p != base.getPtr8()) && isdigit(*p))
p--;
// Convert number => allow negative numbers, treat '_' as '-' for Maya
if ((*p == '-') || (*p == '_'))
number = -dAtoi(p + 1);
else
number = ((p == base.getPtr8()) ? dAtoi(p) : dAtoi(++p));
// Remove space between the name and the number
while ((p > base.getPtr8()) && dIsspace(*(p-1)))
p--;
return base.substring(0, p - base.getPtr8()).getPtr8();
}
I took up this cod from T3D with little modifications. Nice!
Next thing we should to do is to write a console function. This way we will able to call “getTrailingNumber” from Torque Script. Right way, open up \engine\source\console\consoleFunctions.cc and to the end of this file add this cod:
ConsoleFunction(getTrailingNumber, S32, 2, 2, "")
{
S32 suffix = -1;
StringBuffer::GetTrailingNumber(argv[1], suffix);
return suffix;
}
Don’t forget: you should include StringBuffer.h header to current file. Now, when we call getTrailingNumber from a T2D script cod we should get a result like from T3D.
Yep, this is very simple to play!
So have a rest!
Yep, this is very simple to play!
So have a rest!