Skip to content

Commit fd963d4

Browse files
committed
Merge pull request #204 from nickelpro/fix-make-collision-less-terrible
Significantly faster collision detection
2 parents 2cff555 + c1aa1ab commit fd963d4

File tree

4 files changed

+13
-12
lines changed

4 files changed

+13
-12
lines changed

spockbot/plugins/helpers/pathfinding.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,7 @@ def raycast_bbox(self, start, end):
139139
return True
140140

141141
def get_block(self, pos):
142-
block_id, meta = self.world.get_block(*pos.vector)
143-
return blocks.get_block(block_id, meta)
142+
return blocks.get_block(*self.world.get_block(*pos))
144143

145144
def check_for_bbox(self, pos):
146145
pos = pos.floor()

spockbot/plugins/helpers/physics.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,8 @@ def physics_tick(self, _, __):
106106

107107
def get_block_slip(self):
108108
if self.pos.on_ground:
109-
block_pos = self.pos.floor()
110-
block_id, meta = self.world.get_block(
111-
block_pos.x, block_pos.y - 1, block_pos.z
112-
)
113-
return blocks.get_block(block_id, meta).slipperiness
109+
bpos = self.pos.floor()
110+
return blocks.get_block(*self.world.get_block(*bpos)).slipperiness
114111
return 1
115112

116113
def apply_accel(self):

spockbot/plugins/tools/collision.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,9 @@ def check_collision(self, pos, vector):
4040
return self.block_collision(test_pos)
4141

4242
def block_collision(self, pos):
43-
for block_pos in gen_block_set(pos):
44-
block_id, meta = self.world.get_block(
45-
block_pos.x, block_pos.y, block_pos.z
46-
)
47-
block = blocks.get_block(block_id, meta)
43+
b = (pos + self.bbox).ceil() - pos.floor()
44+
for block_pos in gen_block_set(pos, *zip((0, -1, 0), b)):
45+
block = blocks.get_block(*self.world.get_block(*block_pos))
4846
if not block.bounding_box:
4947
continue
5048
transform_vectors = []

spockbot/vector.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,17 @@ def __trunc__(self):
9494
def zero(self):
9595
self.vector = [0 for a in self]
9696

97+
def iceil(self):
98+
self.vector = [int(math.ceil(a)) for a in self]
99+
return self
100+
97101
def ifloor(self):
98102
self.vector = [int(math.floor(a)) for a in self]
99103
return self
100104

105+
def ceil(self):
106+
return self.__class__(*self).iceil()
107+
101108
def floor(self):
102109
return self.__class__(*self).ifloor()
103110

0 commit comments

Comments
 (0)