浏览代码

Merge pull request #1226 from Azaezel/alpha41/uniquepair

aug ArrayObject to have a uniquePair command
Brian Roberts 1 年之前
父节点
当前提交
9f5c74c79a

+ 22 - 0
Engine/source/console/arrayObject.cpp

@@ -404,6 +404,22 @@ void ArrayObject::uniqueKey()
 
 //-----------------------------------------------------------------------------
 
+void ArrayObject::uniquePair()
+{
+   for (S32 i = 0; i < mArray.size(); i++)
+   {
+      for (S32 j = i + 1; j < mArray.size(); j++)
+      {
+         if (isEqual(mArray[i].key, mArray[j].key) && isEqual(mArray[i].value, mArray[j].value))
+         {
+            erase(j);
+            j--;
+         }
+      }
+   }
+}
+//-----------------------------------------------------------------------------
+
 void ArrayObject::duplicate(ArrayObject* obj)
 {
    empty();
@@ -740,6 +756,12 @@ DefineEngineMethod( ArrayObject, uniqueKey, void, (),,
    object->uniqueKey();
 }
 
+DefineEngineMethod(ArrayObject, uniquePair, void, (), ,
+   "Removes any elements that have duplicated key and value pairs (leaving the first instance)")
+{
+   object->uniquePair();
+}
+
 DefineEngineMethod( ArrayObject, duplicate, bool, ( ArrayObject* target ),,
    "Alters array into an exact duplicate of the target array.\n"
    "@param target ArrayObject to duplicate\n" )

+ 5 - 1
Engine/source/console/arrayObject.h

@@ -158,6 +158,10 @@ public:
    /// (keeps the first instance only)
    void uniqueKey();
 
+   /// Removes any duplicate keys from the array
+   /// (keeps the first instance only)
+   void uniquePair();
+
    /// Makes this array an exact duplicate of another array
    void duplicate( ArrayObject *obj );
 
@@ -229,4 +233,4 @@ public:
    static void initPersistFields();
 };
 
-#endif // _ARRAYOBJECT_H_
+#endif // _ARRAYOBJECT_H_

+ 1 - 1
Templates/BaseGame/game/core/utility/scripts/helperFunctions.tscript

@@ -650,7 +650,7 @@ function populateAllFonts()
          continue;
       %fontarray.push_back(%obj.fontType,%obj.fontSize);
    }
-   %fontarray.uniqueKey();
+   %fontarray.uniquePair();
    
    %fontarrayCount = %fontarray.count();