[Bf-extensions-cvs] [40ab3cd] master: Fix for invalid list assignment when popping the last cell from a level.

Lukas Tönne noreply at git.blender.org
Sat Dec 13 12:43:01 CET 2014


Commit: 40ab3cd5e065fe14bbb2ca6bc5383d04520d6f5d
Author: Lukas Tönne
Date:   Sat Dec 13 12:41:57 2014 +0100
Branches: master
https://developer.blender.org/rBAC40ab3cd5e065fe14bbb2ca6bc5383d04520d6f5d

Fix for invalid list assignment when popping the last cell from a level.

Also fixed a potential float rounding error giving invalid index.

===================================================================

M	object_physics_meadow/hierarchical_dart_throw.py

===================================================================

diff --git a/object_physics_meadow/hierarchical_dart_throw.py b/object_physics_meadow/hierarchical_dart_throw.py
index f84fec9..a58ece2 100644
--- a/object_physics_meadow/hierarchical_dart_throw.py
+++ b/object_physics_meadow/hierarchical_dart_throw.py
@@ -56,7 +56,10 @@ class GridLevel():
 
     def deactivate(self, index):
         c = self.cells[index]
-        self.cells[index] = self.cells.pop()
+        if index < len(self.cells)-1:
+            self.cells[index] = self.cells.pop()
+        else:
+            self.cells.pop()
         return c
 
     def cell_corners(self, cell):
@@ -93,7 +96,9 @@ def pop_cell(levels):
     for level in levels:
         level_totweight = len(level.cells) * level.weight
         if u < level_totweight:
-            cell_index = int(u / level.weight)
+            # Note: using int(u / level.weight) as cell index works in theory,
+            # but rounding errors can cause an invalid index >= len(level.cells)
+            cell_index = random.randrange(len(level.cells))
             cell = level.deactivate(cell_index)
             return level, cell
         else:



More information about the Bf-extensions-cvs mailing list