#!/usr/bin/env python # -*- coding: utf-8 -*- ''' ------------------------------------------ WireChem - The new chemistry game Programme principal (C) Copyright 2013-2014 Nicolas Hordé Licence GPL V3.0 ------------------------------------------ ''' import datetime import math import pyglet import copy import csv import random import time import operator import shelve import os import sys from pyglet.gl import * from pyglet.window import mouse from pyglet.window import key from pyglet import clock from pyglet import image from os.path import expanduser ''' *********************************************************************************************** ''' ''' Fonctions d'initialisation ''' def sync(): global Uworlds,finished write(gethome()+"/dbdata",["Uworlds","finished"]) def verifyhome(): global Uworlds,finished if not os.path.exists(gethome()): os.makedirs(gethome()) if not os.path.exists(gethome()+"/dbdata"): Uworlds=[[{0:0}]] finished=[(0,0)] sync() def gethome(): home = expanduser("~")+"/.wirechem" return home def write(afile,var): d=shelve.open(afile,writeback=True) for k in var: d[k]=copy.deepcopy(globals()[k]) d.sync() d.close() def read(afile): d=shelve.open(afile,writeback=True) for k in d.keys(): globals()[k]=copy.deepcopy(d[k]) d.close() def load(d): for k in d.keys(): if k[0]!="_": globals()[k]=copy.deepcopy(d[k]) def reference(var,noms): if len(noms)==2: for y in range(len(var)): for x in range(len(var[y])): var[y][x][noms[0]]=y var[y][x][noms[1]]=x else: for x in range(len(var[y])): var[x][y][noms[0]]=x def duplicateref(d): for k in d.keys(): d[d[k]['nom']]=d[k] class abutton(object): def update(self): if not self.isvisible(): try: self.vertex_list.delete() except: print "destroyed" else: if self.typeof=='icon': self.content.width=self.width self.content.height=self.height self.vertex_list = pyglet.sprite.Sprite(self.content, x=self.x, y=self.y, batch=self.batch) elif self.typeof=='color': self.vertex_list = self.batch.add(4,pyglet.gl.GL_QUADS, None, ('v2i', (self.x, self.y, self.x+self.width, self.y, self.x+self.width, self.y+self.height, self.x, self.y+self.height)), ('c4B', self.content * 4)) elif self.typeof=='function': self.vertex_list = eval(self.content) elif self.typeof=='multicon': self.content[self.index].width=self.width self.content[self.index].height=self.height self.vertex_list = pyglet.sprite.Sprite(self.content[self.index], x=self.x, y=self.y, batch=self.batch) def __init__(self, window, name, x, y, width, height , active, hilite, visible, seleted, separe, content, hint, typeof, text, text2, batch): self.name=name self.index=0 self.x=x self.y=y self.batch=batch self.width=width self.height=height self.active=active self.hilite=hilite self.visible=visible self.separe=separe self.content=content self.typeof=typeof self.hint=hint self.seleted=seleted self.window=window self.window.push_handlers(self.on_mouse_press) self.window.push_handlers(self.on_mouse_motion) self.window.push_handlers(self.on_mouse_drag) self.window.push_handlers(self.on_mouse_release) self.window.push_handlers(self.on_mouse_scroll) self.update() def delete(self): self.vertex_list.delete() def on_mouse_press(self, x, y, button, modifiers): if x>self.x and y>self.y and x=len(self.content): self.index=0 self.update() eval("self.window.on_mouse_press_"+self.name+"("+str(state)+")") def on_mouse_release(self, x, y, button, modifiers): if x>self.x and y>self.y and xself.x and y>self.y and xself.x and y>self.y and xself.x and y>self.y and x