class WorldSimulator(BasicGame): ''' Simulates a collection of GameObjects and Subsystems in a game world. ''' updatables = [] def __init__( self, mapName, gravity, worldSize, layers, renderCallable): BasicGame.__init__(self, name) print 'new WorldSimulator' assert ( isinstance(gravity, int), 'WorldSimulator : Gravity is not an integer!') assert isinstance(worldSize, CWorldSize) assert callable(renderCallable) self.world = World(Vec2(0, gravity)) # Gravity has a vertical AND a horizontal value self.playerMovement = PlayerMovement() self.gravityMan = GravityManager(gravity) self.boundsChecker = BoundsChecker(worldSize) self._sortLayers(layers) self.layerPainter = LayerPainter( self.renderLayers, renderCallable) self.animPainter = AnimPainter() self.imagePainter = ImagePainter() self._registerObjects() def _sortLayers(self, layers): for l in layers: assert isinstance(l, GameLayer) self.renderLayers = [] for l in layers: if l.name != TMXParser.COLLISION_INDEX_NAME: self.renderLayers += [l] else: self.collisionIndex = l.index self.updateLayers = [ l for l in layers if l.objects != [] ] self.allLayers = layers def _registerObjects(self): ''' Hooks up GameObjects to the required Subsystems. ''' print 'TODO Simulator._registerObjects' for layer in self.updateLayers: for o in layer.objects: pass def update(self): print 'World Simulator.update' def _updateGameObjects(self): ''' Updates all GameObjects, by layer. ''' print 'WorldSimulator._updateGameObjects' for u in self.updateLayers: for o in u.objects: o.update() def render(self, graphics): ''' Renders the World. ''' print 'WorldSimulator.render' self.layerPainter.draw(graphics)