Browse Source

- Scene PickArea(), PickPoint(), pickCollision() & PickRay() now accept an empty string for the group/layer masks to mean "all" groups/layers. This is slightly better than having to use "-1" to mean all.

MelvMay-GG 12 years ago
parent
commit
8cb2927
1 changed files with 40 additions and 16 deletions
  1. 40 16
      engine/source/2d/scene/Scene_ScriptBinding.h

+ 40 - 16
engine/source/2d/scene/Scene_ScriptBinding.h

@@ -2305,8 +2305,8 @@ ConsoleMethod(Scene, getMotorJointMaxTorque, F32, 3, 3,  "(jointId) Gets the max
 ConsoleMethod(Scene, pickArea, const char*, 4, 9, "(startx/y, endx/y, [sceneGroupMask], [sceneLayerMask], [pickMode] ) Picks objects intersecting the specified area with optional group/layer masks.\n"
 ConsoleMethod(Scene, pickArea, const char*, 4, 9, "(startx/y, endx/y, [sceneGroupMask], [sceneLayerMask], [pickMode] ) Picks objects intersecting the specified area with optional group/layer masks.\n"
               "@param startx/y The coordinates of the start point as either (\"x y\") or (x,y)\n"
               "@param startx/y The coordinates of the start point as either (\"x y\") or (x,y)\n"
               "@param endx/y The coordinates of the end point as either (\"x y\") or (x,y)\n"
               "@param endx/y The coordinates of the end point as either (\"x y\") or (x,y)\n"
-              "@param sceneGroupMask Optional scene group mask.\n"
-              "@param sceneLayerMask Optional scene layer mask.\n"
+              "@param sceneGroupMask Optional scene group mask.  (-1) or empty string selects all groups.\n"
+              "@param sceneLayerMask Optional scene layer mask.  (-1) or empty string selects all layers.\n"
               "@param pickMode Optional mode 'any', 'size' or 'collision' (default is 'size').\n"
               "@param pickMode Optional mode 'any', 'size' or 'collision' (default is 'size').\n"
               "@return Returns list of object IDs.")
               "@return Returns list of object IDs.")
 {
 {
@@ -2356,12 +2356,18 @@ ConsoleMethod(Scene, pickArea, const char*, 4, 9, "(startx/y, endx/y, [sceneGrou
     // Calculate scene group mask.
     // Calculate scene group mask.
     U32 sceneGroupMask = MASK_ALL;
     U32 sceneGroupMask = MASK_ALL;
     if ( (U32)argc > firstArg )
     if ( (U32)argc > firstArg )
-        sceneGroupMask = dAtoi(argv[firstArg]);
+    {
+        if ( *argv[firstArg] != 0 )
+            sceneGroupMask = dAtoi(argv[firstArg]);
+    }
 
 
     // Calculate scene layer mask.
     // Calculate scene layer mask.
     U32 sceneLayerMask = MASK_ALL;
     U32 sceneLayerMask = MASK_ALL;
     if ( (U32)argc > (firstArg + 1) )
     if ( (U32)argc > (firstArg + 1) )
-        sceneLayerMask = dAtoi(argv[firstArg + 1]);
+    {
+        if ( *argv[firstArg + 1] != 0 )
+            sceneLayerMask = dAtoi(argv[firstArg + 1]);
+    }
 
 
     // Calculate pick mode.
     // Calculate pick mode.
     Scene::PickMode pickMode = Scene::PICK_SIZE;
     Scene::PickMode pickMode = Scene::PICK_SIZE;
@@ -2454,8 +2460,8 @@ ConsoleMethod(Scene, pickArea, const char*, 4, 9, "(startx/y, endx/y, [sceneGrou
 ConsoleMethod(Scene, pickRay, const char*, 4, 9, "(startx/y, endx/y, [sceneGroupMask], [sceneLayerMask], [pickMode] ) Picks objects intersecting the specified ray with optional group/layer masks.\n"
 ConsoleMethod(Scene, pickRay, const char*, 4, 9, "(startx/y, endx/y, [sceneGroupMask], [sceneLayerMask], [pickMode] ) Picks objects intersecting the specified ray with optional group/layer masks.\n"
               "@param startx/y The coordinates of the start point as either (\"x y\") or (x,y)\n"
               "@param startx/y The coordinates of the start point as either (\"x y\") or (x,y)\n"
               "@param endx/y The coordinates of the end point as either (\"x y\") or (x,y)\n"
               "@param endx/y The coordinates of the end point as either (\"x y\") or (x,y)\n"
-              "@param sceneGroupMask Optional scene group mask.\n"
-              "@param sceneLayerMask Optional scene layer mask.\n"
+              "@param sceneGroupMask Optional scene group mask.  (-1) or empty string selects all groups.\n"
+              "@param sceneLayerMask Optional scene layer mask.  (-1) or empty string selects all layers.\n"
               "@param pickMode Optional mode 'any', 'size' or 'collision' (default is 'size').\n"
               "@param pickMode Optional mode 'any', 'size' or 'collision' (default is 'size').\n"
               "@return Returns list of object IDs.")
               "@return Returns list of object IDs.")
 {
 {
@@ -2505,12 +2511,18 @@ ConsoleMethod(Scene, pickRay, const char*, 4, 9, "(startx/y, endx/y, [sceneGroup
     // Calculate scene group mask.
     // Calculate scene group mask.
     U32 sceneGroupMask = MASK_ALL;
     U32 sceneGroupMask = MASK_ALL;
     if ( (U32)argc > firstArg )
     if ( (U32)argc > firstArg )
-        sceneGroupMask = dAtoi(argv[firstArg]);
+    {
+        if ( *argv[firstArg] != 0 )
+            sceneGroupMask = dAtoi(argv[firstArg]);
+    }
 
 
     // Calculate scene layer mask.
     // Calculate scene layer mask.
     U32 sceneLayerMask = MASK_ALL;
     U32 sceneLayerMask = MASK_ALL;
     if ( (U32)argc > (firstArg + 1) )
     if ( (U32)argc > (firstArg + 1) )
-        sceneLayerMask = dAtoi(argv[firstArg + 1]);
+    {
+        if ( *argv[firstArg + 1] != 0 )
+            sceneLayerMask = dAtoi(argv[firstArg + 1]);
+    }
 
 
     // Calculate pick mode.
     // Calculate pick mode.
     Scene::PickMode pickMode = Scene::PICK_SIZE;
     Scene::PickMode pickMode = Scene::PICK_SIZE;
@@ -2603,8 +2615,8 @@ ConsoleMethod(Scene, pickRayCollision, const char*, 4, 8, "(startx/y, endx/y, [s
                 "Unlike other pick methods, this returns the complete detail for each object encountered, returning the collision point, normal and fraction of the ray intersection.\n"
                 "Unlike other pick methods, this returns the complete detail for each object encountered, returning the collision point, normal and fraction of the ray intersection.\n"
                 "@param startx/y The coordinates of the start point as either (\"x y\") or (x,y)\n"
                 "@param startx/y The coordinates of the start point as either (\"x y\") or (x,y)\n"
                 "@param endx/y The coordinates of the end point as either (\"x y\") or (x,y)\n"
                 "@param endx/y The coordinates of the end point as either (\"x y\") or (x,y)\n"
-                "@param sceneGroupMask Optional scene group mask.\n"
-                "@param sceneLayerMask Optional scene layer mask.\n"
+                "@param sceneGroupMask Optional scene group mask.  (-1) or empty string selects all groups.\n"
+                "@param sceneLayerMask Optional scene layer mask.  (-1) or empty string selects all layers.\n"
                 "@return Returns a list of objects in blocks of detail items where each block represents a single object and its collision detail in the format:"
                 "@return Returns a list of objects in blocks of detail items where each block represents a single object and its collision detail in the format:"
                 "<ObjectId PointX PointY NormalX NormalY RayFraction ShapeIndex> <ObjectId PointX PointY NormalX NormalY RayFraction ShapeIndex> <ObjectId PointX PointY NormalX NormalY RayFraction ShapeIndex> etc.\n")
                 "<ObjectId PointX PointY NormalX NormalY RayFraction ShapeIndex> <ObjectId PointX PointY NormalX NormalY RayFraction ShapeIndex> <ObjectId PointX PointY NormalX NormalY RayFraction ShapeIndex> etc.\n")
 {
 {
@@ -2654,12 +2666,18 @@ ConsoleMethod(Scene, pickRayCollision, const char*, 4, 8, "(startx/y, endx/y, [s
     // Calculate scene group mask.
     // Calculate scene group mask.
     U32 sceneGroupMask = MASK_ALL;
     U32 sceneGroupMask = MASK_ALL;
     if ( (U32)argc > firstArg )
     if ( (U32)argc > firstArg )
-        sceneGroupMask = dAtoi(argv[firstArg]);
+    {
+        if ( *argv[firstArg] != 0 )
+            sceneGroupMask = dAtoi(argv[firstArg]);
+    }
 
 
     // Calculate scene layer mask.
     // Calculate scene layer mask.
     U32 sceneLayerMask = MASK_ALL;
     U32 sceneLayerMask = MASK_ALL;
     if ( (U32)argc > (firstArg + 1) )
     if ( (U32)argc > (firstArg + 1) )
-        sceneLayerMask = dAtoi(argv[firstArg + 1]);
+    {
+        if ( *argv[firstArg + 1] != 0 )
+            sceneLayerMask = dAtoi(argv[firstArg + 1]);
+    }
 
 
     // Fetch world query and clear results.
     // Fetch world query and clear results.
     WorldQuery* pWorldQuery = object->getWorldQuery( true );
     WorldQuery* pWorldQuery = object->getWorldQuery( true );
@@ -2729,8 +2747,8 @@ ConsoleMethod(Scene, pickRayCollision, const char*, 4, 8, "(startx/y, endx/y, [s
 
 
 ConsoleMethod(Scene, pickPoint, const char*, 3, 7, "(x / y, [sceneGroupMask], [sceneLayerMask], [pickMode] ) Picks objects intersecting the specified point with optional group/layer masks.\n"
 ConsoleMethod(Scene, pickPoint, const char*, 3, 7, "(x / y, [sceneGroupMask], [sceneLayerMask], [pickMode] ) Picks objects intersecting the specified point with optional group/layer masks.\n"
               "@param x/y The coordinate of the point as either (\"x y\") or (x,y)\n"
               "@param x/y The coordinate of the point as either (\"x y\") or (x,y)\n"
-              "@param sceneGroupMask Optional scene group mask.\n"
-              "@param sceneLayerMask Optional scene layer mask.\n"
+              "@param sceneGroupMask Optional scene group mask.  (-1) or empty string selects all groups.\n"
+              "@param sceneLayerMask Optional scene layer mask.  (-1) or empty string selects all layers.\n"
               "@param pickMode Optional mode 'any', 'size' or 'collision' (default is 'size').\n"
               "@param pickMode Optional mode 'any', 'size' or 'collision' (default is 'size').\n"
               "@return Returns list of object IDs.")
               "@return Returns list of object IDs.")
 {
 {
@@ -2767,12 +2785,18 @@ ConsoleMethod(Scene, pickPoint, const char*, 3, 7, "(x / y, [sceneGroupMask], [s
     // Calculate scene group mask.
     // Calculate scene group mask.
     U32 sceneGroupMask = MASK_ALL;
     U32 sceneGroupMask = MASK_ALL;
     if ( (U32)argc > firstArg )
     if ( (U32)argc > firstArg )
-        sceneGroupMask = dAtoi(argv[firstArg]);
+    {
+        if ( *argv[firstArg] != 0 )
+            sceneGroupMask = dAtoi(argv[firstArg]);
+    }
 
 
     // Calculate scene layer mask.
     // Calculate scene layer mask.
     U32 sceneLayerMask = MASK_ALL;
     U32 sceneLayerMask = MASK_ALL;
     if ( (U32)argc > (firstArg + 1) )
     if ( (U32)argc > (firstArg + 1) )
-        sceneLayerMask = dAtoi(argv[firstArg + 1]);
+    {
+        if ( *argv[firstArg + 1] != 0 )
+            sceneLayerMask = dAtoi(argv[firstArg + 1]);
+    }
 
 
     // Calculate pick mode.
     // Calculate pick mode.
     Scene::PickMode pickMode = Scene::PICK_SIZE;
     Scene::PickMode pickMode = Scene::PICK_SIZE;