예제 #1
0
    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()
예제 #2
0
    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()
예제 #3
0
 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
예제 #4
0
 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