#!/usr/bin/env python

# -*- coding: utf8 -*- 

#***********************************************************************
# pysycache : a program for learn to use the mouse
# Copyright (C) 2005-2007 Vincent DEROO (vincent.pysycache@free.fr) 
# 
# This program is free software; you can redistribute it and/or 
# modify it under the terms of the GNU General Public License 
# as published by the Free Software Foundation; either version 2 
# of the License, or (at your option) any later version. 
# 
# This program is distributed in the hope that it will be useful, 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. 
# 
# You should have received a copy of the GNU General Public License 
# along with this program; if not, write to the Free Software 
# Foundation, Inc. : 
# 51 Franklin Street, Fifth Floor, Boston, MA02110-1301, USA
#***********************************************************************



#*******************************************************************************
# Importation des modules
#*******************************************************************************
import sys
import getopt, string
import pygame
from pygame.locals import *
import random, os

from pysyclasses import *







#type de chaque jeu
MODENORMAL = 0
MODEFANTOM = 1


EVTFANTOME = USEREVENT + 1		#fantome
EVTCHRONO = USEREVENT + 2		#chronometre
EVTSURVOL = USEREVENT + 3 		#survol d'un bouton menu
EVTMOVE = USEREVENT + 4			#
EVTVISIBLE = USEREVENT + 5 		#pour rendre visible / invisible une cible


#marge de la zone de jeu
MARGELEFT = 10
MARGETOP  = 4


#largeur d'une souris
DEMISOURIS = 32


CACHE = 0
VISIBLE = 1


GRepPysycache = ""		#le repertoire de l'application


GBtnMenu = 999			#numero du bouton du menu d'application
						# 1 : move
						# 2 : click
						# 3 : buttons
						# 4 :
						# 5 : puzzle
						# 6 : attrapper
						# 7 : double click


GLevel = 2				#niveau des activites
						#valeurs possibles : 0 (facile) 1 (moyen) et 2 (difficile)
GChrono = 0				#0 : pas de chronometre  1 : on a 60 secondes pour finir l'activite
GSoundError = 0			#0 : pas d'erreur d'initalisation du mixer - 1 : erreur


GPosDepX = 720			#position X (en partant de la gauche)
GPosDepY = 150			#position Y (en partant du haut)



#---------------------------------- ihm ----------------------------------------
GTabBtnIhm = []			#tableau des boutons
GTabDirectories = []	#tableau des repertoires
GFirstDirectory = 0
GCurrentDirectory = ""


#----------------------------- activity move -----------------------------------
GTabCarreau = []		#tableau d'information sur les carreaux
GTailleLarg = 10		#largeur d'un carreau
GTailleHaut = 10		#hauteur d'un carreau
GTailleCarreau = 0		#indicateur de taille des carreaux (0 : grand, 1 moyen, 2 petit)
GNbCarreau = 999		#nombre de carreau (largeur x longueur)

#------------------------------ activity click ---------------------------------
GTabPhotos = []			#tableau d'information sur les photos
GNbPhotos = 999			#nombre de photos a decouvrir
GTailleZoom = 30		#rayon du cercle autour de l'endroit ou est la photo
GItemToFound = 99		#id de la photo a trouver

#------------------------------ activity button --------------------------------
GNbButtons = 999		#nombre d'elements a ranger
GSpeed = 3				#vitesse pour l'activite boutons
GItemToMove = 99		#id du bouton a deplacer

#---------------------------- activity dbl-click -------------------------------
GTabTarget = []			#tableau d'information sur les cibles
GCategToClick = 999		#id de la categorie du double click
GItemToClick = 999

#----------------------------- activity puzzle ---------------------------------
GTabPuzzles = []		#tableau d'information sur les pieces du puzzle
GNbPieces = 999			#nombre de pieces du puzzle restant a poser
GIdxMovedPiece = 0		#indice de la piece deplacee dans le tableau 
GIdPieceToDrop = 999	#indice de la piece a placer

#------------------------------ select -----------------------------------------
GSelectedUser = 9999999
GTabUser = []			#tableau des utilisateurs
GFirsUser = 0			#indice du premier utilisateur a voir

#preferences utilisateurs
GTabLang = []
GPrefUserInit = Preferences()			#pref lues depuis le fichier de config
GPrefUserFromOptions = Preferences()	#pref passees en parametres
GPrefUserTmp = Preferences()			#pref temporaires (pour la partie preferences)
GPrefUserLang = 0
GIdxphoto = 0
GLstFaces = []


#---------------------------- evenements -------------------------------
EVENT_NOVENT = 3	#on ne traite pas les evenements
EVENT_GAGNE = 1		#on a gagne le jeu
EVENT_JEU0 = 0		#activite move/click :
					#      on joue normalement en bougeant la souris
EVENT_JEU1 = 4		#activite click :
					#      on est proche d'une photo (l'appareil est en rose)
EVENT_JEU2 = 2		#activite move :
					#      on joue en bougeant la souris MAIS on est en train de dessiner les cache
					#activite click :
					#      on a clique pour voir la photo

GTypeSouris = EVENT_NOVENT
						#activite move
						#1 : on a gagne 
						#2 : on joue en bougeant la souris MAIS on est en train 
						#    de dessiner les cache
						#3 : on ne traite pas les evt (pas dessin)


						#activite puzzle
						#0 : on est loin de l'endroit ou il faut poser la piece
						#1 : on est proche

#variables concernant les options eventuelles de pysycache
GWithSound = 1			#1 : with sounds, 0 without sound
#GWithSoundInit = 0
GWithSoundUser = 0
GWithFullScreen = 1     #1 : with fullscreen 0 in window
GWithCredits = 1		#1 : show credits 0 hide credits
GWithHelp = 1			#1 : show the sounds of help
GWithHelpInit = 1
GWithHelpUser = 1
GDureeTransition = 5	#the duration between two lines progression (ShowTransitionOfTheme)
						#the duration of view a screen is 1000 x GDureeTransition
#GWithLang = ""			#langage to use for menus
#GWithLangUser = ""

GLogoUser = ""			#fichier logo de l'utilisateur

GDebug = 0				#1 : show debug, 0 without message of debug
Gfps = 90				#number of framerate
GAdmin = 0				#0 mode normal, 1 mode administration

#config de pysycache
GPysyUserMode = 999		#0 : one player by computer user 1 : lot of player by computer user
GPysyUserModeTmp = 999
GRepScores = ""			#le repertoire avec les meilleurs scores
GRepScoresTmp = ""
GRepUsersPysycache = ""	#le repertoire des utilisateurs (si GPysyUserMode=1)
GRepUsersPysycacheTmp = ""
GRepPersoUser = ""		#le repertoire personnel du joueur
GInterface = 0			#le detail de l'interface
						#0 : minimale  
						#1 : normal 
						#2 : detaille
GDicoLangue = {}		#gere tous les textes dans les langues locales
GIdBtnSurvol = 99		#Id du bouton survole

GModeJeu = 0			#0 : normal
						#1 : fantome
						#2 : chrono

GStateOfDrag  = 0		#0 : pas de drag
						#1 : on se deplace avec la piece

GChronoLimit = 60		#duree du chronometre
GChronoCpt = 60			#nombre de secondes restantes


GTpsDebut = 0			#temps de depart du mode chrono

GMyLocale = "en_EN"
GConsoleLocale = ""				#console encoding

GMaSourisCurrentPositionX = 1		#Position actuelle de la souris
GMaSourisCurrentPositionY = 1

GMaSourisOldPositionX = 1			#Ancienne position de la souris
GMaSourisOldPositionY = 1

GFontName = "FreeSansBold.ttf"

Gclock = pygame.time.Clock ()


frames  = 0
lastFPSTime = pygame.time.get_ticks()

GLstSouris = pygame.sprite.RenderClear()
Gbackground_image = pygame.Surface((800,600))

GChronoHaut = pygame.Surface((64, 204))
GChronoVide = pygame.Surface((64, 204))
GChronoBas = pygame.Surface((64, 204))
GChronoAP = pygame.Surface((64, 204))


#from pysyclasses import ApplicationPysy
from pysymove import ApplicationMove
from pysyclick import ApplicationClick

import pysymove
import pysyclick
import pysybuttons
import pysydblclick
import pysypuzzle


AppMove = pysymove.ApplicationMove()
AppClick = pysyclick.ApplicationClick()
AppButtons = pysybuttons.ApplicationButtons()
AppDblClick = pysydblclick.ApplicationDblClick()
AppPuzzle = pysypuzzle.ApplicationPuzzle()
