Exemplo n.º 1
0
class World(object):

    def __init__(self, root_layer, camera_config, gravity=(0, 0, 0)):
        self._camera = Camera(
            target=camera_config['target'],
            width=camera_config['width'],
            rect=camera_config['rect'],
            limits=camera_config['limits'],
        )
        self._root_layer = root_layer
        self._chunks = []
        worldAABB = b2AABB()
        worldAABB.lowerBound = (-1000, -1000)
        worldAABB.upperBound = (1000, 1000)
        gravity_x, gravity_y = gravity
        gravity = b2Vec2(gravity_x, gravity_y)
        self._box2d_world = b2World(worldAABB, gravity, True)
        self._contact_listener = ContactListener()
        self._box2d_world.SetContactListener(self._contact_listener)
        self._remove_list = []

    def _remove(self, chunk):
        if chunk._body:
            chunk._body.userData = None
            self._box2d_world.DestroyBody(chunk._body)
            chunk._body = None

    def remove(self, chunk):
        self._remove_list.append(chunk)
        self._root_layer.remove(chunk)
        self._root_layer.remove_layer(chunk.layer())

    def add(self, chunk, slot):
        chunk.set_camera(self._camera)
        chunk.append_to_world(self._box2d_world)
        chunk.set_user_data()
        self._chunks.append(chunk)
        self._root_layer.add_layer(chunk.layer(), slot)
        self._root_layer.add(chunk)

    def step(self, delta):
        for chunk in self._remove_list:
            self._remove(chunk)
        self._remove_list = []
        self._box2d_world.Step(delta, 8, 1)
        self._camera.update()
        for chunk in self._chunks:
            chunk.update()

    def camera(self):
        return self._camera
Exemplo n.º 2
0
 def __init__(self, root_layer, camera_config, gravity=(0, 0, 0)):
     self._camera = Camera(
         target=camera_config['target'],
         width=camera_config['width'],
         rect=camera_config['rect'],
         limits=camera_config['limits'],
     )
     self._root_layer = root_layer
     self._chunks = []
     worldAABB = b2AABB()
     worldAABB.lowerBound = (-1000, -1000)
     worldAABB.upperBound = (1000, 1000)
     gravity_x, gravity_y = gravity
     gravity = b2Vec2(gravity_x, gravity_y)
     self._box2d_world = b2World(worldAABB, gravity, True)
     self._contact_listener = ContactListener()
     self._box2d_world.SetContactListener(self._contact_listener)
     self._remove_list = []