Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Login.py
diff options
context:
space:
mode:
Diffstat (limited to 'Login.py')
-rw-r--r--Login.py282
1 files changed, 282 insertions, 0 deletions
diff --git a/Login.py b/Login.py
new file mode 100644
index 0000000..7e40567
--- /dev/null
+++ b/Login.py
@@ -0,0 +1,282 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import pygame
+import os
+import gc
+import sys
+import gtk
+import gobject
+
+from pygame.locals import *
+import Globals as G
+gc.enable()
+import BiblioJAM
+from BiblioJAM.JAMButton import JAMButton
+from BiblioJAM.JAMLabel import JAMLabel
+import BiblioJAM.JAMGlobals as JAMG
+
+class Login(gtk.Widget):
+ __gsignals__ = {"run":(gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, []),
+ "crear_usuario":(gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, []),
+ "load_usuario":(gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,))}
+ def __init__(self):
+ gtk.Widget.__init__(self)
+ self.ventana = None
+ self.estado = False
+ self.fondo = None
+ self.reloj = None
+ self.selector = None
+ self.ventana_real = None
+ self.resolucionreal = None
+ self.VA = None
+ self.VH = None
+ self.load()
+ self.estado = "Intro"
+
+ def run(self):
+ self.ventana.blit(self.fondo, (0,0))
+ self.selector.draw(self.ventana)
+ pygame.display.update()
+ while self.estado == "Intro":
+ self.reloj.tick(35)
+ while gtk.events_pending():
+ gtk.main_iteration(False)
+ G.Traduce_posiciones(self.VA, self.VH)
+ self.selector.clear(self.ventana, self.fondo)
+ self.selector.update()
+ self.handle_event_Intro()
+ pygame.event.clear()
+ self.selector.draw(self.ventana)
+ self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0))
+ pygame.display.update()
+
+ def run_game(self, button):
+ self.estado = None
+ self.emit("run")
+
+ def crear_usuario(self, button):
+ self.estado = None
+ self.emit("crear_usuario")
+
+ def emit_load_usuario(self, usuario):
+ self.estado = None
+ self.emit("load_usuario", usuario)
+
+ def handle_event_Intro(self):
+ for event in pygame.event.get(pygame.KEYDOWN):
+ tecla = event.key
+ if tecla == pygame.K_ESCAPE:
+ return self.run_dialog_intro(None)
+
+ def load(self):
+ pygame.display.set_mode( (0,0), pygame.DOUBLEBUF | pygame.FULLSCREEN, 0)
+ A, B = G.RESOLUCION
+ self.ventana = pygame.Surface( (A, B), flags=HWSURFACE )
+ self.ventana_real = pygame.display.get_surface()
+ C = pygame.display.Info().current_w
+ D = pygame.display.Info().current_h
+ self.resolucionreal = (C,D)
+ self.VA = float(C)/float(A)
+ self.VH = float(D)/float(B)
+ pygame.event.set_blocked([JOYAXISMOTION, JOYBALLMOTION, JOYHATMOTION, JOYBUTTONUP, JOYBUTTONDOWN, KEYUP, USEREVENT])
+ pygame.event.set_allowed([MOUSEMOTION, MOUSEBUTTONUP, MOUSEBUTTONDOWN, KEYDOWN, VIDEORESIZE, VIDEOEXPOSE, QUIT, ACTIVEEVENT])
+ pygame.mouse.set_visible(True)
+ imagen = os.path.join(G.IMAGENES, "Login", "fondo.jpg")
+ self.fondo = pygame.transform.scale(pygame.image.load(imagen), G.RESOLUCION)
+ self.reloj = pygame.time.Clock()
+ self.selector = Selector(self)
+ self.selector.center(self.fondo.get_size())
+
+ def run_dialog_intro(self, button):
+ from BiblioJAM.JAMDialog import JAMDialog
+ dialog = JAMDialog(mensaje = "¿Abandonas el Juego?",
+ funcion_ok = self.ok_intro, funcion_cancel = self.cancel_intro)
+ fuente, tamanio = JAMG.get_Font_fawn()
+ dialog.set_font_from_file(fuente, tamanio = 40)
+ dialog.boton_aceptar.set_font_from_file(fuente, tamanio = 25)
+ dialog.boton_cancelar.set_font_from_file(fuente, tamanio = 25)
+ a,b,c = JAMG.get_estilo_papel_quemado()
+ dialog.set_colors_dialog(base = c, bordes = c)
+ dialog.set_colors_buttons(colorbas = a, colorbor = b, colorcara = c)
+ self.estado = "Dialog"
+ dialog.draw(self.ventana)
+ pygame.display.update()
+ while self.estado == "Dialog":
+ self.reloj.tick(35)
+ while gtk.events_pending():
+ gtk.main_iteration(False)
+ G.Traduce_posiciones(self.VA, self.VH)
+ dialog.clear(self.ventana, self.fondo)
+ dialog.update()
+ pygame.event.clear()
+ dialog.draw(self.ventana)
+ self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0))
+ pygame.display.update()
+ dialog.clear(self.ventana, self.fondo)
+ self.ventana_real.blit(pygame.transform.scale(self.ventana, self.resolucionreal), (0,0))
+ pygame.display.update()
+
+ def ok_intro(self, button):
+ return self.salir()
+ def cancel_intro(self, button):
+ self.estado = "Intro"
+ def salir(self):
+ pygame.quit()
+ sys.exit()
+
+class Selector(pygame.sprite.OrderedUpdates):
+ def __init__(self, main):
+ pygame.sprite.OrderedUpdates.__init__(self)
+ fuente, tamanio= JAMG.get_Font_fawn()
+ self.main = main
+ self.posiciones_usuarios = (0,0)
+ imagen = os.path.join(G.IMAGENES, "Login", "fondo_selecciona.png")
+ imagen = pygame.transform.scale(pygame.image.load(imagen), (427,573))
+ self.fondo = pygame.sprite.Sprite()
+ self.fondo.image = (imagen)
+ self.fondo.rect = self.fondo.image.get_rect()
+ self.add(self.fondo)
+
+ self.label = JAMLabel("Selecciona tu Usuario")
+ self.label.set_font_from_file(fuente, tamanio = 40)
+ self.label.set_text(color = (255,255,255,255))
+ self.add(self.label)
+
+ imagen = G.get_Flecha()
+ salir = JAMButton("",None)
+ salir.set_imagen(origen = imagen, tamanio = (100,55))
+ salir.set_colores(colorbas = JAMG.get_negro(), colorcara = JAMG.get_negro())
+ salir.set_tamanios(tamanio = (0,0), grosorbor = 1, detalle = 1, espesor = 1)
+ salir.set_posicion(punto = (10,10))
+ salir.connect(callback = main.run_dialog_intro)
+ self.add(salir)
+
+ self.upper = JAMButton("",None)
+ imagen = os.path.join(G.IMAGENES, "Login", "up.png")#"selecciona_arriba.png")
+ self.upper.set_tamanios(tamanio = (376, 30), grosorbor=1, detalle=1, espesor=1)
+ self.upper.set_imagen(origen = imagen, tamanio = (376, 30))
+ self.upper.set_colores(colorbas = (255,255,255,255),
+ colorbor = (255,255,255,255), colorcara = (0,153,255,255))
+ self.upper.connect(callback = self.up_user, sonido_select = None)
+ self.add(self.upper)
+
+ self.down = JAMButton("",None)
+ imagen = os.path.join(G.IMAGENES, "Login", "down.png")
+ self.down.set_tamanios(tamanio = (376, 30), grosorbor=1, detalle=1, espesor=1)
+ self.down.set_imagen(origen = imagen, tamanio = (376, 30))
+ #imagen = os.path.join(G.IMAGENES, "Login", "selecciona_abajo.png")
+ #self.down.set_tamanios(grosorbor=1, detalle=1, espesor=1)
+ self.down.set_colores(colorbas = (255,255,255,255),
+ colorbor = (255,255,255,255), colorcara = (0,153,255,255))
+ self.down.set_imagen(origen = imagen)
+ self.down.connect(callback = self.down_user, sonido_select = None)
+ self.add(self.down)
+
+ usuarios = G.get_users()
+ self.usuarios = []
+ for user in usuarios:
+ usuario = Usuario(user)
+ usuario.connect(callback = self.emit_load_usuario, sonido_select = None)
+ self.usuarios.append(usuario)
+
+ self.usuariosenmenu = None
+ if len(self.usuarios) <= 3:
+ self.usuariosenmenu = self.usuarios
+ else:
+ self.usuariosenmenu = self.usuarios[:3]
+ if self.usuariosenmenu: self.add(self.usuariosenmenu)
+
+ self.crear = JAMButton("Crear Nuevo",None)
+ self.crear.set_tamanios(grosorbor = 1, detalle = 1, espesor = 1)
+ self.crear.set_font_from_file(fuente, tamanio = 25)
+ self.crear.connect(callback = main.crear_usuario, sonido_select = None)
+ self.add(self.crear)
+
+ def up_user(self, button):
+ if len(self.usuarios) <= 3:
+ return
+ else:
+ indice = self.usuarios.index(self.usuariosenmenu[0])
+ indice -= 1
+ usuarios = [self.usuarios[indice], self.usuariosenmenu[0], self.usuariosenmenu[1]]
+ self.remove(self.usuariosenmenu)
+ self.usuariosenmenu = usuarios
+ self.set_posiciones_usuarios()
+ self.add(self.usuariosenmenu)
+
+ def down_user(self, button):
+ if len(self.usuarios) <= 3:
+ return
+ else:
+ indice = self.usuarios.index(self.usuariosenmenu[-1])
+ if indice == len(self.usuarios)-1:
+ indice = 0
+ else:
+ indice += 1
+ usuarios = [self.usuariosenmenu[1], self.usuariosenmenu[2], self.usuarios[indice]]
+ self.remove(self.usuariosenmenu)
+ self.usuariosenmenu = usuarios
+ self.set_posiciones_usuarios()
+ self.add(self.usuariosenmenu)
+
+ def center(self, fondo_size):
+ sep = 10
+
+ a,b = self.label.get_tamanio()
+ self.label.set_posicion( (fondo_size[0]/2-a/2, sep*2) )
+ x,y, fondow, fondoh = self.fondo.rect
+ ww,hh = fondo_size
+ x,y = (ww/2-fondow/2,hh/2-fondoh/2)
+ self.fondo.rect.x, self.fondo.rect.y = (x,y)
+
+ w, h = self.upper.get_tamanio()
+ posx, posy = (x+(fondow/2-w/2), y+sep)
+ self.upper.set_posicion( (posx, posy) )
+
+ w, h = self.down.get_tamanio()
+ posx, posy = (x+(fondow/2-w/2), y+fondoh-h-sep)
+ self.down.set_posicion( (posx, posy) )
+
+ # usuarios
+ x,y = self.upper.get_posicion()
+ w,h = self.upper.get_tamanio()
+ xx,yy = self.down.get_posicion()
+ espacio = (yy-sep) - (y+h+sep)
+ altura = espacio/3
+
+ posy = y+h+sep
+ self.posiciones_usuarios = (x, posy)
+ for user in self.usuarios:
+ user.set_tamanios(tamanio = (w, altura), grosorbor = 1, detalle = 1, espesor = 1)
+ user.set_posicion( (x, posy) )
+ posy += altura
+
+ #self.crear.set_tamanios(tamanio=(w,h*2), grosorbor=1, detalle=1, espesor=1)
+ self.crear.set_tamanios(tamanio=(w,h), grosorbor=1, detalle=1, espesor=1)
+ x,y,ww,h = self.fondo.rect
+ self.crear.set_posicion( (fondo_size[0]/2-w/2, y+h+sep*2 ) )
+
+ def emit_load_usuario(self, widget):
+ self.main.emit_load_usuario(widget.usuario)
+
+ def set_posiciones_usuarios(self):
+ x, posy = self.posiciones_usuarios
+ for user in self.usuariosenmenu:
+ user.set_posicion( (x, posy) )
+ posy += user.get_tamanio()[1]
+
+class Usuario(JAMButton):
+ def __init__(self, usuario):
+ JAMButton.__init__(self, '', None)
+ fuente, tamanio= JAMG.get_Font_fawn()
+ self.usuario = usuario # diccionario cargado desde archivo shelve.
+ imagen = self.usuario['personaje']
+ self.set_imagen(origen = imagen)
+ self.set_alineacion_label("izquierda")
+ self.set_font_from_file(fuente, tamanio = 25)
+ self.set_text(texto = self.usuario['nombre'])
+ self.set_colores(colorbas = (255,255,255,255),
+ colorbor = (255,255,255,255), colorcara = (0,153,255,255))
+
+