コード例 #1
0
    def __init__(self, pilas):
        self.pilas = pilas
        pilas.log("Creando una escena: ", self)
        self.camara = camara.Camara(pilas, self)
        self.tweener = pitweener.Tweener()
        self._actores = grupo.Grupo(pilas)
        self.grupos = []

        self.mueve_camara = self.pilas.eventos.Evento(
            'mueve_camara')  # ['x', 'y', 'dx', 'dy']
        self.mueve_mouse = self.pilas.eventos.Evento(
            'mueve_mouse')  # ['x', 'y', 'dx', 'dy']
        self.click_de_mouse = self.pilas.eventos.Evento(
            'click_de_mouse')  # ['boton', 'x', 'y']
        self.termina_click = self.pilas.eventos.Evento(
            'termina_click')  # ['boton', 'x', 'y']
        self.mueve_rueda = self.pilas.eventos.Evento(
            'mueve_rueda')  # ['delta']
        self.pulsa_tecla = self.pilas.eventos.Evento(
            'pulsa_tecla')  # ['codigo', 'texto']
        self.suelta_tecla = self.pilas.eventos.Evento(
            'suelta_tecla')  # ['codigo', 'texto']
        self.pulsa_tecla_escape = self.pilas.eventos.Evento(
            'pulsa_tecla_escape')  #['']
        self.cuando_actualiza = self.pilas.eventos.Evento('actualizar')  #['']

        self.control = self.pilas.control.Control(self)
        self.tareas = Tareas(self)
        self.fisica = Fisica(self, pilas)
        self.fisica.iniciar()
コード例 #2
0
    def __init__(self, pilas):
        if not pilas:
            mensaje = "Ten cuidado, tienes que enviar 'pilas' como argumento de la escena al crearla."
            raise Exception(mensaje)

        if not isinstance(pilas, pilasengine.Pilas):
            mensaje = "Tienes que enviar el objeto 'pilas' como argumento a la escena al crearla, en lugar de eso llego esto: " + str(
                pilas)
            raise Exception(mensaje)

        self.pilas = pilas

        nombre_de_la_escena = self.__class__.__name__

        if not self.pilas.escenas.es_escena_vinculada(nombre_de_la_escena):
            raise Exception(
                "La escena %s no ha sido vinculada. Ejecuta con pilas.escenas.vincular(%s) antes."
                % (nombre_de_la_escena, nombre_de_la_escena))

        pilas.log("Creando una escena: ", self)
        self.camara = camara.Camara(pilas, self)
        self.tweener = pitweener.Tweener()
        self._actores = grupo.Grupo(pilas)
        self.grupos = []

        self.mueve_camara = self.pilas.eventos.Evento(
            'mueve_camara')  # ['x', 'y', 'dx', 'dy']
        self.mueve_mouse = self.pilas.eventos.Evento(
            'mueve_mouse')  # ['x', 'y', 'dx', 'dy']
        self.click_de_mouse = self.pilas.eventos.Evento(
            'click_de_mouse')  # ['boton', 'x', 'y']
        self.termina_click = self.pilas.eventos.Evento(
            'termina_click')  # ['boton', 'x', 'y']
        self.mueve_rueda = self.pilas.eventos.Evento(
            'mueve_rueda')  # ['delta']
        self.pulsa_tecla = self.pilas.eventos.Evento(
            'pulsa_tecla')  # ['codigo', 'texto']
        self.suelta_tecla = self.pilas.eventos.Evento(
            'suelta_tecla')  # ['codigo', 'texto']
        self.pulsa_tecla_escape = self.pilas.eventos.Evento(
            'pulsa_tecla_escape')  #['']
        self.cuando_actualiza = self.pilas.eventos.Evento('actualizar')  #['']
        self.pulsa_boton = self.pilas.eventos.Evento(
            'pulsa_boton')  #['numero']
        self.mueve_pad = self.pilas.eventos.Evento(
            'mueve_pad')  #['x', 'y', 'x1', 'y1']

        self.control = self.pilas.controles.Control(self)
        self.tareas = Tareas(self, pilas)
        self.fisica = Fisica(self, pilas)
        self.fisica.iniciar()
        self.colisiones = Colisiones(pilas, self)

        self.click_de_mouse.conectar(self.arrastrar_actor_mas_cercano)
コード例 #3
0
    def __init__(self, pilas):
        self.pilas = pilas
        pilas.log("Creando una escena: ", self)
        self.camara = camara.Camara(pilas, self)
        self.tweener = pitweener.Tweener()
        self._actores = grupo.Grupo(pilas)
        self.grupos = []

        self.mueve_camara = self.pilas.eventos.Evento('mueve_camara')       # ['x', 'y', 'dx', 'dy']
        self.mueve_mouse = self.pilas.eventos.Evento('mueve_mouse')         # ['x', 'y', 'dx', 'dy']
        self.click_de_mouse = self.pilas.eventos.Evento('click_de_mouse')   # ['boton', 'x', 'y']
        self.termina_click = self.pilas.eventos.Evento('termina_click')     # ['boton', 'x', 'y']
        self.mueve_rueda = self.pilas.eventos.Evento('mueve_rueda')         # ['delta']
        self.pulsa_tecla = self.pilas.eventos.Evento('pulsa_tecla')         # ['codigo', 'texto']
        self.suelta_tecla = self.pilas.eventos.Evento('suelta_tecla')       # ['codigo', 'texto']
        self.pulsa_tecla_escape = self.pilas.eventos.Evento('pulsa_tecla_escape') #['']
        self.cuando_actualiza = self.pilas.eventos.Evento('actualizar')     #['']
        self.pulsa_boton = self.pilas.eventos.Evento('pulsa_boton')         #['numero']
        self.mueve_pad = self.pilas.eventos.Evento('mueve_pad')         #['x', 'y', 'x1', 'y1']

        self.control = self.pilas.control.Control(self)
        self.tareas = Tareas(self, pilas)
        self.fisica = Fisica(self, pilas)
        self.fisica.iniciar()
        self.colisiones = Colisiones(pilas, self)
コード例 #4
0
    def __init__(self, pilas):
        if not pilas:
            mensaje = "Ten cuidado, tienes que enviar 'pilas' como argumento de la escena al crearla."
            raise Exception(mensaje)

        if not isinstance(pilas, pilasengine.Pilas):
            mensaje = "Tienes que enviar el objeto 'pilas' como argumento a la escena al crearla, en lugar de eso llego esto: " + str(pilas)
            raise Exception(mensaje)
        
        self.pilas = pilas
        pilas.log("Creando una escena: ", self)
        self.camara = camara.Camara(pilas, self)
        self.tweener = pitweener.Tweener()
        self._actores = grupo.Grupo(pilas)
        self.grupos = []

        self.mueve_camara = self.pilas.eventos.Evento('mueve_camara')       # ['x', 'y', 'dx', 'dy']
        self.mueve_mouse = self.pilas.eventos.Evento('mueve_mouse')         # ['x', 'y', 'dx', 'dy']
        self.click_de_mouse = self.pilas.eventos.Evento('click_de_mouse')   # ['boton', 'x', 'y']
        self.termina_click = self.pilas.eventos.Evento('termina_click')     # ['boton', 'x', 'y']
        self.mueve_rueda = self.pilas.eventos.Evento('mueve_rueda')         # ['delta']
        self.pulsa_tecla = self.pilas.eventos.Evento('pulsa_tecla')         # ['codigo', 'texto']
        self.suelta_tecla = self.pilas.eventos.Evento('suelta_tecla')       # ['codigo', 'texto']
        self.pulsa_tecla_escape = self.pilas.eventos.Evento('pulsa_tecla_escape') #['']
        self.cuando_actualiza = self.pilas.eventos.Evento('actualizar')     #['']
        self.pulsa_boton = self.pilas.eventos.Evento('pulsa_boton')         #['numero']
        self.mueve_pad = self.pilas.eventos.Evento('mueve_pad')         #['x', 'y', 'x1', 'y1']

        self.control = self.pilas.controles.Control(self)
        self.tareas = Tareas(self, pilas)
        self.fisica = Fisica(self, pilas)
        self.fisica.iniciar()
        self.colisiones = Colisiones(pilas, self)

        self.click_de_mouse.conectar(self.arrastrar_actor_mas_cercano)
コード例 #5
0
class Escena(object):

    def __init__(self, pilas):
        self.pilas = pilas
        pilas.log("Creando una escena: ", self)
        self.camara = camara.Camara(pilas, self)
        self.tweener = pitweener.Tweener()
        self._actores = grupo.Grupo(pilas)
        self.grupos = []

        self.mueve_camara = self.pilas.eventos.Evento('mueve_camara')       # ['x', 'y', 'dx', 'dy']
        self.mueve_mouse = self.pilas.eventos.Evento('mueve_mouse')         # ['x', 'y', 'dx', 'dy']
        self.click_de_mouse = self.pilas.eventos.Evento('click_de_mouse')   # ['boton', 'x', 'y']
        self.termina_click = self.pilas.eventos.Evento('termina_click')     # ['boton', 'x', 'y']
        self.mueve_rueda = self.pilas.eventos.Evento('mueve_rueda')         # ['delta']
        self.pulsa_tecla = self.pilas.eventos.Evento('pulsa_tecla')         # ['codigo', 'texto']
        self.suelta_tecla = self.pilas.eventos.Evento('suelta_tecla')       # ['codigo', 'texto']
        self.pulsa_tecla_escape = self.pilas.eventos.Evento('pulsa_tecla_escape') #['']
        self.cuando_actualiza = self.pilas.eventos.Evento('actualizar')     #['']
        self.pulsa_boton = self.pilas.eventos.Evento('pulsa_boton')         #['numero']
        self.mueve_pad = self.pilas.eventos.Evento('mueve_pad')         #['x', 'y', 'x1', 'y1']

        self.control = self.pilas.control.Control(self)
        self.tareas = Tareas(self, pilas)
        self.fisica = Fisica(self, pilas)
        self.fisica.iniciar()
        self.colisiones = Colisiones(pilas, self)

    def iniciar(self):
        pass

    def actualizar(self):
        pass

    def terminar(self):
        pass

    def actualizar_fisica(self):
        self.fisica.actualizar()

    def actualizar_interpolaciones(self, tiempo_desde_ultima_actualizacion=None):
        self.tweener.update(tiempo_desde_ultima_actualizacion)

    def obtener_cantidad_de_actores(self):
        return len(self._actores.obtener_actores())

    def actualizar_actores(self):
        self.pilas.pad.actualizar()
        for x in self._actores.obtener_actores():
            x.pre_actualizar()
            x.actualizar()

    def dibujar_actores(self, painter):
        painter.save()

        self.camara.aplicar_transformaciones_completas(painter)

        for x in self._actores.obtener_actores(fijos=False, sin_padre=True):
            x.dibujar(painter)

        painter.restore()

        painter.save()
        self.camara.aplicar_translacion(painter)

        for x in self._actores.obtener_actores(fijos=True, sin_padre=True):
            x.dibujar(painter)

        painter.restore()

    def agregar_actor(self, actor):
        self._actores.agregar(actor)

    def agregar_grupo(self, grupo):
        self.grupos.append(grupo)

    def obtener_actores_en(self, x, y):
        actores = []

        for actor in self._actores.obtener_actores():
            if actor.colisiona_con_un_punto(x, y):
                actores.append(actor)

        return actores
コード例 #6
0
class Escena(object):
    def __init__(self, pilas):
        self.pilas = pilas
        pilas.log("Creando una escena: ", self)
        self.camara = camara.Camara(pilas, self)
        self.tweener = pitweener.Tweener()
        self._actores = grupo.Grupo(pilas)
        self.grupos = []

        self.mueve_camara = self.pilas.eventos.Evento(
            'mueve_camara')  # ['x', 'y', 'dx', 'dy']
        self.mueve_mouse = self.pilas.eventos.Evento(
            'mueve_mouse')  # ['x', 'y', 'dx', 'dy']
        self.click_de_mouse = self.pilas.eventos.Evento(
            'click_de_mouse')  # ['boton', 'x', 'y']
        self.termina_click = self.pilas.eventos.Evento(
            'termina_click')  # ['boton', 'x', 'y']
        self.mueve_rueda = self.pilas.eventos.Evento(
            'mueve_rueda')  # ['delta']
        self.pulsa_tecla = self.pilas.eventos.Evento(
            'pulsa_tecla')  # ['codigo', 'texto']
        self.suelta_tecla = self.pilas.eventos.Evento(
            'suelta_tecla')  # ['codigo', 'texto']
        self.pulsa_tecla_escape = self.pilas.eventos.Evento(
            'pulsa_tecla_escape')  #['']
        self.cuando_actualiza = self.pilas.eventos.Evento('actualizar')  #['']

        self.control = self.pilas.control.Control(self)
        self.tareas = Tareas(self)
        self.fisica = Fisica(self, pilas)
        self.fisica.iniciar()

    def iniciar(self):
        pass

    def actualizar(self):
        pass

    def terminar(self):
        pass

    def actualizar_fisica(self):
        self.fisica.actualizar()

    def actualizar_interpolaciones(self,
                                   tiempo_desde_ultima_actualizacion=None):
        self.tweener.update(tiempo_desde_ultima_actualizacion)

    def actualizar_actores(self):
        for x in self._actores.obtener_actores():
            x.pre_actualizar()
            x.actualizar()

    def dibujar_actores(self, painter):
        painter.save()

        self.camara.aplicar_transformaciones_completas(painter)

        for x in self._actores.obtener_actores(fijos=False, sin_padre=True):
            x.dibujar(painter)

        painter.restore()

        painter.save()
        self.camara.aplicar_translacion(painter)

        for x in self._actores.obtener_actores(fijos=True, sin_padre=True):
            x.dibujar(painter)

        painter.restore()

    def agregar_actor(self, actor):
        self._actores.agregar(actor)

    def agregar_grupo(self, grupo):
        self.grupos.append(grupo)
コード例 #7
0
class Escena(object):

    def __init__(self, pilas):
        if not pilas:
            mensaje = "Ten cuidado, tienes que enviar 'pilas' como argumento de la escena al crearla."
            raise Exception(mensaje)

        if not isinstance(pilas, pilasengine.Pilas):
            mensaje = "Tienes que enviar el objeto 'pilas' como argumento a la escena al crearla, en lugar de eso llego esto: " + str(pilas)
            raise Exception(mensaje)

        self.pilas = pilas

        nombre_de_la_escena = self.__class__.__name__

        if not self.pilas.escenas.es_escena_vinculada(nombre_de_la_escena):
            raise Exception("La escena %s no ha sido vinculada. Ejecuta con pilas.escenas.vincular(%s) antes." %(nombre_de_la_escena, nombre_de_la_escena))

        pilas.log("Creando una escena: ", self)
        self.camara = camara.Camara(pilas, self)
        self.tweener = pitweener.Tweener()
        self._actores = grupo.Grupo(pilas)
        self.grupos = []

        self.luego_de_actualizar = self.pilas.eventos.Evento('luego_de_actualizar')
        self.mueve_camara = self.pilas.eventos.Evento('mueve_camara')       # ['x', 'y', 'dx', 'dy']
        self.mueve_mouse = self.pilas.eventos.Evento('mueve_mouse')         # ['x', 'y', 'dx', 'dy']
        self.click_de_mouse = self.pilas.eventos.Evento('click_de_mouse')   # ['boton', 'x', 'y']
        self.termina_click = self.pilas.eventos.Evento('termina_click')     # ['boton', 'x', 'y']
        self.mueve_rueda = self.pilas.eventos.Evento('mueve_rueda')         # ['delta']
        self.pulsa_tecla = self.pilas.eventos.Evento('pulsa_tecla')         # ['codigo', 'texto']
        self.suelta_tecla = self.pilas.eventos.Evento('suelta_tecla')       # ['codigo', 'texto']
        self.pulsa_tecla_escape = self.pilas.eventos.Evento('pulsa_tecla_escape') #['']
        self.cuando_actualiza = self.pilas.eventos.Evento('actualizar')     #['']
        self.pulsa_boton = self.pilas.eventos.Evento('pulsa_boton')         #['numero']
        self.mueve_pad = self.pilas.eventos.Evento('mueve_pad')         #['x', 'y', 'x1', 'y1']

        self.control = self.pilas.controles.Control(self)
        self.tareas = Tareas(self, pilas)
        self.fisica = Fisica(self, pilas)
        self.fisica.iniciar()
        self.colisiones = Colisiones(pilas, self)

        self.click_de_mouse.conectar(self.arrastrar_actor_mas_cercano)

    def eliminar_el_motor_de_fisica(self):
        """Método especial que se invoca cuando se reinicia pilas, y se tiene que eliminar la escena actual."""
        self.fisica.eliminar_para_liberar_memoria()

    def iniciar(self):
        pass

    def actualizar(self):
        pass

    def terminar(self):
        pass

    def actualizar_fisica(self):
        self.fisica.actualizar()

    def luego_de_actualizar_fisica(self):
        for x in self._actores.obtener_actores():
            if x._vivo:
                x.luego_de_actualizar()

    def actualizar_interpolaciones(self, tiempo_desde_ultima_actualizacion=None):
        self.tweener.update(tiempo_desde_ultima_actualizacion)

    def actualizar_interpolaciones_en_modo_pause(self):
        self.tweener.update_time_without_motion()

    def forzar_actualizacion_de_interpolaciones(self):
        self.tweener.force_update_one_frame()

    def obtener_cantidad_de_actores(self):
        return len(self.obtener_actores())

    def obtener_actores(self):
        return self._actores

    def actualizar_actores(self):
        actores_a_eliminar = []
        self.pilas.pad.actualizar()

        for x in self._actores.obtener_actores():
            if x._vivo:
                x.pre_actualizar()
                x.actualizar()
                x.pos_actualizar()
            else:
                actores_a_eliminar.append(x)

        for actor in actores_a_eliminar:
            actor.quitar_de_la_escena_completamente()

    def dibujar_actores(self, painter):
        painter.save()

        self.camara.aplicar_transformaciones_completas(painter)

        for x in self._actores.obtener_actores(fijos=False, sin_padre=True):
            if x._vivo:
                x.dibujar(painter)

        painter.restore()

        painter.save()
        self.camara.aplicar_translacion(painter)

        for x in self._actores.obtener_actores(fijos=True, sin_padre=True):
            if x._vivo:
                x.dibujar(painter)

        painter.restore()

    def agregar_actor(self, actor):
        self._actores.agregar(actor)

    def agregar_grupo(self, grupo):
        self.grupos.append(grupo)

    def obtener_actores_en(self, x, y):
        return [a for a in self._actores.obtener_actores()
                if a.colisiona_con_un_punto(x, y)]

    def arrastrar_actor_mas_cercano(self, evento):
        actores_debajo_de_mouse = self.obtener_actores_en(evento.x, evento.y)

        if actores_debajo_de_mouse:
            actores_debajo_de_mouse = actores_debajo_de_mouse[::-1]

            for actor_cercano in actores_debajo_de_mouse:
                if actor_cercano.tiene_habilidad(self.pilas.habilidades.Arrastrable):
                    actor_cercano.habilidades.Arrastrable.intentar_arrastrar()
                    return True
コード例 #8
0
ファイル: escena.py プロジェクト: JuanFVera/pilas
class Escena(object):

    def __init__(self, pilas):
        if not pilas:
            mensaje = "Ten cuidado, tienes que enviar 'pilas' como argumento de la escena al crearla."
            raise Exception(mensaje)

        if not isinstance(pilas, pilasengine.Pilas):
            mensaje = "Tienes que enviar el objeto 'pilas' como argumento a la escena al crearla, en lugar de eso llego esto: " + str(pilas)
            raise Exception(mensaje)

        self.pilas = pilas

        nombre_de_la_escena = self.__class__.__name__

        if not self.pilas.escenas.es_escena_vinculada(nombre_de_la_escena):
            raise Exception("La escena %s no ha sido vinculada. Ejecuta con pilas.escenas.vincular(%s) antes." %(nombre_de_la_escena, nombre_de_la_escena))

        pilas.log("Creando una escena: ", self)
        self.camara = camara.Camara(pilas, self)
        self.tweener = pitweener.Tweener()
        self._actores = grupo.Grupo(pilas)
        self.grupos = []

        self.mueve_camara = self.pilas.eventos.Evento('mueve_camara')       # ['x', 'y', 'dx', 'dy']
        self.mueve_mouse = self.pilas.eventos.Evento('mueve_mouse')         # ['x', 'y', 'dx', 'dy']
        self.click_de_mouse = self.pilas.eventos.Evento('click_de_mouse')   # ['boton', 'x', 'y']
        self.termina_click = self.pilas.eventos.Evento('termina_click')     # ['boton', 'x', 'y']
        self.mueve_rueda = self.pilas.eventos.Evento('mueve_rueda')         # ['delta']
        self.pulsa_tecla = self.pilas.eventos.Evento('pulsa_tecla')         # ['codigo', 'texto']
        self.suelta_tecla = self.pilas.eventos.Evento('suelta_tecla')       # ['codigo', 'texto']
        self.pulsa_tecla_escape = self.pilas.eventos.Evento('pulsa_tecla_escape') #['']
        self.cuando_actualiza = self.pilas.eventos.Evento('actualizar')     #['']
        self.pulsa_boton = self.pilas.eventos.Evento('pulsa_boton')         #['numero']
        self.mueve_pad = self.pilas.eventos.Evento('mueve_pad')         #['x', 'y', 'x1', 'y1']

        self.control = self.pilas.controles.Control(self)
        self.tareas = Tareas(self, pilas)
        self.fisica = Fisica(self, pilas)
        self.fisica.iniciar()
        self.colisiones = Colisiones(pilas, self)

        self.click_de_mouse.conectar(self.arrastrar_actor_mas_cercano)

    def eliminar_el_motor_de_fisica(self):
        """Método especial que se invoca cuando se reinicia pilas, y se tiene que eliminar la escena actual."""
        self.fisica.eliminar_para_liberar_memoria()

    def iniciar(self):
        print "Iniciando escena Normal..."

    def actualizar(self):
        pass

    def terminar(self):
        pass

    def actualizar_fisica(self):
        self.fisica.actualizar()

    def actualizar_interpolaciones(self, tiempo_desde_ultima_actualizacion=None):
        self.tweener.update(tiempo_desde_ultima_actualizacion)

    def actualizar_interpolaciones_en_modo_pause(self):
        self.tweener.update_time_without_motion()

    def forzar_actualizacion_de_interpolaciones(self):
        self.tweener.force_update_one_frame()

    def obtener_cantidad_de_actores(self):
        return len(self._actores.obtener_actores())

    def actualizar_actores(self):
        actores_a_eliminar = []
        self.pilas.pad.actualizar()

        for x in self._actores.obtener_actores():
            if x._vivo:
                x.pre_actualizar()
                x.actualizar()
                x.pos_actualizar()
            else:
                actores_a_eliminar.append(x)

        for actor in actores_a_eliminar:
            actor.quitar_de_la_escena_completamente()

    def dibujar_actores(self, painter):
        painter.save()

        self.camara.aplicar_transformaciones_completas(painter)

        for x in self._actores.obtener_actores(fijos=False, sin_padre=True):
            if x._vivo:
                x.dibujar(painter)

        painter.restore()

        painter.save()
        self.camara.aplicar_translacion(painter)

        for x in self._actores.obtener_actores(fijos=True, sin_padre=True):
            if x._vivo:
                x.dibujar(painter)

        painter.restore()

    def agregar_actor(self, actor):
        self._actores.agregar(actor)

    def agregar_grupo(self, grupo):
        self.grupos.append(grupo)

    def obtener_actores_en(self, x, y):
        return [a for a in self._actores.obtener_actores()
                if a.colisiona_con_un_punto(x, y)]

    def arrastrar_actor_mas_cercano(self, evento):
        actores_debajo_de_mouse = self.obtener_actores_en(evento.x, evento.y)

        if actores_debajo_de_mouse:
            actores_debajo_de_mouse = actores_debajo_de_mouse[::-1]

            for actor_cercano in actores_debajo_de_mouse:
                if actor_cercano.tiene_habilidad(self.pilas.habilidades.Arrastrable):
                    actor_cercano.habilidades.Arrastrable.intentar_arrastrar()
                    return True
コード例 #9
0
class Escena(object):

    def __init__(self, pilas):
        self.pilas = pilas
        pilas.log("Creando una escena: ", self)
        self.camara = camara.Camara(pilas, self)
        self.tweener = pitweener.Tweener()
        self._actores = grupo.Grupo(pilas)
        self.grupos = []

        self.mueve_camara = self.pilas.eventos.Evento('mueve_camara')       # ['x', 'y', 'dx', 'dy']
        self.mueve_mouse = self.pilas.eventos.Evento('mueve_mouse')         # ['x', 'y', 'dx', 'dy']
        self.click_de_mouse = self.pilas.eventos.Evento('click_de_mouse')   # ['boton', 'x', 'y']
        self.termina_click = self.pilas.eventos.Evento('termina_click')     # ['boton', 'x', 'y']
        self.mueve_rueda = self.pilas.eventos.Evento('mueve_rueda')         # ['delta']
        self.pulsa_tecla = self.pilas.eventos.Evento('pulsa_tecla')         # ['codigo', 'texto']
        self.suelta_tecla = self.pilas.eventos.Evento('suelta_tecla')       # ['codigo', 'texto']
        self.pulsa_tecla_escape = self.pilas.eventos.Evento('pulsa_tecla_escape') #['']
        self.cuando_actualiza = self.pilas.eventos.Evento('actualizar')     #['']
        self.pulsa_boton = self.pilas.eventos.Evento('pulsa_boton')         #['numero']
        self.mueve_pad = self.pilas.eventos.Evento('mueve_pad')         #['x', 'y', 'x1', 'y1']

        self.control = self.pilas.controles.Control(self)
        self.tareas = Tareas(self, pilas)
        self.fisica = Fisica(self, pilas)
        self.fisica.iniciar()
        self.colisiones = Colisiones(pilas, self)

        self.click_de_mouse.conectar(self.arrastrar_actor_mas_cercano)

    def eliminar_el_motor_de_fisica(self):
        """Método especial que se invoca cuando se reinicia pilas, y se tiene que eliminar la escena actual."""
        self.fisica.eliminar_para_liberar_memoria()

    def iniciar(self):
        pass

    def actualizar(self):
        pass

    def terminar(self):
        pass

    def actualizar_fisica(self):
        self.fisica.actualizar()

    def actualizar_interpolaciones(self, tiempo_desde_ultima_actualizacion=None):
        self.tweener.update(tiempo_desde_ultima_actualizacion)

    def actualizar_interpolaciones_en_modo_pause(self):
        self.tweener.update_time_without_motion()

    def forzar_actualizacion_de_interpolaciones(self):
        self.tweener.force_update_one_frame()

    def obtener_cantidad_de_actores(self):
        return len(self._actores.obtener_actores())

    def actualizar_actores(self):
        self.pilas.pad.actualizar()
        for x in self._actores.obtener_actores():
            x.pre_actualizar()
            x.actualizar()

    def dibujar_actores(self, painter):
        painter.save()

        self.camara.aplicar_transformaciones_completas(painter)

        for x in self._actores.obtener_actores(fijos=False, sin_padre=True):
            x.dibujar(painter)

        painter.restore()

        painter.save()
        self.camara.aplicar_translacion(painter)

        for x in self._actores.obtener_actores(fijos=True, sin_padre=True):
            x.dibujar(painter)

        painter.restore()

    def agregar_actor(self, actor):
        self._actores.agregar(actor)

    def agregar_grupo(self, grupo):
        self.grupos.append(grupo)

    def obtener_actores_en(self, x, y):
        return [a for a in self._actores.obtener_actores()
                if a.colisiona_con_un_punto(x, y)]

    def arrastrar_actor_mas_cercano(self, evento):
        actores_debajo_de_mouse = self.obtener_actores_en(evento.x, evento.y)
        if actores_debajo_de_mouse:
            actores_debajo_de_mouse.sort()
            actor_cercano = actores_debajo_de_mouse[-1]

            if actor_cercano.tiene_habilidad(
                self.pilas.habilidades.Arrastrable):
                actor_cercano.habilidades.Arrastrable.intentar_arrastrar()
コード例 #10
0
class Escena(object):
    def __init__(self, pilas):
        self.pilas = pilas
        pilas.log("Creando una escena: ", self)
        self.camara = camara.Camara(pilas, self)
        self.tweener = pitweener.Tweener()
        self._actores = grupo.Grupo(pilas)
        self.grupos = []

        self.mueve_camara = self.pilas.eventos.Evento(
            'mueve_camara')  # ['x', 'y', 'dx', 'dy']
        self.mueve_mouse = self.pilas.eventos.Evento(
            'mueve_mouse')  # ['x', 'y', 'dx', 'dy']
        self.click_de_mouse = self.pilas.eventos.Evento(
            'click_de_mouse')  # ['boton', 'x', 'y']
        self.termina_click = self.pilas.eventos.Evento(
            'termina_click')  # ['boton', 'x', 'y']
        self.mueve_rueda = self.pilas.eventos.Evento(
            'mueve_rueda')  # ['delta']
        self.pulsa_tecla = self.pilas.eventos.Evento(
            'pulsa_tecla')  # ['codigo', 'texto']
        self.suelta_tecla = self.pilas.eventos.Evento(
            'suelta_tecla')  # ['codigo', 'texto']
        self.pulsa_tecla_escape = self.pilas.eventos.Evento(
            'pulsa_tecla_escape')  #['']
        self.cuando_actualiza = self.pilas.eventos.Evento('actualizar')  #['']
        self.pulsa_boton = self.pilas.eventos.Evento(
            'pulsa_boton')  #['numero']
        self.mueve_pad = self.pilas.eventos.Evento(
            'mueve_pad')  #['x', 'y', 'x1', 'y1']

        self.control = self.pilas.controles.Control(self)
        self.tareas = Tareas(self, pilas)
        self.fisica = Fisica(self, pilas)
        self.fisica.iniciar()
        self.colisiones = Colisiones(pilas, self)

        self.click_de_mouse.conectar(self.arrastrar_actor_mas_cercano)

    def eliminar_el_motor_de_fisica(self):
        """Método especial que se invoca cuando se reinicia pilas, y se tiene que eliminar la escena actual."""
        self.fisica.eliminar_para_liberar_memoria()

    def iniciar(self):
        pass

    def actualizar(self):
        pass

    def terminar(self):
        pass

    def actualizar_fisica(self):
        self.fisica.actualizar()

    def actualizar_interpolaciones(self,
                                   tiempo_desde_ultima_actualizacion=None):
        self.tweener.update(tiempo_desde_ultima_actualizacion)

    def actualizar_interpolaciones_en_modo_pause(self):
        self.tweener.update_time_without_motion()

    def forzar_actualizacion_de_interpolaciones(self):
        self.tweener.force_update_one_frame()

    def obtener_cantidad_de_actores(self):
        return len(self._actores.obtener_actores())

    def actualizar_actores(self):
        self.pilas.pad.actualizar()
        for x in self._actores.obtener_actores():
            x.pre_actualizar()
            x.actualizar()

    def dibujar_actores(self, painter):
        painter.save()

        self.camara.aplicar_transformaciones_completas(painter)

        for x in self._actores.obtener_actores(fijos=False, sin_padre=True):
            x.dibujar(painter)

        painter.restore()

        painter.save()
        self.camara.aplicar_translacion(painter)

        for x in self._actores.obtener_actores(fijos=True, sin_padre=True):
            x.dibujar(painter)

        painter.restore()

    def agregar_actor(self, actor):
        self._actores.agregar(actor)

    def agregar_grupo(self, grupo):
        self.grupos.append(grupo)

    def obtener_actores_en(self, x, y):
        return [
            a for a in self._actores.obtener_actores()
            if a.colisiona_con_un_punto(x, y)
        ]

    def arrastrar_actor_mas_cercano(self, evento):
        actores_debajo_de_mouse = self.obtener_actores_en(evento.x, evento.y)
        if actores_debajo_de_mouse:
            actores_debajo_de_mouse.sort()
            actor_cercano = actores_debajo_de_mouse[-1]

            if actor_cercano.tiene_habilidad(
                    self.pilas.habilidades.Arrastrable):
                actor_cercano.habilidades.Arrastrable.intentar_arrastrar()