class World: def __init__(self,width=500,height=400,color="white",title="Simulated World"): self._canvas = Canvas(width,height,color,title) self._canvas.setAutoRefresh(False) self._star = None self._controller = None self._timestamp = 0 def getWidth(self): return self._canvas.getWidth() def getHeight(self): return self._canvas.getHeight() def setController(self,controller): self._controller = controller def getGravity(self): if self._controller: return self._controller.getGravity() else: return 0.0 def getStar(self): return self._star def _setStar(self,star): if (self._star): self._canvas.remove(star) self._star = star star.setDepth(0) self._canvas.add(star) self._canvas.refresh() def add(self,updatable): try: updatable.advance # note this is not a call, just a check to see if advance exists except: raise StandardError, "You may only add objects which support an appropriate 'advance' method" self._timestamp += 1 updatable.setDepth(self._timestamp) self._canvas.add(updatable) self._canvas.refresh() def remove(self, obj): self._canvas.remove(obj) def numObj(self): return len(self._canvas.getContents()) def _mainloop(self): more = True while more: # global debug # if debug: # print "within world's mainloop" objects = self._canvas.getContents() # latest list of objects for obj in objects: obj.advance(self) self._canvas.refresh() if self._controller: more = self._controller.processDelay(self)