Advertisement
Tyler_Elric

pkengine.py

Mar 3rd, 2013
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.10 KB | None | 0 0
  1. import pygame
  2.  
  3. class EngineObject:
  4.     def __init__(self):
  5.         self.children=[]
  6.         self.running=False
  7.     def prepare(self):pass
  8.     def finalize(self):pass
  9.     def pre_frame(self):pass
  10.     def post_frame(self):pass
  11.     def __iter__(self):
  12.         print(type(self).__name__,"Beginning iteration.")
  13.         if not self.running:
  14.             self.prepare()
  15.             self.running=True
  16.         return self
  17.     def __next__(self):
  18.         self.pre_frame()
  19.         for child in self.children[:]:
  20.             try:
  21.                 next(child)
  22.             except StopIteration:
  23.                 self.children.remove(child)
  24.         self.post_frame()
  25.         if not self.running:
  26.             self.finalize()
  27.             raise StopIteration
  28.  
  29. class GameObject(EngineObject):
  30.     def __init__(self, engine):
  31.         EngineObject.__init__(self)
  32.         self.engine = engine
  33.  
  34. class Timer(EngineObject):
  35.     def __init__(self,dur,repeat=False):
  36.         self.duration, self.elapse = dur, 0
  37.         self.repeat = repeat
  38.         self.timer = pygame.time.Clock()
  39.     def pre_frame(self):
  40.         self.elapse += self.timer.tick()
  41.     def post_frame(self):
  42.         if self.elapse >= self.duration:
  43.             self.elapse()
  44.             if self.repeat:
  45.                 self.elapse = self.elapse % self.duration
  46.             else:
  47.                 self.running = False
  48.     def elapse(self):pass
  49.  
  50. class Intro(GameObject):
  51.     class FadeTimer(Timer):
  52.         def __init__(self):Timer.__init__(self, 200, True)
  53.         def prepare(self):self.color = 0
  54.         def elapse(self):self.color = self.color + 1 % 256
  55.     def prepare(self):
  56.         #Load any images, fonts, etc.
  57.         print("INTRO.PREPARE")
  58.         self.timer = self.Timer()
  59.     def pre_frame(self):
  60.         self.engine.window.fill([self.timer.color]*3)
  61.  
  62. class PKEngine(EngineObject):
  63.     frame_rate = 30#30 fps should be good, no?
  64.     resolution = (320, 240)
  65.     def __init__(self):
  66.         EngineObject.__init__(self)
  67.         self.frame_limiter = pygame.time.Clock()
  68.    
  69.     def prepare(self):
  70.         print("PKENGINE.PREPARE")
  71.         pygame.display.init()
  72.         self.window = pygame.display.set_mode(self.resolution)
  73.         self.children.append(Intro(self))
  74.  
  75.     def finalize(self):
  76.         pygame.quit()
  77.  
  78.     def post_frame(self):
  79.         self.window.update()
  80.         self.frame_limiter(self.frame_rate)
  81.         if len(self.children)<1:
  82.             self.running = False
  83.  
  84. engine = PKEngine()
  85. for frame in engine:pass
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement