# -*- coding: utf-8 -*- import gc import gtk import pygame #from pygame.locals import * import pygame.font import pygame.display import pygame.sprite from pygame.locals import * import api.SuperSprite from SuperSprite import CSuperSprite import api.Sprite from api.Sprite import CSprite from api.Mouse import CMouse from gettext import gettext as _ import Image class CGame(object): mInstance = None mState = None mScreen = None mBackground = None mAllSprites = None mMousePointerSprite = None mMouse = None mGroups = None mMainSprites = None mClock = None mQuit = False mCharacter = 'Juan' def __new__(self, *args, **kargs): if (self.mInstance is None): self.mInstance = object.__new__(self, *args, **kargs) #self.setState(self.mInstance, aState) self.init(self.mInstance) #else: # print "Warning: CGame(): You are not allowed to instantiate it more than once." return self.mInstance def inst(self): return self.mInstance def setState(self, aState): if (self.mState != None): self.mState.destroy() self.mState = None print gc.collect(), " deleted objects" self.mState = aState self.mState.init() def destroy(self): if (self.mState != None): self.mState.destroy() self.mState = None self.mMouse.destroy() self.mBackground = None self.mMousePointerSprite.destroy() self.mMousePointerSprite = None self.mInstance = None # destroy pygame #pygame.quit() pygame.mouse.set_visible(True) print "destroy" def init(self): print "init pygame..." pygame.init() #pygame.display.init() #pygame.font.init() #screen = pygame.display.set_mode((1200, 900), FULLSCREEN) self.mScreen = pygame.display.get_surface() if not(self.mScreen): self.mScreen = pygame.display.set_mode((1200, 900)) pygame.display.set_caption(_('Game')) self.mBackground = pygame.Surface(self.mScreen.get_size()) self.mBackground.fill((255, 0, 0)) # Sound system initialization. #pygame.mixer.init() #self.mAllSprites = pygame.sprite.Group() Sprites = [] self.mAllSprites = pygame.sprite.LayeredUpdates(Sprites) pygame.mouse.set_visible(False) self.mMouse = CMouse() self.mMousePointerSprite = CSprite() self.mMousePointerSprite.setImage(Image.loadImage('assets/images/cursor.png', True)) self.addChild(self.mMousePointerSprite) self.mScreen.blit(self.mBackground, (0, 0)) self.mClock = pygame.time.Clock() self.mQuit = False def gameLoop(self): print "start game loop here" while not self.mQuit: while gtk.events_pending(): gtk.main_iteration() for event in pygame.event.get(): if event.type == pygame.QUIT: self.mQuit = True elif event.type == KEYDOWN: if event.key == K_ESCAPE: self.mQuit = True #self.doEvents(event) self.mMouse.update() self.mMousePointerSprite.setXY(self.mMouse.getX(), self.mMouse.getY()) #self.mState.preUpdate() self.mState.update() self.mAllSprites.clear(self.mScreen, self.mBackground) self.mAllSprites.update() self.mAllSprites.draw(self.mScreen) #for group in self.mAllSprites: # group.clear(self.mScreen, self.mBackground) # group.update() # group.draw(self.mScreen) #self.mState.postUpdate() pygame.display.flip() self.mClock.tick(30) #print ("FPS: %.0f" % self.mClock.get_fps()) def doEvents(self, event): """ overwrite this method to add your own events. works like normal event handling, passes event object """ pass # def setSprites(self, aSpritesArray): # self.mSprites = aSpritesArray #self.mGroups = [] #self.mMainSprites = pygame.sprite.OrderedUpdates(self.mSprites) #self.mGroups.append(self.mMainSprites) # Add a sprite to the sprite list. def addChild(self, aSprite, aLayer=0): self.mAllSprites.remove(self.mMousePointerSprite) self.mAllSprites.add(aSprite, layer=aLayer) self.mAllSprites.add(self.mMousePointerSprite) def removeChild(self, aSprite): self.mAllSprites.remove(aSprite) def setCharacter(self, name): self.mCharacter = name print self.mCharacter def getCharacter(self): return self.mCharacter def setBackground(self, aBackgroundImage): #self.mBackground = None self.mBackground = aBackgroundImage self.blitBackground(self.mBackground) def blitBackground(self, aBackgroundImage): self.mScreen.blit(aBackgroundImage, (0, 0))