def log(self, params): if (self._widgetlog == None): self._widgetlog = WidgetLog() else: self._widgetlog.show() self._widgetlog.imprimir(params)
class Motor(object): """Representa la ventana principal de pilas. Esta clase construirá el objeto apuntado por el atributo ``pilas.motor``, asi que será el representante de todas las funcionalidades multimedia. Internamente, este motor, tratará de usar OpenGl para acelerar el dibujado en pantalla si la tarjeta de video lo soporta. """ def __init__(self, usar_motor, permitir_depuracion, audio): import sys if not '-i' in sys.argv: self._iniciar_aplicacion() self.usar_motor = usar_motor self.nombre = usar_motor self.permitir_depuracion = permitir_depuracion self._inicializar_variables() self._inicializar_sistema_de_audio(audio) # Creamos la variable para controlar la ventana de log self._widgetlog = None def _iniciar_aplicacion(self): self.app = QtGui.QApplication([]) self.app.setApplicationName("pilas") def _inicializar_variables(self): self.camara_x = 0 self.camara_y = 0 self.libreria_imagenes = LibreriaImagenes() def _inicializar_sistema_de_audio(self, audio): sistemas_de_sonido = ['deshabilitado', 'pygame', 'phonon', 'gst'] if audio not in sistemas_de_sonido: error = "El sistema de audio '%s' es invalido" % (audio) sugerencia = ". Use alguno de los siguientes: %s" % (str(sistemas_de_sonido)) raise Exception(error + sugerencia) if audio == 'gst': try: import gst except ImportError: raise Exception("Error, el sistema de audio GST (gstreamer) no esta disponible.") elif audio == 'phonon': from PyQt4 import phonon self.media = phonon.Phonon.MediaObject() self.audio = phonon.Phonon.AudioOutput(phonon.Phonon.MusicCategory) self.path = phonon.Phonon.createPath(self.media, self.audio) self.player = self.media self.clase_sonido = SonidoPhonon self.clase_musica = MusicaPhonon elif audio == 'pygame': try: import pygame pygame.mixer.init() self.player = None self.clase_sonido = SonidoPygame self.clase_musica = MusicaPygame except ImportError: raise Exception("Error, el sistema de audio pygame no esta disponible") audio = "deshabilitado" elif audio == 'gst': self.player = gst.element_factory_make("playbin2", "player") self.clase_sonido = SonidoGST self.clase_musica = MusicaGST # Si se deshabilita el sistema de sonido completo. if audio == 'deshabilitado': self.player = None self.clase_sonido = SonidoDeshabilitado self.clase_musica = MusicaDeshabilitada def terminar(self): self.ventana.close() def iniciar_ventana(self, ancho, alto, titulo, pantalla_completa, gestor_escenas, rendimiento, centrado): self.ventana = Ventana() self.ventana.resize(ancho, alto) if centrado: resolucion_pantalla = QtGui.QDesktopWidget().screenGeometry() self.ventana.move((resolucion_pantalla.width() - ancho)/2, (resolucion_pantalla.height() - alto)/2) mostrar_ventana = True if self.usar_motor == 'qtgl': self.canvas = CanvasOpenGlWidget(self, ancho, alto, gestor_escenas, self.permitir_depuracion, rendimiento) else: self.canvas = CanvasNormalWidget(self, ancho, alto, gestor_escenas, self.permitir_depuracion, rendimiento) self.ventana.set_canvas(self.canvas) self.canvas.setFocus() self.ancho_original = ancho self.alto_original = alto self.titulo = titulo self.ventana.setWindowTitle(self.titulo) if mostrar_ventana: self.ventana.show() self.ventana.raise_() if pantalla_completa: self.canvas.pantalla_completa() def modificar_ventana(self, ancho, alto, titulo, pantalla_completa): self.titulo = titulo self.ventana.setWindowTitle(self.titulo) self.canvas.original_width = ancho self.canvas.original_height = alto self.ventana.resize(ancho, alto) if pantalla_completa: self.canvas.pantalla_completa() else: self.canvas.pantalla_modo_ventana() def ocultar_puntero_del_mouse(self): self.canvas.setCursor(QtGui.QCursor(Qt.BlankCursor)) def mostrar_puntero_del_mouse(self): self.canvas.setCursor(QtGui.QCursor(Qt.ArrowCursor)) def ejecutar_bucle_principal(self): if getattr(self, 'app', None): sys.exit(self.app.exec_()) def definir_centro_de_la_camara(self, x, y): self.camara_x = x self.camara_y = y def obtener_centro_de_la_camara(self): return (self.camara_x, self.camara_y) def centro_fisico(self): "Centro de la ventana para situar el punto (0, 0)" return self.ancho_original/2, self.alto_original/2 @dev.deprecated(se_desactiva_en="0.80", se_elimina_en="0.81", reemplazo="pilas.mundo.obtener_area") def obtener_area(self): return (self.ancho_original, self.alto_original) def obtener_area_de_texto(self, cadena, magnitud=10, vertical=False, fuente=None, ancho=0): pic = QtGui.QPicture() p = QtGui.QPainter(pic) if fuente: nombre_de_fuente = Texto.cargar_fuente_desde_cache(fuente) else: nombre_de_fuente = p.font().family() font = QtGui.QFont(nombre_de_fuente, magnitud) p.setFont(font) alto = 0 if vertical: lineas = [t for t in cadena] else: lineas = cadena.split('\n') if not ancho: flags = QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop else: flags = QtCore.Qt.AlignLeft | QtCore.Qt.TextWordWrap | QtCore.Qt.AlignTop for line in lineas: if line == '': line = ' ' brect = p.drawText(QtCore.QRect(0, 0, ancho, 2000), flags, line) ancho = max(ancho, brect.width()) alto += brect.height() p.end() return (ancho, alto) def obtener_actor(self, imagen, x, y): return Actor(imagen, x, y) def obtener_texto(self, texto, magnitud, vertical=False, fuente=None, color=pilas.colores.negro, ancho=None): return Texto(texto, magnitud, self, vertical, fuente, color=color, ancho=ancho) def obtener_grilla(self, ruta, columnas, filas): return Grilla(ruta, columnas, filas) def cargar_sonido(self, ruta): return self.clase_sonido(self.player, ruta) def cargar_musica(self, ruta): return self.clase_musica(self.player, ruta) def deshabilitar_sonido(self, estado=True): self.clase_sonido.deshabilitado = estado def deshabilitar_musica(self, estado=True): self.clase_musica.deshabilitado = estado def cargar_imagen(self, ruta): #if pilas.mundo.motor.libreria_imagenes.tiene(ruta): # return pilas.mundo.motor.libreria_imagenes.obtener_imagen(ruta) #else: # return Imagen(ruta) return Imagen(ruta) def obtener_lienzo(self): return Lienzo() def obtener_superficie(self, ancho, alto): return Superficie(ancho, alto) def log(self, params): if (self._widgetlog == None): self._widgetlog = WidgetLog() else: self._widgetlog.show() self._widgetlog.imprimir(params) def capturar_pantalla(self, nombre_archivo): self.canvas.save_to_disk(nombre_archivo)
class Motor(object): """Representa la ventana principal de pilas. Esta clase construirá el objeto apuntado por el atributo ``pilas.motor``, asi que será el representante de todas las funcionalidades multimedia. Internamente, este motor, tratará de usar OpenGl para acelerar el dibujado en pantalla si la tarjeta de video lo soporta. """ def __init__(self, usar_motor, permitir_depuracion, audio): import sys if not '-i' in sys.argv: self._iniciar_aplicacion() self.usar_motor = usar_motor self.nombre = usar_motor self.permitir_depuracion = permitir_depuracion self._inicializar_variables() self._inicializar_sistema_de_audio(audio) # Creamos la variable para controlar la ventana de log self._widgetlog = None def _iniciar_aplicacion(self): self.app = QtGui.QApplication([]) self.app.setApplicationName("pilas") def _inicializar_variables(self): self.camara_x = 0 self.camara_y = 0 self.libreria_imagenes = LibreriaImagenes() def _inicializar_sistema_de_audio(self, audio): sistemas_de_sonido = ['deshabilitado', 'pygame', 'phonon', 'gst'] if audio not in sistemas_de_sonido: error = "El sistema de audio '%s' es invalido" % (audio) sugerencia = ". Use alguno de los siguientes: %s" % ( str(sistemas_de_sonido)) raise Exception(error + sugerencia) if audio == 'gst': try: import gst except ImportError: raise Exception( "Error, el sistema de audio GST (gstreamer) no esta disponible." ) elif audio == 'phonon': from PyQt4 import phonon self.media = phonon.Phonon.MediaObject() self.audio = phonon.Phonon.AudioOutput(phonon.Phonon.MusicCategory) self.path = phonon.Phonon.createPath(self.media, self.audio) self.player = self.media self.clase_sonido = SonidoPhonon self.clase_musica = MusicaPhonon elif audio == 'pygame': try: import pygame pygame.mixer.init() self.player = None self.clase_sonido = SonidoPygame self.clase_musica = MusicaPygame except ImportError: raise Exception( "Error, el sistema de audio pygame no esta disponible") audio = "deshabilitado" elif audio == 'gst': self.player = gst.element_factory_make("playbin2", "player") self.clase_sonido = SonidoGST self.clase_musica = MusicaGST # Si se deshabilita el sistema de sonido completo. if audio == 'deshabilitado': self.player = None self.clase_sonido = SonidoDeshabilitado self.clase_musica = MusicaDeshabilitada def terminar(self): self.ventana.close() def iniciar_ventana(self, ancho, alto, titulo, pantalla_completa, gestor_escenas, rendimiento, centrado): self.ventana = Ventana() self.ventana.resize(ancho, alto) if centrado: resolucion_pantalla = QtGui.QDesktopWidget().screenGeometry() self.ventana.move((resolucion_pantalla.width() - ancho) / 2, (resolucion_pantalla.height() - alto) / 2) mostrar_ventana = True if self.usar_motor == 'qtgl': self.canvas = CanvasOpenGlWidget(self, ancho, alto, gestor_escenas, self.permitir_depuracion, rendimiento) else: self.canvas = CanvasNormalWidget(self, ancho, alto, gestor_escenas, self.permitir_depuracion, rendimiento) self.ventana.set_canvas(self.canvas) self.canvas.setFocus() self.ancho_original = ancho self.alto_original = alto self.titulo = titulo self.ventana.setWindowTitle(self.titulo) if mostrar_ventana: self.ventana.show() self.ventana.raise_() if pantalla_completa: self.canvas.pantalla_completa() def modificar_ventana(self, ancho, alto, titulo, pantalla_completa): self.titulo = titulo self.ventana.setWindowTitle(self.titulo) self.canvas.original_width = ancho self.canvas.original_height = alto self.ventana.resize(ancho, alto) if pantalla_completa: self.canvas.pantalla_completa() else: self.canvas.pantalla_modo_ventana() def ocultar_puntero_del_mouse(self): self.canvas.setCursor(QtGui.QCursor(Qt.BlankCursor)) def mostrar_puntero_del_mouse(self): self.canvas.setCursor(QtGui.QCursor(Qt.ArrowCursor)) def ejecutar_bucle_principal(self): if getattr(self, 'app', None): sys.exit(self.app.exec_()) def definir_centro_de_la_camara(self, x, y): self.camara_x = x self.camara_y = y def obtener_centro_de_la_camara(self): return (self.camara_x, self.camara_y) def centro_fisico(self): "Centro de la ventana para situar el punto (0, 0)" return self.ancho_original / 2, self.alto_original / 2 @dev.deprecated(se_desactiva_en="0.80", se_elimina_en="0.81", reemplazo="pilas.mundo.obtener_area") def obtener_area(self): return (self.ancho_original, self.alto_original) def obtener_area_de_texto(self, cadena, magnitud=10, vertical=False, fuente=None, ancho=0): pic = QtGui.QPicture() p = QtGui.QPainter(pic) if fuente: nombre_de_fuente = Texto.cargar_fuente_desde_cache(fuente) else: nombre_de_fuente = p.font().family() font = QtGui.QFont(nombre_de_fuente, magnitud) p.setFont(font) alto = 0 if vertical: lineas = [t for t in cadena] else: lineas = cadena.split('\n') if not ancho: flags = QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop else: flags = QtCore.Qt.AlignLeft | QtCore.Qt.TextWordWrap | QtCore.Qt.AlignTop for line in lineas: if line == '': line = ' ' brect = p.drawText(QtCore.QRect(0, 0, ancho, 2000), flags, line) ancho = max(ancho, brect.width()) alto += brect.height() p.end() return (ancho, alto) def obtener_actor(self, imagen, x, y): return Actor(imagen, x, y) def obtener_texto(self, texto, magnitud, vertical=False, fuente=None, color=pilas.colores.negro, ancho=None): return Texto(texto, magnitud, self, vertical, fuente, color=color, ancho=ancho) def obtener_grilla(self, ruta, columnas, filas): return Grilla(ruta, columnas, filas) def cargar_sonido(self, ruta): return self.clase_sonido(self.player, ruta) def cargar_musica(self, ruta): return self.clase_musica(self.player, ruta) def deshabilitar_sonido(self, estado=True): self.clase_sonido.deshabilitado = estado def deshabilitar_musica(self, estado=True): self.clase_musica.deshabilitado = estado def cargar_imagen(self, ruta): #if pilas.mundo.motor.libreria_imagenes.tiene(ruta): # return pilas.mundo.motor.libreria_imagenes.obtener_imagen(ruta) #else: # return Imagen(ruta) return Imagen(ruta) def obtener_lienzo(self): return Lienzo() def obtener_superficie(self, ancho, alto): return Superficie(ancho, alto) def log(self, params): if (self._widgetlog == None): self._widgetlog = WidgetLog() else: self._widgetlog.show() self._widgetlog.imprimir(params) def capturar_pantalla(self, nombre_archivo): self.canvas.save_to_disk(nombre_archivo)