def modify_quads_around_point(self, brush, type=0, node=None): """ This is the main terrain deformation routine. """ node = node or self.root # if node.type == type and not node.children: # rect is already where it needs to be # return if collision.rect_within_circle(node.rect, brush): # rect completely within circle node.combine() node.type = type node.slope = 0 elif collision.rect_vs_circle(node.rect, brush): # rect partially within circle if node.level >= self.max_level: self.find_slopes(node, brush, type) else: if not node.children: node.subdivide() for c in node.children: self.modify_quads_around_point(brush, type, node=c) node.simplify()
def collide_circle(self, circle, node=None): """ Collision detection helper that can recursively generate a list of nodes """ node = node or self.root nodes = [] if collision.rect_vs_circle(node.rect, circle): if node.children: for c in node.children: nodes += self.collide_circle(circle, node=c) elif node.type != 0: return [node] return nodes