"getTrailingNumber" function in T2D
by yurembo · 10/28/2013 (12:37 pm) · 0 comments
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 declaration of a function in the StringBuffer class:
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:
Yep, this is very simple to play!
So have a rest!
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 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!
About the author
Torque fan
