[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