# -*- coding: utf-8 -*- import gc import gtk import pygame #import pygame.font #import pygame.display #import pygame.sprite from api.Sprite2 import CSprite from api.Mouse import CMouse from PartidasMan import getPartidasFromFile from PartidasMan import setPartidasToFile from gettext import gettext as _ import Image class CGame(object): mInstance = None def __new__(self, *args, **kargs): if (self.mInstance is None): self.mInstance = object.__new__(self, *args, **kargs) 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 gc.collect() #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 #save data setPartidasToFile(self.mPartidaDict) pygame.mouse.set_visible(True) # destroy pygame pygame.quit() print "destroy Game" def init(self): print "initing game..." pygame.init() #pygame.display.init() #pygame.font.init() self.mState = None self.mScale = 1 self.mWidth = 1200 self.mHeight = 900 self.mScreen = pygame.display.get_surface() if not(self.mScreen): info = pygame.display.Info() width = info.current_w height = info.current_h if width/1200.0 < height/900.0: self.mScale = width/1200.0 self.mWidth = width self.mHeight = int(900 * self.mScale) else: self.mScale = height/900.0 self.mHeight = height self.mWidth = int(1200 * self.mScale) self.mScreen = pygame.display.set_mode((self.mWidth, self.mHeight), pygame.FULLSCREEN) pygame.display.set_caption(_('JES')) self.window = pygame.Surface((1200, 900), 0, self.mScreen) else: self.window = self.mScreen self.mBackground = pygame.Surface(self.window.get_size()) self.mBackground.fill((255, 0, 0)) # Sound system initialization. #pygame.mixer.init() #self.mAllSprites = pygame.sprite.Group() self.mAllSprites = pygame.sprite.LayeredUpdates() pygame.mouse.set_visible(False) self.mMouse = CMouse() self.mMouse.set_scale(self.mScale) self.mMousePointerSprite = CSprite() self.mMousePointerSprite.setImage(Image.loadImage('assets/images/cursor.png', True)) #insert mouse pointer at layer 5 self.addChild(self.mMousePointerSprite, 5) self.window.blit(self.mBackground, (0, 0)) self.mClock = pygame.time.Clock() self.mQuit = False self.mPartidaDict = getPartidasFromFile() self.mCurrentPartida = 1 def gameLoop(self): print "starting game.." 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 == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: self.mQuit = True self.mMouse.update() self.mMousePointerSprite.setPosTuple(self.mMouse.getPos()) self.mState.update() self.mAllSprites.clear(self.window, self.mBackground) self.mAllSprites.update() self.mAllSprites.draw(self.window) if not(self.mScale == 1): scaled = pygame.transform.scale(self.window, (self.mWidth, self.mHeight)) self.mScreen.blit(scaled, (0, 0)) pygame.display.flip() self.mClock.tick(30) #print ("FPS: %.0f" % self.mClock.get_fps()) # Add a sprite to the sprite list. def addChild(self, aSprite, aLayer=0): #if not(aSprite in self.mAllSprites): #self.mAllSprites.remove(self.mMousePointerSprite) self.mAllSprites.add(aSprite, layer=aLayer) #self.mAllSprites.move_to_front(self.mMousePointerSprite) #self.mAllSprites.add(self.mMousePointerSprite, layer=5) def removeChild(self, aSprite): #if (aSprite in self.mAllSprites): self.mAllSprites.remove(aSprite) def setCharacter(self, par, name): #print self.mPartidaDict.keys() self.mPartidaDict[par].setCharacter(name) #print 'Personaje ', name, ' asignado a partida ', par def getCharacter(self, par): return self.mPartidaDict[par].getCharacter() def getPartida(self, n): #print self.mPartidaDict.keys() if self.mPartidaDict.has_key(n): return self.mPartidaDict[n] else: return None def getCurrentPartida(self): return self.mCurrentPartida def setCurrentPartida(self, n): self.mCurrentPartida = n def setPartida(self, n, p): self.mPartidaDict[n] = p def setBackground(self, aBackgroundImage): self.mBackground = aBackgroundImage self.blitBackground(self.mBackground) def blitBackground(self, aBackgroundImage): self.window.blit(aBackgroundImage, (0, 0))