From 0749bc11d88ebcd40cc3677bfd6507e63038023f Mon Sep 17 00:00:00 2001 From: Le_dahut Date: Tue, 13 May 2014 17:06:34 +0200 Subject: [PATCH] =?UTF-8?q?-G=C3=A9n=C3=A9ralisation=20de=20l'objet=20menu?= =?UTF-8?q?=20afin=20de=20g=C3=A9rer=203=20types=20d'=C3=A9v=C3=A8nements?= =?UTF-8?q?=20(DRAG,=20MOTION=20&=20CLICK).=20-L'appel=20des=20fonctions?= =?UTF-8?q?=20a=20r=C3=A9aliser=20sur=20chaque=20=C3=A9l=C3=A9ment=20de=20?= =?UTF-8?q?menu=20est=20trait=C3=A9=20par=20la=20fonction=20"launch"=20qui?= =?UTF-8?q?=20cr=C3=A9er=20un=20dict=20"state"=20avec=20toutes=20les=20inf?= =?UTF-8?q?ormations=20necessaire=20au=20traitement=20de=20l'=C3=A9v=C3=A8?= =?UTF-8?q?nement=20(Type,=20Coordonn=C3=A9es,=20modifiers,=20Boutons..etc?= =?UTF-8?q?).=20-Il=20est=20possible=20de=20faire=20des=20=C3=A9valuation?= =?UTF-8?q?=20sur=20les=20bool=C3=A9ens=20et=20sur=20les=20textes=20afin?= =?UTF-8?q?=20de=20rendre=20le=20menu=20dynamique.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WireChem.py | 331 ++++++++++++++++++++++++++++++---------------------- dbdata | Bin 73728 -> 73728 bytes dbsrc | 62 +++++----- 3 files changed, 222 insertions(+), 171 deletions(-) diff --git a/WireChem.py b/WireChem.py index c4559c8..9825be6 100644 --- a/WireChem.py +++ b/WireChem.py @@ -88,7 +88,7 @@ def loadpic(d): if 'icon' in d[j][k]: if type(d[j][k]['icon']) is str and d[j][k]['icon']!="" and os.path.exists(d[j][k]['icon']): d[j][k]['icon']=image.load(d[j][k]['icon']) - elif type(d[j][k]['nom']) is not str: + elif type(d[j][k]['icon']) is list and type(d[j][k]['icon'][0]) is str: for n in range(len(d[j][k]['icon'])): d[j][k]['icon'][n]=image.load(d[j][k]['icon'][n]) @@ -106,7 +106,7 @@ def initgrid(): direction[(+1,+0)]=[(-1,+0),(-1,+1),(-1,-1),(+0,+1),(+0,-1),(+1,+1),(+1,-1),(+1,+0)] direction[(+1,+1)]=[(-1,-1),(-1,+0),(+0,-1),(-1,+1),(+1,-1),(+0,+1),(+1,+0),(+1,+1)] adirection=[(-1,-1),(-1,+0),(-1,+1),(+0,-1),(+0,+1),(+1,-1),(+1,+0),(+1,+1)] - savenames=["#","α","β","γ","δ","ε","ζ","η","θ","ι","κ","λ","μ","ν","ξ","ο","π","ρ","ς","σ","τ","υ","φ","χ","ψ","ω"] + savenames=["α","β","γ","δ","ε","ζ","η","θ","ι","κ","λ","μ","ν","ξ","ο","π","ρ","ς","σ","τ","υ","φ","χ","ψ","ω"] verifyhome() read("dbdata") read(gethome()+"/dbdata") @@ -764,63 +764,85 @@ def drawmenu(themenus): for j in range(1,len(themenus[i])): themenus[i][j]['size']=themenus[i][0]['size'] if (type(themenus[i][j]['icon']) is dict): - themenus[i][j]['icon']['size']=themenus[i][0]['size'] + themenus[i][j]['icon']['size']=themenus[i][0]['size']-12 for j in range(1,len(themenus[i])): - if themenus[i][j]['visible']: + if type(themenus[i][j]['visible']) is str and eval(themenus[i][j]['visible']) or (type(themenus[i][j]['visible']) is not str and themenus[i][j]['visible']): if not themenus[i][j]['variable']: sizeofall+=themenus[i][j]['size'] else: variables+=1 for j in range(1,len(themenus[i])): - if themenus[i][j]['variable'] and themenus[i][j]['visible']: + if themenus[i][j]['variable'] and (type(themenus[i][j]['visible']) is str and eval(themenus[i][j]['visible']) or (type(themenus[i][j]['visible']) is not str and themenus[i][j]['visible'])): themenus[i][j]['size']=(win.width-sizeofall)/variables placex=10 for j in range(1,len(themenus[i])): placetemp=placex if themenus[i][j]['size']<30: continue - if not themenus[i][j]['visible']: continue + if type(themenus[i][j]['visible']) is str and not eval(themenus[i][j]['visible']) or not themenus[i][j]['visible']: continue if themenus[i][j]['tech']>tech: placex+=themenus[i][j]['size'] continue if type(themenus[i][j]['icon']) is list: - if type(themenus[i][j]['nom']) is list: - glColor3ub(255,255,255) + if type(themenus[i][j]['icon'][0]) is not int: + if (type(themenus[i][j]['active']) is str and eval(themenus[i][j]['active'])) or (type(themenus[i][j]['active']) is not str and themenus[i][j]['active']) : + glColor3ub(255,255,255) + else: + glColor4ub(255,255,255,40) themenus[i][j]['icon'][themenus[i][j]['choose']].blit(placex,placey+(themenus[i][0]['size']-themenus[i][j]['icon'][themenus[i][j]['choose']].height)/2) placetemp+=themenus[i][j]['icon'][themenus[i][j]['choose']].width else: - drawsquare(placex,placey+(themenus[i][0]['size']-36)/2,placex+36,placey+(themenus[i][0]['size']-36)/2+36,1,themenus[i][j]['icon']) + drawsquare(placex,placey+(themenus[i][0]['size']-36)/2,placex+36,placey+(themenus[i][0]['size']-36)/2+37,1,themenus[i][j]['icon']) elif type(themenus[i][j]['icon']) is dict: - drawitem(placex,placey,themenus[i][j]['icon'],themenus[i][j]['size'],10) + if themenus[i][j]['icon'].has_key('color') and themenus[i][j]['icon'].has_key('colorise'): + if ((type(themenus[i][j]['active']) is str and eval(themenus[i][j]['active'])) or (type(themenus[i][j]['active']) is not str and themenus[i][j]['active'])): + themenus[i][j]['icon']['color']=(220,220,220) + else: + themenus[i][j]['icon']['color']=(40,40,40) + if themenus[i][j]['icon'].has_key('size'): + drawitem(placex,placey+(themenus[i][0]['size']-themenus[i][j]['icon']['size'])/2,themenus[i][j]['icon'],themenus[i][j]['icon']['size'],10) + else: + drawitem(placex,placey+(themenus[i][0]['size']-themenus[i][j]['size'])/2,themenus[i][j]['icon'],themenus[i][j]['size'],10) elif type(themenus[i][j]['icon']) is str: if themenus[i][j].has_key('params'): - eval(themenus[i][j]['icon']+"("+str(placex)+","+str(placey)+","+str(placex+themenus[i][j]['size'])+","+str(placey+themenus[i][0]['size']-15)+","+themenus[i][j]['params']+")") + eval(themenus[i][j]['icon']+"("+str(placex)+","+str(placey+(themenus[i][0]['size']-36)/2)+","+str(placex+themenus[i][j]['size'])+","+str(placey+(themenus[i][0]['size']-36)/2+37)+","+themenus[i][j]['params']+")") else: - eval(themenus[i][j]['icon']+"("+str(placex)+","+str(placey)+","+str(placex+themenus[i][j]['size'])+","+str(placey+themenus[i][0]['size']-15)+")") + eval(themenus[i][j]['icon']+"("+str(placex)+","+str(placey+(themenus[i][0]['size']-36)/2)+","+str(placex+themenus[i][j]['size'])+","+str(placey+(themenus[i][0]['size']-36)/2+37)+")") else: - glColor3ub(255,255,255) + if (type(themenus[i][j]['active']) is str and eval(themenus[i][j]['active'])) or (type(themenus[i][j]['active']) is not str and themenus[i][j]['active']): + glColor3ub(255,255,255) + else: + glColor4ub(255,255,255,60) themenus[i][j]['icon'].blit(placex,placey+(themenus[i][0]['size']-themenus[i][j]['icon'].height)/2) placetemp+=themenus[i][j]['icon'].width + if themenus[i][j]['squarred']: + if int(time.time())%2==0: drawsquare(placex,placey+(themenus[i][0]['size']-36)/2,placex+36,placey+(themenus[i][0]['size']-36)/2+37,1,[255,0,0,110]) if themenus[i][j]['separe']: - drawsquare(5+placex+themenus[i][j]['size'],placey,6+placex+themenus[i][j]['size'],placey+themenus[i][0]['size'],0,[90,90,90]) - if themenus[i][j]['squarred']: - if int(time.time())%2==0: drawsquare(placex,placey,placex+themenus[i][j]['size'],placey+themenus[i][0]['size'],1,[255,0,0,110]) + drawsquare(placex+themenus[i][j]['size']-5,placey+5,placex+themenus[i][j]['size']-3,placey+themenus[i][0]['size']-5,1,[90,90,90]) if themenus[i][j].has_key('text2'): - txt_cout.text=eval(themenus[i][j]['text']) - if int(eval(themenus[i][j]['text']))==0: + txt_cout.text=themenus[i][j]['text'] + if txt_cout.text[0]=="#": + txt_cout.text=eval(txt_cout.text[1:]) + if int(txt_cout.text)<0: txt_cout.color=(255, 0, 0,255) + elif not themenus[i][j]['active']: + txt_cout.color=(40,40,40,255) else: txt_cout.color=(180, 180, 180,255) - txt_cout.x=placetemp+8 - txt_cout.y=placey+5 + txt_cout.x=placetemp + txt_cout.y=placey+1 txt_cout.draw() elif themenus[i][j].has_key('text'): - txt_cout.text=eval(themenus[i][j]['text']) - if int(eval(themenus[i][j]['text']))==0: + txt_cout.text=themenus[i][j]['text'] + if txt_cout.text[0]=="#": + txt_cout.text=eval(txt_cout.text[1:]) + if int(txt_cout.text)<0: txt_cout.color=(255, 0, 0,255) + elif not themenus[i][j]['active']: + txt_cout.color=(40,40,40,255) else: txt_cout.color=(180, 180, 180,255) - txt_cout.x=placetemp+5 - txt_cout.y=placey+5 + txt_cout.x=placetemp + txt_cout.y=placey+15 txt_cout.draw() if themenus[i][0]['selectable']: if (themenus[i][0]['mouse'][0]==j): @@ -829,15 +851,15 @@ def drawmenu(themenus): selectcolor=[0,255,0,40] elif (themenus[i][0]['mouse'][2]==j): selectcolor=[0,0,255,40] - else: - selectcolor=[40,40,40,0] - if play>0 and ((themenus[i][0]['mouse'][0]==j) or (themenus[i][0]['mouse'][1]==j) or (themenus[i][0]['mouse'][2]==j)): - glLineWidth(random.randint(1,3)) - glLineStipple(random.randint(0,10),random.randint(0,65535)) - drawsquare(placex,placey+(themenus[i][0]['size']-themenus[i][j]['size'])/2,placex+themenus[i][0]['size']-13,placey+(themenus[i][0]['size']-themenus[i][j]['size']-8)/2+themenus[i][j]['size'],2,selectcolor) - if play>0 and ((themenus[i][0]['mouse'][0]==j) or (themenus[i][0]['mouse'][1]==j) or (themenus[i][0]['mouse'][2]==j)): - glLineStipple(random.randint(0,10),random.randint(0,65535)) - drawsquare(placex-1,placey-1,placex+themenus[i][j]['size']+1,placey+themenus[i][0]['size']+1,2,selectcolor) + if ((themenus[i][0]['mouse'][0]==j) or (themenus[i][0]['mouse'][1]==j) or (themenus[i][0]['mouse'][2]==j)): + if play>0: + glLineWidth(random.randint(1,3)) + glLineStipple(random.randint(0,10),random.randint(0,65535)) + drawsquare(placex,placey+(themenus[i][0]['size']-36)/2,placex+37,placey+(themenus[i][0]['size']-36)/2+37,2,selectcolor) + if ((themenus[i][0]['mouse'][0]==j) or (themenus[i][0]['mouse'][1]==j) or (themenus[i][0]['mouse'][2]==j)): + if play>0: + glLineStipple(random.randint(0,10),random.randint(0,65535)) + drawsquare(placex-1,placey+(themenus[i][0]['size']-36)/2-1,placex+38,placey+(themenus[i][0]['size']-36)/2+38,2,selectcolor) glLineStipple(0,65535) glLineWidth(1) placex+=themenus[i][j]['size'] @@ -1351,52 +1373,47 @@ txt_video=pyglet.text.Label("Options Video",font_name='Mechanihan',font_size=30, ''' *********************************************************************************************** ''' ''' Fonctions liees aux menus ''' -def settings(dummy1,dummy2,dummy3,dummy4): +def sound(state): + print "sound" + +def nosound(state): + print "nosound" + +def settings(state): global level,world reallystop() savelevel(world,level) sync() level=-2 -def loadfromit(dummy1,dummy2,dummy3,dummy4,save): +def loadfromit(state): global users,world_art,world_new,world,level - if save<99999: - world_new=copy.deepcopy(users[save][1]) - world_art=copy.deepcopy(users[save][2]) - else: + if state['j']==1: readlevel(world,level,False) + else: + world_new=copy.deepcopy(users[len(users)-state['j']+1][1]) + world_art=copy.deepcopy(users[len(users)-state['j']+1][2]) -def loadfrom(dummy1,dummy2,dummy3,dummy4): +def loadfrom(state): global menus,savenames,users if menus[2][0]['visible']: menus[2][0]['visible']=False return - if len(menus[2])<10: - menus[2].append({'nom': 'loadfromit', 'params': 99999, 'tech':1, 'popup':'Version originale', 'size':0,'drag': False, 'icon': {'color': [220, 220, 220], 'text': '#', 'activable': False},'variable':False,'visible':True,'separe':True,'squarred':False}) - for i in range(1,len(savenames)): - if i<=len(users): - menus[2].append({'nom': 'loadfromit', 'params': len(users)-i, 'tech':1, 'popup':users[len(users)-i][0].strftime("%Y-%m-%d %H:%M"), 'size':0,'drag': False, 'icon': {'color': [220, 220, 220], 'text': savenames[i], 'activable': False},'variable':False,'visible':True,'separe':False,'squarred':False}) - else: - menus[2].append({'nom': 'setnothinga', 'tech':1, 'popup':0, 'size':0,'drag': False, 'icon': {'color': [40, 40, 40], 'text': savenames[i], 'activable': False},'variable':False,'visible':True,'separe':False,'squarred':False}) - else: - for i in range(1,len(savenames)): - if i<=len(users): - menus[2][i]['popup']=users[len(users)-i][0].strftime("%Y-%m-%d %H:%M") - menus[2][i]['icon']['color']=[220, 220, 220] - else: - menus[2][i]['popup']=0 - menus[2][i]['icon']['color']=[40, 40, 40] + if len(menus[2])<=1: + menus[2].append({'click': 'loadfromit', 'motion':'popup', 'tech':1, 'value':'Version originale', 'size':0, 'icon': {'color': [255, 100, 100], 'text': '#', 'activable': False},'active':True,'variable':True,'visible':True,'separe':True,'squarred':False}) + for i in range(len(savenames)): + menus[2].append({'click': 'loadfromit', 'motion':'popup', 'tech':1, 'value':'#users[len(users)-'+str(i)+'-1][0].strftime("%Y-%m-%d %H:%M")', 'size':0, 'icon': {'color': [255, 255, 255], 'colorise':True, 'text': savenames[i], 'activable': False},'active':'len(users)>'+str(i),'variable':True,'visible':True,'separe':False,'squarred':False}) menus[2][0]['visible']=True -def save(dummy1,dummy2,dummy3,dummy4): +def save(state): global world_art,world_dat,world,level,users users.append([datetime.datetime.now(),copy.deepcopy(world_new),copy.deepcopy(world_art)]) savelevel(world,level) sync() -def speed(x,y,dummy1,dummy2): +def speed(state): global play,zoom - if x==1980 and y==2: + if state.has_key('-'): play=float(play)*2 else: play=float(play)/2 @@ -1406,67 +1423,80 @@ def speed(x,y,dummy1,dummy2): play=2.5 clock.unschedule(calculate) clock.schedule_interval(calculate,play) + +def othersit(state): + menus[0][18]['icon']=copy.deepcopy(menus[3][state['j']]['value']) -def others(x,y,dummy1,dummy2): +def others(state): global tech,menus - if x>=1 and y>=1 and x=1 and state['realy']>=1 and state['realx']= 0: - world_art[x][y] = value + world_art[state['realx']][state['realy']] = value infos() -def setnothinga(x,y,dummy1,dummy2): - infos() +def setnothinga(state): + state() -def setnothing(x,y,dummy1,dummy2): +def setnothing(state): global tech - if x>=1 and y>=1 and x=1 and state['realy']>=1 and state['realx']=1 and y>=1 and x=1 and state['realy']>=1 and state['realx']= 0: - world_new[x][y] = art['copper']['value'] + world_new[state['realx']][state['realy']] = art['copper']['value'] infos() -def setfiber(x,y,dummy1,dummy2): - if x>=1 and y>=1 and x=1 and state['realy']>=1 and state['realx']= 0: - world_new[x][y]=art['fiber']['value'] + world_new[state['realx']][state['realy']]=art['fiber']['value'] infos() -def tutoriel(dummy1,dummy2,dummy3,dummy4): +def settutoriel(state): print "tuto" -def popup(dummy1,dummy2,dummy3,dummy4): +def setpopup(state): print "popup" -def simple(dummy1,dummy2,dummy3,dummy4): +def setsimple(state): print "simple" -def levels(dummy1,dummy2,dummy3,dummy4): +def levels(state): global level,world reallystop() savelevel(world,level) sync() level=-1 -def exits(dummy1,dummy2,dummy3,dummy4): +def exits(state): + global level,world if level>=0: savelevel(world,level) sync() pyglet.app.exit() -def stater(dummy1,dummy2,dummy3,dummy4): +def stater(state): global seestat if seestat>3: seestat=0 @@ -1474,43 +1504,83 @@ def stater(dummy1,dummy2,dummy3,dummy4): seestat=seestat+1 resize() -def stop(dummy1,dummy2,dummy3,dummy4): +def stop(state): reallystop() -def run(dummy1,dummy2,dummy3,dummy4): +def run(state): reallyrun() -def move(dummy1,dummy2,dx,dy): +def move(state): global decx,decy - decx=decx+dx - decy=decy+dy + decx=decx+state['dx'] + decy=decy+state['dy'] -def screen(dummy1,dummy2,dummy3,dummy4): - if win.fullscreen: - win.set_fullscreen(fullscreen=False) - else: - win.set_fullscreen(fullscreen=True) +def fullscreen(state): + win.set_fullscreen(fullscreen=True) + resize() + +def windowed(state): + win.set_fullscreen(fullscreen=False) resize() -def zoomm(x,y,dummy1,dummy2): +def zoomm(state): global zoom,decx,decy - if zoom>2: - decx=decx+2*x - decy=decy+2*y - zoom=zoom-2 + decx=decx+2*state['realx'] + decy=decy+2*state['realy'] + zoom=zoom-2 -def zoomp(x,y,dummy1,dummy2): +def zoomp(state): global zoom,decx,decy - decx=decx-2*x - decy=decy-2*y + decx=decx-2*state['realx'] + decy=decy-2*state['realy'] zoom=zoom+2 +def popup(state): + global allcout,menus + allcout[0]=state['x'] + allcout[1]=state['y'] + if type(menus[state['i']][state['j']]['value']) is list: + allcout[2]=menus[state['i']][state['j']]['value'][menus[state['i']][state['j']]['choose']] + else: + allcout[2]=menus[state['i']][state['j']]['value'] + if type(allcout[2]) is str and allcout[2][0]=="#": + allcout[2]=eval(allcout[2][1:]) ''' *********************************************************************************************** ''' -''' Fonctions liée à la gestion des menus ''' +''' Fonctions liée à la gestion des menus ''' +def launch(x,y,dx,dy,i,j,buttons,modifiers,onmenu): + global menus,decx,decy,zoom + realx=(x-decx)/zoom + realy=(y-decy)/zoom + state={'x':x,'y':y,'realx':realx, 'realy':realy, 'dx':dx, 'dy':dy, 'i':i, 'j':j, 'buttons':buttons, 'modifiers':modifiers, 'onmenu': onmenu} + if buttons==0: + state['event']='motion' + else: + if dx==0 and dy==0: + state['event']='click' + else: + state['event']='drag' + '''print state''' + if onmenu and state['event']=='click' and menus[i][0]['selectable']: + menus[i][0]['mouse'][buttons-1]=j + if menus[i][j].has_key(state['event']): + if type(menus[i][j][state['event']]) is list: + if callable(eval(menus[i][j][state['event']][menus[i][j]['choose']])): + eval(menus[i][j][state['event']][menus[i][j]['choose']]+"("+str(state)+")") + if state['event']=='click': + menus[i][j]['choose']+=1 + if menus[i][j]['choose']>=len(menus[i][j]['click']): + menus[i][j]['choose']=0 + return True + else: + if callable(eval(menus[i][j][state['event']])): + eval(menus[i][j][state['event']]+"("+str(state)+")") + return True + return False + def testmenu(themenus,x,y,dx,dy,buttons,modifiers): - global tech,play,decx,decy,zoom + global tech allcout[2]=0 for i in range(len(themenus)): if themenus[i][0]['visible']: @@ -1526,43 +1596,21 @@ def testmenu(themenus,x,y,dx,dy,buttons,modifiers): placex=0 for j in range(1,len(themenus[i])): if themenus[i][j]['size']<30: continue - if not themenus[i][j]['visible']: continue - if themenus[i][j]['tech']>tech: + if type(themenus[i][j]['visible']) is str and not eval(themenus[i][j]['visible']) or not themenus[i][j]['visible']: continue + if themenus[i][j]['tech']>tech or not ((type(themenus[i][j]['active']) is str and eval(themenus[i][j]['active'])) or (type(themenus[i][j]['active']) is not str and themenus[i][j]['active'])): placex+=themenus[i][j]['size'] continue if x>placex and xplacey and y0: - realx=(x-decx)/zoom - realy=(y-decy)/zoom - if themenus[i][0]['selectable']: - themenus[i][0]['mouse'][buttons-1]=j - if themenus[i][j].has_key('choose'): - eval(themenus[i][j]['nom'][themenus[i][j]['choose']]+"("+str(realx)+","+str(realy)+","+str(dx)+","+str(dy)+")") - themenus[i][j]['choose']+=1 - if themenus[i][j]['choose']>=len(themenus[i][j]['nom']): - themenus[i][j]['choose']=0 - else: - eval(themenus[i][j]['nom']+"("+str(realx)+","+str(realy)+","+str(dx)+","+str(dy)+")") - else: - allcout[0]=x - allcout[1]=y - if type(themenus[i][j]['nom']) is list: - allcout[2]=themenus[i][j]['popup'][themenus[i][j]['choose']] - else: - allcout[2]=themenus[i][j]['popup'] + return launch(x,y,dx,dy,i,j,buttons,modifiers,True) placex+=themenus[i][j]['size'] return def testgrid(themenus,x,y,dx,dy,buttons,modifiers): for i in range(len(themenus)): - if themenus[i][0]['visible'] and themenus[i][0]['selectable']: - for j in range(3): - if themenus[i][themenus[i][0]['mouse'][j]]['drag'] and buttons==j+1: - realx=(x-decx)/zoom - realy=(y-decy)/zoom - eval(themenus[i][themenus[i][0]['mouse'][j]]['nom']+"("+str(realx)+","+str(realy)+","+str(dx)+","+str(dy)+")") - break - + if themenus[i][0]['visible'] and themenus[i][0]['selectable'] and themenus[i][0].has_key('mouse'): + if buttons>0: + launch(x,y,dx,dy,i,themenus[i][0]['mouse'][buttons-1],buttons,modifiers,False) + ''' *********************************************************************************************** ''' ''' Fonctions evenementielles ''' @@ -1585,17 +1633,18 @@ def on_key_press(symbol, modifiers): if symbol==key.BACKSPACE: erase() elif symbol==key.RETURN: - run(0,0,0,0) + if play>0: + stop({}) + else: + run({}) elif symbol==key.NUM_SUBTRACT: - speed(1980,2,0,0) + speed({'-':True}) elif symbol==key.NUM_ADD: - speed(1980,1,0,0) + speed({'+':True}) @win.event def on_mouse_motion(x, y, dx, dy): global world,selected,allcout,over,level,worlds,finished,users,menus - if level>=0: - testmenu(menus,x,y,dx,dy,0,0) selected=-1 for l in range(len(worlds[world])): ele=worlds[world][l] @@ -1607,6 +1656,8 @@ def on_mouse_motion(x, y, dx, dy): selected=-3 if x>920 and y>150 and x<1024 and y<240: selected=-4 + if level<0: return + testmenu(menus,x,y,dx,dy,0,0) @win.event def on_mouse_drag(x, y, dx, dy, buttons, modifiers): @@ -1654,8 +1705,8 @@ def on_mouse_press(x, y, button, modifiers): ambiance.pause() selected=-1 return - testmenu(menus,x,y,0,0,[mouse.LEFT,mouse.MIDDLE,mouse.RIGHT].index(button)+1,modifiers) - testgrid(menus,x,y,0,0,[mouse.LEFT,mouse.MIDDLE,mouse.RIGHT].index(button)+1, modifiers) + if not testmenu(menus,x,y,0,0,[mouse.LEFT,mouse.MIDDLE,mouse.RIGHT].index(button)+1,modifiers): + testgrid(menus,x,y,0,0,[mouse.LEFT,mouse.MIDDLE,mouse.RIGHT].index(button)+1, modifiers) @win.event def on_resize(width,height): diff --git a/dbdata b/dbdata index 218e0396d3479911128755184508c9619443ad0d..5ad4506cffd63e51c38d1235159b73f3474fd9c0 100644 GIT binary patch literal 73728 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 Xtrfm3*0dH+Pe`DYzV=UCu>XGm6=vN^ literal 73728 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','separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': ['sound','nosound'], 'tech':-1, 'value':['Activer son','Desactiver son'], 'size':45, 'icon': ['picture/sound.png','picture/nosound.png'], 'choose': 0,'variable':False,'visible':'win.width>1450','separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': ['settutoriel','setpopup','setsimple'], 'tech':-1, 'value':['Activer Tutoriel','Activer Popup','Sans aide/Tutoriel',], 'size':45,'icon': ['picture/tuto.png','picture/popup.png','picture/nothing.png'], 'choose': 0,'variable':False,'visible':True,'separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'settings', 'tech':-1, 'value':'Options...', 'size':45,'icon': 'picture/settings.png','variable':False,'visible':True,'separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'exits', 'tech':-1, 'value':'Quitter', 'size':45,'icon': 'picture/exits.png','variable':False,'visible':True,'separe':True,'squarred':False,'active': True}, +{'motion':'popup','click': 'setcopper', 'drag': 'setcopper' ,'tech':0, 'value':'Cuivre', 'size':45,'icon': [240, 100, 38],'variable':False,'visible':True,'separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'setfiber', 'drag': 'setfiber', 'tech':2, 'value':'Fibre', 'size':45,'icon': [208, 213, 79],'variable':False,'visible':True,'separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'setnothing', 'drag': 'setnothing','tech':0, 'value':'Effacer', 'size':45,'icon': [0, 0, 0],'variable':False,'visible':True,'separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'others', 'drag': 'others', 'tech':2, 'value':'Transmuteurs', 'size':45,'icon': '','variable':False,'visible':True,'separe':True,'squarred':False,'active': True}, +{'motion':'popup','click': 'stat', 'tech':2, 'value':'Statistiques totaux', 'size':0, 'icon': 'drawstat', 'params': '''[stat[0],stat[1],stat[3],stat[4],stat[5],stat[6],stat[2],stat[7],stat[8]],[art['headb2']['color'],art['headb']['color'],art['head']['color'],art['head2']['color'],art['headr']['color'],art['headr2']['color'],art['headp']['color'],art['neut']['color'],art['prot']['color']]''', 'variable':True,'visible':'win.width<1280','separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'stat1', 'tech':2, 'value':'Statistiques electrons', 'size':0, 'icon': 'drawstat', 'params': '''[stat[0],stat[1],stat[3],stat[4],stat[5],stat[6]],[art['headb2']['color'],art['headb']['color'],art['head']['color'],art['head2']['color'],art['headr']['color'],art['headr2']['color']]''', 'variable':True,'visible':'win.width>=1280','separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'stat2', 'tech':2, 'value':'Statistiques hors electrons', 'size':0, 'icon': 'drawstat', 'params': '''[stat[2],stat[7],stat[8]],[art['headp']['color'],art['neut']['color'],art['prot']['color']]''','variable':True,'visible':'win.width>=1280','separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'cout', 'tech':0,'text':'#str(cout-thecout)', 'value':'Argent', 'size':140, 'icon': 'picture/cout.png','variable':False,'visible':True,'separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'tech', 'tech':1,'text':'#str(tech)', 'value':'Degre technologique', 'size':65, 'icon': 'picture/tech.png','variable':False,'visible':True,'separe':False,'squarred':False,'active': True}, ] , [ -{'place':'top','visible':True,'variable':False,'size':50,'selectable':False}, -{'nom': 'cycle','text':'str(cycle)','text2':"if maxcycle<99999: return str(maxcycle) else: return 'illimite'", 'tech':-2, 'popup':'Nb de cycles', 'size':0, 'drag': False, 'icon': 'picture/cycle.png', 'variable':True,'visible':True,'separe':False,'squarred':False}, -{'nom': 'nrj','text':'str(nrj)','text2':"if maxnrj<99999: return str(maxnrj) else: return 'illimite'", 'tech':5, 'popup':'Quantite energie', 'size':0, 'drag': False, 'icon': 'picture/nrj.png','variable':True,'visible':True,'separe':False,'squarred':False}, -{'nom': 'rayon','text':'str(rayon)','text2':"if maxrayon<99999: return str(maxrayon) else: return 'illimite'", 'tech':6, 'popup':'Niveau de rayonnements', 'size':0,'drag': False,'icon': 'picture/rayon.png','variable':True,'visible':True,'separe':False,'squarred':False}, -{'nom': 'temp','text':'str(temp)','text2':"if maxtemp<99999: return str(maxtemp) else: return 'illimite'", 'tech':7, 'popup':'Temperature ambiante', 'size':0,'drag': False,'icon': 'picture/temp.png','variable':True,'visible':True,'separe':True,'squarred':False}, -{'nom': 'objectif', 'tech':-1, 'popup':'Objectif a atteindre', 'size':44, 'drag': True,'icon': 'drawelement','variable':False,'visible':True,'separe':False,'squarred':False}, -{'nom': 'condition', 'tech':0, 'popup':'Conditions de victoire', 'size':300, 'drag': False, 'icon': 'drawcondvictory','icon_params': '[90,90,90]','variable':False,'visible':True,'separe':False,'squarred':False}, +{'motion':'popup','place':'top','visible':True,'variable':False,'size':50,'selectable':False}, +{'motion':'popup','click': 'cycle','text':'#str(cycle)','text2':"#if maxcycle<99999: return str(maxcycle) else: return 'illimite'", 'tech':-2, 'value':'Nb de cycles', 'size':0, 'icon': 'picture/cycle.png', 'variable':True,'visible':True,'separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'nrj','text':'#str(nrj)','text2':"#if maxnrj<99999: return str(maxnrj) else: return 'illimite'", 'tech':5, 'value':'Quantite energie', 'size':0, 'icon': 'picture/nrj.png','variable':True,'visible':True,'separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'rayon','text':'#str(rayon)','text2':"#if maxrayon<99999: return str(maxrayon) else: return 'illimite'", 'tech':6, 'value':'Niveau de rayonnements', 'size':0,'icon': 'picture/rayon.png','variable':True,'visible':True,'separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'temp','text':'#str(temp)','text2':"#if maxtemp<99999: return str(maxtemp) else: return 'illimite'", 'tech':7, 'value':'Temperature ambiante', 'size':0,'icon': 'picture/temp.png','variable':True,'visible':True,'separe':True,'squarred':False,'active': True}, +{'motion':'popup','click': 'objectif', 'tech':-1, 'value':'Objectif a atteindre', 'size':44, 'icon': 'drawelement','variable':False,'visible':True,'separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'condition', 'tech':0, 'value':'Conditions de victoire', 'size':300, 'icon': 'drawcondvictory','params': '[90,90,90]','variable':False,'visible':True,'separe':False,'squarred':False,'active': True}, ], [ {'place':'bottom+','visible':False,'size':0,'variable':True,'selectable':False},