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 218e039..5ad4506 100644 Binary files a/dbdata and b/dbdata differ diff --git a/dbsrc b/dbsrc index 6e55cfe..94050bb 100644 --- a/dbsrc +++ b/dbsrc @@ -1036,40 +1036,40 @@ art={ menus=[ [ -{'place':'bottom','visible':True,'size':50,'variable':False,'selectable':True,'mouse':[1,2,3]}, -{'nom': ['run','stop'], 'tech':-1, 'popup':['Simuler','Fin simulation'], 'size':45, 'drag': False, 'icon': ['picture/run.png','picture/stop.png'], 'choose': 0,'variable':False,'visible':True,'separe':False,'squarred':True}, -{'nom': 'speed', 'tech':0, 'popup':'Vitesse', 'size':45, 'drag': False, 'icon': 'picture/speed.png','variable':False,'visible':True,'separe':True,'squarred':False}, -{'nom': 'loadfrom', 'tech':1, 'popup':'Charger', 'size':45,'drag': False,'icon': 'picture/raz.png','variable':False,'visible':True,'separe':False,'squarred':False}, -{'nom': 'save', 'tech':1, 'popup':'Enregistrer', 'size':45,'drag': False,'icon': 'picture/save.png','variable':False,'visible':True,'separe':True,'squarred':False}, -{'nom': 'move', 'tech':-1, 'popup':'Deplacer', 'size':45, 'drag': True,'icon': 'picture/move.png','variable':False,'visible':True,'separe':False,'squarred':False}, -{'nom': 'zoomp','tech':-1, 'popup':'Zommer', 'size':45, 'drag': False, 'icon': 'picture/zoomp.png','variable':False,'visible':True,'separe':False,'squarred':False}, -{'nom': 'zoomm', 'tech':-1, 'popup':'Dezommer', 'size':45, 'drag': False, 'icon': 'picture/zoomm.png','variable':False,'visible':True,'separe':True,'squarred':False}, -{'nom': 'stater', 'tech':2, 'popup':'Statistiques...', 'size':45,'drag': False, 'icon': 'picture/stat.png','variable':False,'visible':True,'separe':False,'squarred':False}, -{'nom': 'levels', 'tech':-1, 'popup':'Laboratoires', 'size':45, 'drag': False,'icon': 'picture/levels.png','variable':False,'visible':True,'separe':False,'squarred':False}, -{'nom': ['fullscreen','windowed'], 'tech':-1, 'popup':['Plein ecran','Fenetre'], 'size':45, 'drag': False, 'icon': ['picture/screen.png','picture/windows.png'], 'choose': 0,'variable':False,'visible':False,'separe':False,'squarred':False}, -{'nom': ['sound','nosound'], 'tech':-1, 'popup':['Activer son','Desactiver son'], 'size':45, 'drag': False, 'icon': ['picture/sound.png','picture/nosound.png'], 'choose': 0,'variable':False,'visible':False,'separe':False,'squarred':False}, -{'nom': ['tutoriel','popup','simple'], 'tech':-1, 'popup':['Activer Tutoriel','Activer Popup','Sans aide/Tutoriel',], 'size':45, 'drag': False, 'icon': ['picture/tuto.png','picture/popup.png','picture/nothing.png'], 'choose': 0,'variable':False,'visible':True,'separe':False,'squarred':False}, -{'nom': 'settings', 'tech':-1, 'popup':'Options...', 'size':45, 'drag': False, 'icon': 'picture/settings.png','variable':False,'visible':True,'separe':False,'squarred':False}, -{'nom': 'exits', 'tech':-1, 'popup':'Quitter', 'size':45,'drag': False,'icon': 'picture/exits.png','variable':False,'visible':True,'separe':True,'squarred':False}, -{'nom': 'setcopper', 'tech':0, 'popup':'Cuivre', 'size':45,'drag': True, 'icon': [240, 100, 38],'variable':False,'visible':True,'separe':False,'squarred':False}, -{'nom': 'setfiber', 'tech':2, 'popup':'Fibre', 'size':45,'drag': True, 'icon': [208, 213, 79],'variable':False,'visible':True,'separe':False,'squarred':False}, -{'nom': 'setnothing', 'tech':0, 'popup':'Effacer', 'size':45,'drag': True, 'icon': [0, 0, 0],'variable':False,'visible':True,'separe':False,'squarred':False}, -{'nom': 'others', 'tech':2, 'popup':'Transmuteurs', 'size':45,'drag': True, 'icon': '','variable':False,'visible':True,'separe':True,'squarred':False}, -{'nom': 'stat', 'tech':2, 'popup':'Statistiques', 'size':0,'drag': False, 'icon': 'drawstat', 'icon_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':True,'separe':False,'squarred':False}, -{'nom': 'stat1', 'tech':2, 'popup':'Statistiques', 'size':0,'drag': False, 'icon': 'drawstat', 'icon_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':False,'separe':False,'squarred':False}, -{'nom': 'stat2', 'tech':2, 'popup':'Statistiques hors electrons', 'size':0,'drag': False, 'icon': 'drawstat', 'icon_params': '''[stat[2],stat[7],stat[8]],[art['headp']['color'],art['neut']['color'],art['prot']['color']]''','variable':True,'visible':False,'separe':True,'squarred':False}, -{'nom': 'cout', 'tech':0,'text':'str(cout-thecout)', 'popup':'Argent', 'size':140,'drag': False, 'icon': 'picture/cout.png','variable':False,'visible':True,'separe':False,'squarred':False}, -{'nom': 'tech', 'tech':1,'text':'str(tech)', 'popup':'Degre technologique', 'size':65,'drag': False, 'icon': 'picture/tech.png','variable':False,'visible':True,'separe':False,'squarred':False}, +{'motion':'popup','place':'bottom','visible':True,'size':50,'variable':False,'selectable':True,'mouse':[1,5,6]}, +{'motion':'popup','click': ['run','stop'], 'tech':-1, 'value':['Simuler','Fin simulation'], 'size':45, 'icon': ['picture/run.png','picture/stop.png'], 'choose': 0,'variable':False,'visible':True,'separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'speed', 'tech':0, 'value':'Vitesse', 'size':45,'icon': 'picture/speed.png','variable':False,'visible':True,'separe':True,'squarred':False,'active': True}, +{'motion':'popup','click': 'loadfrom', 'tech':1, 'value':'Charger', 'size':45,'icon': 'picture/raz.png','variable':False,'visible':True,'separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'save', 'tech':1, 'value':'Enregistrer', 'size':45,'icon': 'picture/save.png','variable':False,'visible':True,'separe':True,'squarred':False,'active': True}, +{'motion':'popup','drag': 'move', 'tech':-1, 'value':'Deplacer', 'size':45,'icon': 'picture/move.png','variable':False,'visible':True,'separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'zoomp','tech':-1, 'value':'Zommer', 'size':45,'icon': 'picture/zoomp.png','variable':False,'visible':True,'separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'zoomm', 'tech':-1, 'value':'Dezommer', 'size':45,'icon': 'picture/zoomm.png','variable':False,'visible':True,'separe':True,'squarred':False,'active': False}, +{'motion':'popup','click': 'stater', 'tech':2, 'value':'Statistiques...', 'size':45,'icon': 'picture/stat.png','variable':False,'visible':True,'separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': 'levels', 'tech':-1, 'value':'Laboratoires', 'size':45,'icon': 'picture/levels.png','variable':False,'visible':True,'separe':False,'squarred':False,'active': True}, +{'motion':'popup','click': ['fullscreen','windowed'], 'tech':-1, 'value':['Plein ecran','Fenetre'], 'size':45,'icon': ['picture/screen.png','picture/windows.png'], 'choose': 0,'variable':False,'visible':'win.width>1450','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},