From f76847a81f7098b2942e982c319a03be0a9e7f51 Mon Sep 17 00:00:00 2001 From: Le_dahut Date: Mon, 12 May 2014 15:40:32 +0200 Subject: [PATCH] =?UTF-8?q?-=20Cr=C3=A9ation=20d'un=20syst=C3=A8me=20de=20?= =?UTF-8?q?gestion=20de=20menu=20centralis=C3=A9=20-=20Ajout=20de=20nouvea?= =?UTF-8?q?u=20ic=C3=B4nes=20-=20Suppression=20de=20la=20variable=20dat=20?= =?UTF-8?q?et=20remplacement=20par=20une=20variable=20unique=20Menus=20qui?= =?UTF-8?q?=20contient=20une=20structure=20d=C3=A9crivant=20le=20comportem?= =?UTF-8?q?ent=20des=20menus=20de=20jeu.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WireChem.py | 795 ++++++++++++++++++++++---------------------- dbdata | Bin 65536 -> 73728 bytes dbsrc | 109 +++--- picture/nosound.png | Bin 0 -> 445 bytes picture/nothing.png | Bin 0 -> 955 bytes picture/popup.png | Bin 0 -> 605 bytes picture/sound.png | Bin 0 -> 793 bytes picture/tuto.png | Bin 0 -> 810 bytes picture/windows.png | Bin 0 -> 454 bytes 9 files changed, 459 insertions(+), 445 deletions(-) create mode 100644 picture/nosound.png create mode 100644 picture/nothing.png create mode 100644 picture/popup.png create mode 100644 picture/sound.png create mode 100644 picture/tuto.png create mode 100644 picture/windows.png diff --git a/WireChem.py b/WireChem.py index 864d54c..c4559c8 100644 --- a/WireChem.py +++ b/WireChem.py @@ -81,15 +81,19 @@ def reference(var,noms): def duplicateref(d): for k in d.keys(): d[d[k]['nom']]=d[k] - -def interprete(d): - for k in d.keys(): - if 'icon' in d[k]: - if type(d[k]['icon']) is str and len(d[k]['icon'])>0 and d[k]['icon'][0]=="%": - d[k]['icon']=image.load(d[k]['icon'][1:]) - + +def loadpic(d): + for j in range(len(d)): + for k in range(len(d[j])): + 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: + for n in range(len(d[j][k]['icon'])): + d[j][k]['icon'][n]=image.load(d[j][k]['icon'][n]) + def initgrid(): - global users,art,Uworlds,statedvar,stat_var,seestat,adirection,worlds,finished,allcout,selected,world,level,over,mousel,mouser,mousem,sizex,sizey,world_old,world_new,world_art,dat,direction,zoom,play,stat,cycle,cout,thecout,rayon,unroll,debug,temp,decx,decy,nrj,tech,victory,current,maxnrj,maxrayon,maxcycle,maxtemp,nom,descriptif,element + global savenames,menus,users,art,Uworlds,statedvar,stat_var,seestat,adirection,worlds,finished,allcout,selected,world,level,over,sizex,sizey,world_old,world_new,world_art,dat,direction,zoom,play,stat,cycle,cout,thecout,rayon,debug,temp,decx,decy,nrj,tech,victory,current,maxnrj,maxrayon,maxcycle,maxtemp,nom,descriptif,element ''' Directions des electrons en fonction de la position de la queue ''' direction = {} @@ -102,15 +106,14 @@ 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=["#","α","β","γ","δ","ε","ζ","η","θ","ι","κ","λ","μ","ν","ξ","ο","π","ρ","ς","σ","τ","υ","φ","χ","ψ","ω"] verifyhome() read("dbdata") read(gethome()+"/dbdata") reference(worlds,['world','level']) reference(Uworlds,['world','level']) duplicateref(art) - duplicateref(dat) - interprete(dat) + loadpic(menus) ''' Variables globales ''' zoom=25 stat=[0,0,0,0,0,0,0,0,0] @@ -119,13 +122,10 @@ def initgrid(): current=[0,0,0,0,0,0,0,0,0,0,0,0,0] users=[] stat_var=[] - mousel=4 - mouser=0 - mousem=3 maxnrj=maxrayon=maxcycle=maxtemp=99999 allcout=[0,0,0] sizex=sizey=1 - seestat=thecout=world=over=play=cycle=rayon=temp=cout=decx=decy=unroll=nrj=0 + seestat=thecout=world=over=play=cycle=rayon=temp=cout=decx=decy=nrj=0 debug=0 tech=selected=level=-1 statedvar=[stat[0],stat[1],stat[2],stat[3],stat[4],stat[5],stat[6],stat[7],stat[8],nrj,temp,rayon,current[7],current[8],current[9],current[10],current[11],current[12]] @@ -157,7 +157,7 @@ def resize(): decy=-zoom+(win.height-zoom*(sizey-2))/2 def readlevel(w,l,user): - global worlds,unroll,mousel,mousem,mouser,cout,selected,sizex,sizey,unroll,stat,debug,tech + global worlds,cout,selected,sizex,sizey,stat,debug,tech if user: if w0: - dat['cout']['icon'].blit(740,110) + pic_cout.blit(740,110) txt_cout2.text=str(ele['cout']) txt_cout2.draw() if ele['maxcycle']<90000: - dat['cycle']['icon'].blit(740,65) + pic_cycle.blit(740,65) txt_maxcycle2.text=str(ele['maxcycle']) txt_maxcycle2.draw() if ele['tech']>0: - dat['tech']['icon'].blit(940,110) + pic_tech.blit(940,110) txt_tech2.text=str(ele['tech']) txt_tech2.draw() if ele['maxrayon']<90000: - dat['rayon']['icon'].blit(940,65) + pic_rayon.blit(940,65) txt_maxrayon2.text=str(ele['maxrayon']) txt_maxrayon2.draw() if ele['maxtemp']<90000: - dat['temp']['icon'].blit(850,110) + pic_temp.blit(850,110) txt_maxtemp2.text=str(ele['maxtemp']) txt_maxtemp2.draw() if ele['maxnrj']<90000: - dat['nrj']['icon'].blit(850,65) + pic_nrj.blit(850,65) txt_maxnrj2.text=str(ele['maxnrj']) txt_maxnrj2.draw() victory=ele['victory'] @@ -598,11 +584,22 @@ def drawworld(): txt_nom2.draw() def calc_space(nb,nbtot): - global unroll - return [2*win.width/3+20,(nb-1)*(win.height-100-math.trunc(unroll)*50)/nbtot+50+math.trunc(unroll)*50+20,win.width-20,nb*(win.height-100-math.trunc(unroll)*50)/nbtot+50+math.trunc(unroll)*50] + return [2*win.width/3+20,(nb-1)*(win.height-100)/nbtot+50+20,win.width-20,nb*(win.height-100)/nbtot+50] def drawpopup(): global allcout + if type(allcout[2]) is str: + txt_drag.x=allcout[0]-txt_drag.content_width/2 + if txt_drag.x<0: + txt_drag.x=0 + if txt_drag.x+txt_drag.content_width>win.width: + txt_drag.x=win.width-txt_drag.content_width + txt_drag.y=allcout[1]+6 + txt_drag.text=allcout[2] + drawsquare(txt_drag.x-3,allcout[1],txt_drag.x+txt_drag.content_width+3,allcout[1]+25,1,[40,40,40]) + drawsquare(txt_drag.x-3,allcout[1],txt_drag.x+txt_drag.content_width+3,allcout[1]+25,0,[255,255,255]) + txt_drag.draw() + return if tech<6: drawsquare(allcout[0],allcout[1],allcout[0]+90,allcout[1]+75,1,[40,40,40]) drawsquare(allcout[0],allcout[1],allcout[0]+90,allcout[1]+75,0,[255,255,255]) @@ -612,32 +609,32 @@ def drawpopup(): txt_drag.x=allcout[0]+45 txt_drag.y=allcout[1]+10 glColor3ub(255,255,255,255) - dat['cout']['icon'].blit(allcout[0]+2,allcout[1]+2) + pic_cout.blit(allcout[0]+2,allcout[1]+2) txt_drag.text=str(allcout[2]['cout']) txt_drag.draw() txt_drag.x=allcout[0]+45 txt_drag.y=allcout[1]+45 glColor3ub(255,255,255,255) - dat['tech']['icon'].blit(allcout[0]+2,allcout[1]+37) + pic_tech.blit(allcout[0]+2,allcout[1]+37) txt_drag.text=str(allcout[2]['tech']) txt_drag.draw() if tech>6: txt_drag.x=allcout[0]+45 txt_drag.y=allcout[1]+80 glColor3ub(255,255,255,255) - dat['nrj']['icon'].blit(allcout[0]+2,allcout[1]+72) + pic_nrj.blit(allcout[0]+2,allcout[1]+72) txt_drag.text=str(allcout[2]['nrj']) txt_drag.draw() txt_drag.x=allcout[0]+45 txt_drag.y=allcout[1]+115 glColor3ub(255,255,255,255) - dat['temp']['icon'].blit(allcout[0]+2,allcout[1]+107) + pic_temp.blit(allcout[0]+2,allcout[1]+107) txt_drag.text=str(allcout[2]['temp']) txt_drag.draw() def drawbigstat(page): - global unroll,stat_var - drawsquare(2*win.width/3,50+math.trunc(unroll)*50,win.width,win.height-50,1,[40,40,40]) + global stat_var + drawsquare(2*win.width/3,50,win.width,win.height-50,1,[40,40,40]) if page==1: coord=calc_space(1,3) drawcumulgraph(calc_space(1,3),[stat_var[0],stat_var[1],stat_var[3],stat_var[4],stat_var[5],stat_var[6]],1,[art['headb2']['color'],art['headb']['color'],art['head']['color'],art['head2']['color'],art['headr']['color'],art['headr2']['color']]) @@ -663,13 +660,13 @@ def drawbigstat(page): elif page==2: coord=calc_space(1,3) drawgraph(coord,stat_var[9],1,[180,180,180]) - dat['nrj']['icon'].blit(coord[0],coord[1]) + pic_nrj.blit(coord[0],coord[1]) coord=calc_space(2,3) drawgraph(coord,stat_var[10],1,[180,180,180]) - dat['temp']['icon'].blit(coord[0],coord[1]) + pic_temp.blit(coord[0],coord[1]) coord=calc_space(3,3) drawgraph(coord,stat_var[11],1,[180,180,180]) - dat['rayon']['icon'].blit(coord[0],coord[1]) + pic_rayon.blit(coord[0],coord[1]) elif page==3: coord=calc_space(1,6) drawgraph(coord,stat_var[17],1,art['prot']['color']) @@ -735,8 +732,120 @@ def drawvictory(): txt_over2.y=win.height/2-90 txt_over2.draw() +def drawelement(x,y,x2,y2): + global element,world,level,worlds + drawsquare(x,y,x2,y2,1,[240,int(worlds[world][level]['_xx']/1024.0*120+100), int(worlds[world][level]['_xx']/1024.0*120+100)]) + txt_element.text=element + txt_element.color=(int(worlds[world][level]['_xx']/1024.0*150),int(worlds[world][level]['_xx']/1024.0*150), int(worlds[world][level]['_xx']/1024.0*150),255) + txt_element.x=x+(x2-x-txt_element.content_width)/2 + txt_element.y=y+5 + txt_element.draw() + +def drawmenu(themenus): + global tech,play + for i in range(len(themenus)): + if themenus[i][0]['visible']: + if themenus[i][0]['place']=='bottom': + drawsquare(0,themenus[i][0]['size'],win.width,0,1,[40,40,40]) + placey=0 + elif themenus[i][0]['place']=='top': + drawsquare(0,win.height,win.width,win.height-themenus[i][0]['size'],1,[40,40,40]) + placey=win.height-themenus[i][0]['size'] + else: + for search in themenus: + if search[0]['place']=='bottom': + drawsquare(0,search[0]['size'],win.width,search[0]['size']+themenus[i][0]['size'],1,[40,40,40]) + placey=search[0]['size'] + break + sizeofall=0 + variables=0 + if themenus[i][0]['variable']: + themenus[i][0]['size']=win.width/len(themenus[i])-1 + 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'] + for j in range(1,len(themenus[i])): + if 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']: + 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 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) + 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']) + elif type(themenus[i][j]['icon']) is dict: + drawitem(placex,placey,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']+")") + else: + eval(themenus[i][j]['icon']+"("+str(placex)+","+str(placey)+","+str(placex+themenus[i][j]['size'])+","+str(placey+themenus[i][0]['size']-15)+")") + else: + glColor3ub(255,255,255) + 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]['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]) + 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.color=(255, 0, 0,255) + else: + txt_cout.color=(180, 180, 180,255) + txt_cout.x=placetemp+8 + txt_cout.y=placey+5 + 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.color=(255, 0, 0,255) + else: + txt_cout.color=(180, 180, 180,255) + txt_cout.x=placetemp+5 + txt_cout.y=placey+5 + txt_cout.draw() + if themenus[i][0]['selectable']: + if (themenus[i][0]['mouse'][0]==j): + selectcolor=[255,0,0,40] + elif (themenus[i][0]['mouse'][1]==j): + 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) + glLineStipple(0,65535) + glLineWidth(1) + placex+=themenus[i][j]['size'] + return + + def drawgrid(zoom): - global temp,debug,over,allcout,play,element,seestat,art,users + global temp,debug,over,allcout,play,element,seestat,art,users,menus glLineWidth(3) if play>0: drawsquare(decx-1+zoom,decy-1+zoom,decx+zoom*(sizex-1)+1,decy+zoom*(sizey-1)+2,0,[255,0,0]) @@ -771,280 +880,20 @@ def drawgrid(zoom): glVertex2i(x*zoom+decx,(y+1)*zoom+decy) glEnd() drawitem(x*zoom+decx,y*zoom+decy,art[wart(x,y)],zoom,getactive(x,y)) - drawsquare(0,win.height,win.width,win.height-50,1,[40,40,40]) - drawsquare(0,50,win.width,0,1,[40,40,40]) - if unroll==1: - if debug==1: - nbelements=44 - else: - nbelements=29 - size=win.width/nbelements - drawsquare(0,57+size,win.width,0,1,[40,40,40]) - cat=65555 - for i in range(nbelements): - it=art[int("0x30000",16)+i] - if it['tech']<=tech: - drawitem(10+i*size,55,art[int("0x30000",16)+i],size-6,10) - if it['cat']!=cat: - drawsquare(7+i*size,55,8+i*size,55+size,0,[90,90,90]) - cat=it['cat'] - elif unroll==1.01: - savenames=["#","α","β","γ","δ","ε","ζ","η","θ","ι","κ","λ","μ","ν","ξ","ο","π","ρ","ς","σ","τ","υ","φ","χ","ψ","ω"] - nbelements=len(savenames) - size=win.width/nbelements - drawsquare(0,57+size,win.width,0,1,[40,40,40]) - drawsquare(7+1*size,55,8+1*size,55+size,0,[90,90,90]) - for i in range(nbelements): - if savenames[i]=="#" or i<=len(users): - drawitem(10+i*size,55,{'color': [220, 220, 220], 'text': savenames[i], 'activable': False},size-6,10) - else: - drawitem(10+i*size,55,{'color': [40, 40, 40], 'text': savenames[i], 'activable': False},size-6,10) - drawsquare(win.width-409,win.height-45,win.width-369,win.height-5,1,[240,int(worlds[world][level]['_xx']/1024.0*120+100), int(worlds[world][level]['_xx']/1024.0*120+100)]) - txt_element.text=element - txt_element.color=(int(worlds[world][level]['_xx']/1024.0*150),int(worlds[world][level]['_xx']/1024.0*150), int(worlds[world][level]['_xx']/1024.0*150),255) - txt_element.x=win.width-384-len(element)*10 - txt_element.y=win.height-38 - txt_element.draw() - addx=(win.width-1024)/4 - if addx<0: addx=0 - for i in range(4): - if (i==0 and tech>0) or (i==1 and tech>6) or (i==2 and tech>7) or (i==3 and tech>8): - glColor3ub(255,255,255) - dat[int("0x10000",16)+i]['icon'].blit(10+i*(150+addx),win.height-45) - if (tech>=5 and addx>100): - txt_temp.text=str(eval(dat[int("0x10000",16)+i]['nom'])) - txt_temp.x=50+i*(150+addx) - txt_temp.y=y=win.height-38 - txt_temp.color=(180, 180, 180,255) - txt_temp.font_size=24 - txt_temp.draw() - txt_temp.text="/"+str(eval("max"+dat[int("0x10000",16)+i]['nom'])) - if txt_temp.text=="/99999": txt_temp.text="/illimité".decode('utf-8') - txt_temp.x=150+i*(150+addx) - txt_temp.y=win.height-38 - txt_temp.color=(110, 110, 110,255) - txt_temp.font_size=12 - txt_temp.draw() - elif (tech>=5): - txt_temp.text=str(eval(dat[int("0x10000",16)+i]['nom'])) - txt_temp.x=50+i*(150+addx) - txt_temp.y=win.height-29 - txt_temp.color=(180, 180, 180,255) - txt_temp.font_size=24 - txt_temp.draw() - txt_temp.text=str(eval("max"+dat[int("0x10000",16)+i]['nom'])) - if txt_temp.text=="99999": txt_temp.text="illimité".decode('utf-8') - txt_temp.x=50+i*(150+addx) - txt_temp.y=win.height-47 - txt_temp.color=(110, 110, 110,255) - txt_temp.font_size=12 - txt_temp.draw() - else: - txt_temp.text=str(eval(dat[int("0x10000",16)+i]['nom'])) - txt_temp.x=50+i*(150+addx) - txt_temp.y=y=win.height-38 - txt_temp.color=(180, 180, 180,255) - txt_temp.font_size=24 - txt_temp.draw() - drawcondvictory(win.width-364,win.height-45,1020,win.height-5,[90,90,90]) - for i in range(16): - glColor3ub(255,255,255) - if dat[int("0x20000",16)+i]['icon']=="/": - drawitem(10+i*45,8,dat[int("0x20000",16)+i]['ref'],36,10) - elif dat[int("0x20000",16)+i]['icon']!="": - dat[int("0x20000",16)+i]['icon'].blit(10+i*45,8) - else: - drawsquare(10+i*45,8,46+i*45,44,1,dat[int("0x20000",16)+i]['color']) - if i==12 or i==7 or i==2 or i==4: - drawsquare(5+i*45,8,6+i*45,44,0,[90,90,90]) - if i==1: - drawsquare(45+i*45,8,49+i*45,44,1,[0,0,0]) - drawsquare(45+i*45,8,49+i*45,44*10*len(str(play))/100,1,[255,0,0]) - if (mousel==i): - selectcolor=[255,0,0,40] - elif (mouser==i): - selectcolor=[0,255,0,40] - elif (mousem==i): - selectcolor=[0,0,255,40] - else: - selectcolor=[40,40,40,0] - if play>0 and ((mousem==i) or (mousel==i) or (mouser==i)): - glLineWidth(random.randint(1,3)) - glLineStipple(random.randint(0,10),random.randint(0,65535)) - drawsquare(10+i*45,8,46+i*45,44,2,selectcolor) - if play>0 and ((mousem==i) or (mousel==i) or (mouser==i)): - glLineStipple(random.randint(0,10),random.randint(0,65535)) - drawsquare(9+i*45,7,47+i*45,45,2,selectcolor) - glLineStipple(0,65535) - glLineWidth(1) - drawsquare(5+16*45,8,6+16*45,44,0,[90,90,90]) - posx=10+16*45 - addx=130+win.width-1024 - if addx<500: - drawstat(posx,8,posx+addx,44,[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']]) - else: - drawstat(posx,8,posx+(addx-20)/2,44,[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']]) - drawstat(posx+(addx-20)/2+20,8,posx+addx,44,[stat[2],stat[7],stat[8]],[art['headp']['color'],art['neut']['color'],art['prot']['color']]) - if tech>=0: - glColor3ub(255,255,255) - dat['cout']['icon'].blit(posx+addx+4,7) - txt_cout.text=str(cout-thecout) - txt_cout.x=posx+addx+44 - if (cout-thecout)>0: - txt_cout.color=(180, 180, 180,255) - else: - txt_cout.color=(255, 0, 0,255) - txt_cout.draw() - if tech>0: - glColor3ub(255,255,255) - dat['tech']['icon'].blit(posx+addx+109,7) - txt_tech.x=posx+addx+144 - txt_tech.text=str(tech) - txt_tech.draw() + + drawmenu(menus) if seestat>=1: drawbigstat(seestat) if over>0: drawgameover() if over<0: drawvictory() if allcout[2]>0: drawpopup() + return -''' *********************************************************************************************** ''' -''' Fonctions liees aux menus ''' -def settings(dummy1,dummy2,dummy3,dummy4): - global level,world - reallystop() - savelevel(world,level) - sync() - level=-2 - -def raz(dummy1,dummy2,dummy3,dummy4): - global unroll - if unroll!=0: - unroll=0 - else: - unroll=1.01 - -def save(dummy1,dummy2,dummy3,dummy4): - 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): - global play,zoom - if x==1980 and y==2: - play=float(play)*2 - else: - play=float(play)/2 - if play>=5: - play=0.01953125 - if play<0.01953125: - play=2.5 - clock.unschedule(calculate) - clock.schedule_interval(calculate,play) - -def others(x,y,dummy1,dummy2): - global tech - if x>=1 and y>=1 and x= 0: - world_art[x][y] = value - infos() - -def setnothinga(x,y,dummy1,dummy2): - infos() - -def setnothing(x,y,dummy1,dummy2): - global tech - if x>=1 and y>=1 and x=1 and y>=1 and x= 0: - world_new[x][y] = art['copper']['value'] - infos() - -def setfiber(x,y,dummy1,dummy2): - if x>=1 and y>=1 and x= 0: - world_new[x][y]=art['fiber']['value'] - infos() - -def levels(dummy1,dummy2,dummy3,dummy4): - global level,world - reallystop() - savelevel(world,level) - sync() - level=-1 - -def exits(dummy1,dummy2,dummy3,dummy4): - if level>=0: - savelevel(world,level) - sync() - pyglet.app.exit() - -def stater(dummy1,dummy2,dummy3,dummy4): - global seestat - if seestat>3: - seestat=0 - else: - seestat=seestat+1 - resize() - -def stop(dummy1,dummy2,dummy3,dummy4): - global play - if play>0: - reallystop() - else: - reallyrun() - -def run(dummy1,dummy2,dummy3,dummy4): - global play - if play>0: - reallystop() - else: - reallyrun() - -def move(dummy1,dummy2,dx,dy): - global decx,decy - decx=decx+dx - decy=decy+dy - -def screen(dummy1,dummy2,dummy3,dummy4): - if win.fullscreen: - win.set_fullscreen(fullscreen=False) - else: - win.set_fullscreen(fullscreen=True) - resize() - -def zoomm(x,y,dummy1,dummy2): - global zoom,decx,decy - if zoom>2: - decx=decx+2*x - decy=decy+2*y - zoom=zoom-2 - -def zoomp(x,y,dummy1,dummy2): - global zoom,decx,decy - decx=decx-2*x - decy=decy-2*y - zoom=zoom+2 - ''' *********************************************************************************************** ''' ''' Fonctions gestion du monde ''' def reallystop(): global play,world,level,stat,stat_var,current,cycle,temp,nrj,rayon - dat['run']['value']='stop' play=0 clock.unschedule(calculate) current=copy.deepcopy(worlds[world][level]['current']) @@ -1063,7 +912,6 @@ def reallystop(): def reallyrun(): global play play=0.15625 - dat['run']['value']='run' clock.schedule_interval(calculate,play) def retriern(): @@ -1467,6 +1315,12 @@ pic_arrows=image.load("picture/arrows.png") pic_arrows2=image.load("picture/arrows2.png") pic_levels2=image.load("picture/levels2.png") pic_locked=image.load("picture/locked.png") +pic_cycle=image.load("picture/cycle.png") +pic_nrj=image.load("picture/nrj.png") +pic_temp=image.load("picture/temp.png") +pic_rayon=image.load("picture/rayon.png") +pic_cout=image.load("picture/cout.png") +pic_tech=image.load("picture/tech.png") document=pyglet.text.decode_attributed("test") txt_description=pyglet.text.layout.TextLayout(document,dpi=72,multiline=True,width=732,height=140) txt_description.x=8 @@ -1494,9 +1348,223 @@ txt_temp=pyglet.text.Label("",font_name='Mechanihan',font_size=20,x=0,y=0,bold=F txt_son=pyglet.text.Label("Reglages du son",font_name='Mechanihan',font_size=30,x=0,y=0,bold=False,italic=False,color=(180, 180, 180,255)) txt_video=pyglet.text.Label("Options Video",font_name='Mechanihan',font_size=30,x=0,y=0,bold=False,italic=False,color=(180, 180, 180,255)) +''' *********************************************************************************************** ''' +''' Fonctions liees aux menus ''' + +def settings(dummy1,dummy2,dummy3,dummy4): + global level,world + reallystop() + savelevel(world,level) + sync() + level=-2 + +def loadfromit(dummy1,dummy2,dummy3,dummy4,save): + 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: + readlevel(world,level,False) + +def loadfrom(dummy1,dummy2,dummy3,dummy4): + 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] + menus[2][0]['visible']=True + +def save(dummy1,dummy2,dummy3,dummy4): + 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): + global play,zoom + if x==1980 and y==2: + play=float(play)*2 + else: + play=float(play)/2 + if play>=5: + play=0.01953125 + if play<0.01953125: + play=2.5 + clock.unschedule(calculate) + clock.schedule_interval(calculate,play) + +def others(x,y,dummy1,dummy2): + global tech,menus + if x>=1 and y>=1 and x= 0: + world_art[x][y] = value + infos() + +def setnothinga(x,y,dummy1,dummy2): + infos() + +def setnothing(x,y,dummy1,dummy2): + global tech + if x>=1 and y>=1 and x=1 and y>=1 and x= 0: + world_new[x][y] = art['copper']['value'] + infos() + +def setfiber(x,y,dummy1,dummy2): + if x>=1 and y>=1 and x= 0: + world_new[x][y]=art['fiber']['value'] + infos() + +def tutoriel(dummy1,dummy2,dummy3,dummy4): + print "tuto" + +def popup(dummy1,dummy2,dummy3,dummy4): + print "popup" + +def simple(dummy1,dummy2,dummy3,dummy4): + print "simple" + +def levels(dummy1,dummy2,dummy3,dummy4): + global level,world + reallystop() + savelevel(world,level) + sync() + level=-1 + +def exits(dummy1,dummy2,dummy3,dummy4): + if level>=0: + savelevel(world,level) + sync() + pyglet.app.exit() + +def stater(dummy1,dummy2,dummy3,dummy4): + global seestat + if seestat>3: + seestat=0 + else: + seestat=seestat+1 + resize() + +def stop(dummy1,dummy2,dummy3,dummy4): + reallystop() + +def run(dummy1,dummy2,dummy3,dummy4): + reallyrun() + +def move(dummy1,dummy2,dx,dy): + global decx,decy + decx=decx+dx + decy=decy+dy + +def screen(dummy1,dummy2,dummy3,dummy4): + if win.fullscreen: + win.set_fullscreen(fullscreen=False) + else: + win.set_fullscreen(fullscreen=True) + resize() + +def zoomm(x,y,dummy1,dummy2): + global zoom,decx,decy + if zoom>2: + decx=decx+2*x + decy=decy+2*y + zoom=zoom-2 + +def zoomp(x,y,dummy1,dummy2): + global zoom,decx,decy + decx=decx-2*x + decy=decy-2*y + zoom=zoom+2 + ''' *********************************************************************************************** ''' -''' Fonctions evenementielles liees a la fenetre ''' +''' Fonctions liée à la gestion des menus ''' + +def testmenu(themenus,x,y,dx,dy,buttons,modifiers): + global tech,play,decx,decy,zoom + allcout[2]=0 + for i in range(len(themenus)): + if themenus[i][0]['visible']: + if themenus[i][0]['place']=='bottom': + placey=8 + elif themenus[i][0]['place']=='top': + placey=win.height-themenus[i][0]['size']+8 + else: + for search in themenus: + if search[0]['place']=='bottom': + placey=search[0]['size']+8 + break + 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: + 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'] + 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 + +''' *********************************************************************************************** ''' +''' Fonctions evenementielles ''' @win.event def on_key_press(symbol, modifiers): @@ -1525,24 +1593,9 @@ def on_key_press(symbol, modifiers): @win.event def on_mouse_motion(x, y, dx, dy): - global world,selected,allcout,over,level,worlds,finished + global world,selected,allcout,over,level,worlds,finished,users,menus if level>=0: - realx=(x-decx)/zoom - realy=(y-decy)/zoom - if unroll==1: - if debug==1: - nbelements=44 - else: - nbelements=29 - size=win.width/nbelements - allcout[2]=0 - allcout[0]=x - allcout[1]=y - for i in range(nbelements): - if x>=5+i*size and x<=5+i*size+size and y>=55 and y<55+size: - if art[int("0x30000",16)+i]['tech']<=tech: - allcout[2]=art[int("0x30000",16)+i] - return + testmenu(menus,x,y,dx,dy,0,0) selected=-1 for l in range(len(worlds[world])): ele=worlds[world][l] @@ -1557,7 +1610,7 @@ def on_mouse_motion(x, y, dx, dy): @win.event def on_mouse_drag(x, y, dx, dy, buttons, modifiers): - global zoom,mousel,mouser,mousem,over,level,unroll + global zoom,over,level,menus if player.source and player.source.video_format: player.next() ambiance.play() @@ -1569,21 +1622,11 @@ def on_mouse_drag(x, y, dx, dy, buttons, modifiers): itsvictory_ok() return if level<0: return - realx=(x-decx)/zoom - realy=(y-decy)/zoom - mouses=23 - if buttons == mouse.LEFT: - mouses=mousel - if buttons == mouse.RIGHT: - mouses=mouser - if buttons == mouse.MIDDLE: - mouses=mousem - if mouses!=23 and dat[int("0x20000",16)+mouses]['drag']==1 and (unroll==0 or y>100) and (y>50): - eval(dat[int("0x20000",16)+mouses]['nom']+"("+str(realx)+","+str(realy)+","+str(dx)+","+str(dy)+")") - + testgrid(menus,x,y,dx,dy,[mouse.LEFT,mouse.MIDDLE,mouse.RIGHT].index(buttons)+1, modifiers) + @win.event def on_mouse_press(x, y, button, modifiers): - global zoom,mousel,mouser,mousem,unroll,over,level,selected,world,users,world_new,world_art + global zoom,over,level,selected,world,users,world_new,world_art,menus if player.source and player.source.video_format: player.next() ambiance.play() @@ -1611,61 +1654,9 @@ def on_mouse_press(x, y, button, modifiers): ambiance.pause() selected=-1 return - realx=(x-decx)/zoom - realy=(y-decy)/zoom - for i in range(16): - if x>=10+i*45 and x<=49+i*45 and y>=8 and y<44: - if 'color' in dat[int("0x20000",16)+i] and dat[int("0x20000",16)+i]['color']!=[40,40,40]: - if button == mouse.LEFT: - mousel=i - if button == mouse.RIGHT: - mouser=i - if button == mouse.MIDDLE: - mousem=i - if button!="" and i==15: - if unroll!=0: - unroll=0 - else: - unroll=1 - if i>=12: return - if unroll==1: - if debug==1: - nbelements=44 - else: - nbelements=29 - size=win.width/nbelements - for i in range(nbelements): - if x>=5+i*size and x<=5+i*size+size and y>=55 and y<55+size: - if art[int("0x30000",16)+i]['tech']<=tech: - dat['others']['ref']=art[int("0x30000",16)+i] - if button == mouse.LEFT: - mousel=15 - if button == mouse.RIGHT: - mouser=15 - if button == mouse.MIDDLE: - mousem=15 - return - elif unroll==1.01: - nbelements=26 - size=win.width/nbelements - for i in range(nbelements): - if x>=5+i*size and x<=5+i*size+size and y>=55 and y<55+size: - if i==0: - readlevel(world,level,False) - else: - world_new=copy.deepcopy(users[len(users)-i][1]) - world_art=copy.deepcopy(users[len(users)-i][2]) - return - mouses=23 - if button == mouse.LEFT: - mouses=mousel - if button == mouse.RIGHT: - mouses=mouser - if button == mouse.MIDDLE: - mouses=mousem - if mouses!=23: - eval(dat[int("0x20000",16)+mouses]['nom']+"("+str(realx)+","+str(realy)+","+str(0)+","+str(0)+")") - + 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): resize() diff --git a/dbdata b/dbdata index 243a6586dfa1dd7c1190194ca56d866af7389ad4..218e0396d3479911128755184508c9619443ad0d 100644 GIT binary patch literal 73728 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 diff --git a/dbsrc b/dbsrc index 4852ca4..6e55cfe 100644 --- a/dbsrc +++ b/dbsrc @@ -70,7 +70,8 @@ worlds=[[{'nom': 'Introduction', 'rayon': 0, 'cycle': 0, 'tech': -1, - 'cout': 0}, {'nom': 'Trajectoires', + 'cout': 0}, + {'nom': 'Trajectoires', 'maxtemp': 99999, 'world_art': [[0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], @@ -786,7 +787,7 @@ worlds=[[{'nom': 'Introduction', 'element': 'Li', 'current': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], '_xx': 300, - 'victory': [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1], + 'victory': [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 4], '_yy': 320, 'link': [(1, 6)], 'video': False, @@ -956,7 +957,8 @@ worlds=[[{'nom': 'Introduction', 'cycle': 0, 'tech': 4, 'cout': 1200}]] -art={196608: {'nrj': 0, 'cout': 0, 'temp': 0, 'nom': 'null', 'color': [0, 0, 0], 'text': '', 'value': 196608, 'cat': 0, 'tech': 0, 'activable': False}, +art={ +196608: {'nrj': 0, 'cout': 0, 'temp': 0, 'nom': 'null', 'color': [0, 0, 0], 'text': '', 'value': 196608, 'cat': 0, 'tech': 0, 'activable': False}, 196609: {'nrj': 0, 'cout': 60, 'temp': 0.05, 'nom': 'positiver', 'color': [255, 0, 0], 'text': '+', 'value': 196609, 'cat': 1, 'tech': 2, 'activable': True}, 196610: {'nrj': 0, 'cout': 60, 'temp': 0.05, 'nom': 'negativer', 'color': [0, 0, 255], 'text': '-', 'value': 196610, 'cat': 1, 'tech': 4, 'activable': True}, 196611: {'nrj': 0, 'cout': 20, 'temp': 0.05, 'nom': 'inverter', 'color': [125, 13, 114], 'text': '\xc2\xb1', 'value': 196611, 'cat': 1, 'tech': 1, 'activable': False}, @@ -1012,48 +1014,69 @@ art={196608: {'nrj': 0, 'cout': 0, 'temp': 0, 'nom': 'null', 'color': [0, 0, 0], 196661: {'nrj': 0, 'cout': 300, 'temp': 0.05, 'nom': 'triern0-4a', 'color': [255, 255, 255], 'text': '0', 'value': 196661, 'cat': 7, 'tech': 0, 'activable': True}, 196662: {'nrj': 0, 'cout': 25, 'temp': 0.05, 'nom': 'dir3', 'color': [125, 13, 114], 'text': '\xe2\x96\xb2', 'value': 196662, 'cat': 2, 'tech': 5, 'activable': False}, 196663: {'nrj': 0, 'cout': 25, 'temp': 0.05, 'nom': 'dir4', 'color': [125, 13, 114], 'text': '\xe2\x96\xbc', 'value': 196663, 'cat': 2, 'tech': 5, 'activable': False}, -1: {'color': [240, 100, 38], 'nom': 'copper', 'cout': 1, 'value': 1}, -4608: {'color': [50, 50, 200], 'nom': 'headb', 'cout': 1, 'value': 4608}, -32: {'color': [80, 80, 80], 'nom': 'tail2', 'cout': 1, 'value': 32}, -2: {'color': [208, 213, 79], 'nom': 'fiber', 'cout': 5, 'value': 2}, -8192: {'color': [40, 40, 40], 'nom': 'head2', 'cout': 1, 'value': 8192}, -33: {'color': [150, 50, 50], 'nom': 'tailr2', 'cout': 1, 'value': 33}, -4352: {'color': [200, 50, 50], 'nom': 'headr', 'cout': 1, 'value': 4352}, -34: {'color': [50, 50, 150], 'nom': 'tailb2', 'cout': 1, 'value': 34}, -4864: {'color': [44, 120, 44], 'nom': 'headp', 'cout': 5, 'value': 4864}, -8448: {'color': [255, 0, 0], 'nom': 'headr2', 'cout': 1, 'value': 8448}, 0: {'color': [0, 0, 0], 'nom': 'nothing', 'cout': 0, 'value': 0}, +1: {'color': [240, 100, 38], 'nom': 'copper', 'cout': 1, 'value': 1}, +2: {'color': [208, 213, 79], 'nom': 'fiber', 'cout': 5, 'value': 2}, +4: {'color': [122, 49, 25], 'nom': 'prot', 'cout': 0, 'value': 4}, +5: {'color': [75, 119, 157], 'nom': 'neut', 'cout': 0, 'value': 5}, 16: {'color': [80, 80, 80], 'nom': 'tail', 'cout': 1, 'value': 16}, 17: {'color': [150, 50, 50], 'nom': 'tailr', 'cout': 1, 'value': 17}, 18: {'color': [50, 50, 150], 'nom': 'tailb', 'cout': 1, 'value': 18}, -4096: {'color': [60, 60, 60], 'nom': 'head', 'cout': 1, 'value': 4096}, 19: {'color': [68, 165, 68], 'nom': 'tailp', 'cout': 5, 'value': 19}, -8704: {'color': [0, 0, 255], 'nom': 'headb2', 'cout': 1, 'value': 8704}, -5: {'color': [75, 119, 157], 'nom': 'neut', 'cout': 0, 'value': 5}, -4: {'color': [122, 49, 25], 'nom': 'prot', 'cout': 0, 'value': 4}} -dat={65536: {'nom': 'cycle', 'value': 65536, 'icon': '%picture/cycle.png'}, -131073: {'nom': 'speed', 'color': '', 'value': 131073, 'drag': 0, 'ref': '', 'icon': '%picture/speed.png'}, -65538: {'nom': 'rayon', 'value': 65538, 'icon': '%picture/rayon.png'}, -65539: {'nom': 'temp', 'value': 65539, 'icon': '%picture/temp.png'}, -65540: {'nom': 'cout', 'value': 65540, 'icon': '%picture/cout.png'}, -65541: {'nom': 'tech', 'value': 65541, 'icon': '%picture/tech.png'}, -131072: {'nom': 'run', 'color': '', 'value': 131072, 'drag': 0, 'ref': '', 'icon': '%picture/stop.png'}, -131080: {'nom': 'levels', 'color': '', 'value': 131080, 'drag': 0, 'ref': '', 'icon': '%picture/levels.png'}, -131081: {'nom': 'screen', 'color': '', 'value': 131081, 'drag': 0, 'ref': '', 'icon': '%picture/screen.png'}, -131082: {'nom': 'settings', 'color': '', 'value': 131082, 'drag': 0, 'ref': '', 'icon': '%picture/settings.png'}, -131083: {'nom': 'exits', 'color': '', 'value': 131083, 'drag': 0, 'ref': '', 'icon': '%picture/exits.png'}, -131084: {'nom': 'setcopper', 'color': [240, 100, 38], 'value': 131084, 'drag': 1, 'ref': '', 'icon': ''}, -131085: {'nom': 'setfiber', 'color': [208, 213, 79], 'value': 131085, 'drag': 1, 'ref': '', 'icon': ''}, -131086: {'nom': 'setnothing', 'color': [0, 0, 0], 'value': 131086, 'drag': 1, 'ref': '', 'icon': ''}, -131087: {'nom': 'others', 'color': '', 'value': 131087, 'drag': 1, 'ref': {'nrj': 0, 'cout': 0, 'temp': 0, 'nom': 'null', 'color': [0, 0, 0], 'text': '', 'value': 196608, 'cat': 0, 'tech': 0, 'activable': False}, -'icon': '/'}, -131088: {'nom': 'setnothinga', 'color': [40, 40, 40], 'value': 131088, 'drag': 1, 'ref': '', 'icon': ''}, -131089: {'nom': 'stop', 'color': '', 'value': 131089, 'drag': 0, 'ref': '', 'icon': '%picture/run.png'}, -131076: {'nom': 'move', 'color': '', 'value': 131076, 'drag': 1, 'ref': '', 'icon': '%picture/move.png'}, -131077: {'nom': 'zoomp', 'color': '', 'value': 131077, 'drag': 0, 'ref': '', 'icon': '%picture/zoomp.png'}, -131078: {'nom': 'zoomm', 'color': '', 'value': 131078, 'drag': 0, 'ref': '', 'icon': '%picture/zoomm.png'}, -65537: {'nom': 'nrj', 'value': 65537, 'icon': '%picture/nrj.png'}, -131079: {'nom': 'stater', 'color': '', 'value': 131079, 'drag': 0, 'ref': '', 'icon': '%picture/stat.png'}, -131075: {'nom': 'save', 'color': '', 'value': 131075, 'drag': 0, 'ref': '', 'icon': '%picture/save.png'}, -131074: {'nom': 'raz', 'color': '', 'value': 131074, 'drag': 0, 'ref': '', 'icon': '%picture/raz.png'}} -write("dbdata",["worlds","art","dat"]) +32: {'color': [80, 80, 80], 'nom': 'tail2', 'cout': 1, 'value': 32}, +33: {'color': [150, 50, 50], 'nom': 'tailr2', 'cout': 1, 'value': 33}, +34: {'color': [50, 50, 150], 'nom': 'tailb2', 'cout': 1, 'value': 34}, +4096: {'color': [60, 60, 60], 'nom': 'head', 'cout': 1, 'value': 4096}, +4352: {'color': [200, 50, 50], 'nom': 'headr', 'cout': 1, 'value': 4352}, +4608: {'color': [50, 50, 200], 'nom': 'headb', 'cout': 1, 'value': 4608}, +4864: {'color': [44, 120, 44], 'nom': 'headp', 'cout': 5, 'value': 4864}, +8192: {'color': [40, 40, 40], 'nom': 'head2', 'cout': 1, 'value': 8192}, +8448: {'color': [255, 0, 0], 'nom': 'headr2', 'cout': 1, 'value': 8448}, +8704: {'color': [0, 0, 255], 'nom': 'headb2', 'cout': 1, 'value': 8704}} + +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}, +] +, +[ +{'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}, +], +[ +{'place':'bottom+','visible':False,'size':0,'variable':True,'selectable':False}, +], +[ +{'place':'bottom+','visible':False,'size':0,'variable':True,'selectable':False}, +] +] + +write("dbdata",["worlds","art","menus"]) diff --git a/picture/nosound.png b/picture/nosound.png new file mode 100644 index 0000000000000000000000000000000000000000..5adf8622b2dbbea167a010aac640443bd8c4d17a GIT binary patch literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB*pj^6T^Rm@;DWu&Cj&(|3p^r= z85p>QL70(Y)*K0-AbW|YuPggKR(3H3`Hdf@Ed~lnmbgZgIOpf)rskC}I2WZRmZYXA zlxLP?D7bt2281{Ai8C-Ts(QLOhD02Gd&97+#Xy4f!Sqm_9GeDlju(tNIc@@PwhFNL zFIay0&?&Ej(HwG)IZU0KzixQ5NoD3to!9(ki#~n)FulDcsH)xZGvncBOtA{dj#Gk) z9eghmF9lGwU$X;Bh`u$m7Ie@%)zg7xxLTcWIm!+V;0%<{LK6=B`By4a-#&S(REc z>fNU}toL~qz94-0=kG#EJqI`G6u)x6Uix5;GlycS&C|m-zW<$G967B~Aj!{Bx{dMo zzWwS8->1z>XKe zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00SdQL_t(o!|hj1OY2Y&J+Vn? zqqGrXQIrxjXrO+fh(V=-s2f2y{U!c__g@5;1*PdCi-O=Lx|3D~yJ&S|D}psDAzyu~ z24kBTpFVNXfx9_(W_sq#y?0VV5QHXvk@eu0S(i|kP?ymEHu58frKKgTuC5{yi8z>H z7`VE+!qL%@XWY)t4g^5}MNtl>X&O#WPM|1?XB^@8Fm7*eV`gT?mvE!eK)GCouImVg z!{B)y@p#-f=KTB|k|cdzp;Rgb%d&iv_x1H*Zf?$neH4>Qr926RSeE_MX(OFZV`yjy z&1MtLW)qD@1DBVVs8*}cG!5~1+}ZP6x~`*GEW);J&@}Df;cyt$YBjh*Q&Uq;rHZ0J zmSq@*;p}r9hfF4eSS;qN#@X2!BuN6pFxcDMbE$NEd>s6ig+d`%mW5KO1WA%$7zPAE zz{0`;7=}TmQo+H&0Zh|`Wm%qUcz75L!(e=T+=Yiiq2Mh`r_*3r7Pf8U@bD0-s$yef z1Dl(h;CUXiv$MFkxWN7WJq8B{!7vPL+jgy7E{A+R4?z&HzP=8g=N)WhWCXpvy`X8j zt!*6@;yBK!q*ki|0H&v>9gHMN@H`IysMqTqmASsY#?#XiZf|crF^=PcogtDWVVWiY zAR3M0`S}?S4-ZHr5{}Q~lhmwL$O!{%d!qOF);ztG(nPNuru_w z(v}jkETdMdLDMvxo}QvyE`y>djE;_WRH(ndACr@lD3wac<#NbovkpcOgyTokw7){j z%ge5cMNvehQo-Hb9rpM4UA`+TD~LoQ9TjR>B9TBW7DFU!GmMt|ObxdMiXxR9htkK|mBmh@$Ai{geqj z-FtfcTlO74@~zYUqdD~Bgn}sa`uf`O*?(_qYin({=-U;NWjS#27U`|6t$+VwG)>cU zeTK~YBK-3D67m|7g+k#=XQNOkc;@ycq^hdRS=aSI=Ot(hbzOJmS5-CmCv5j$N0(5S dP?yjT*k3!kD_Ik0@%8`!002ovPDHLkV1gg$u(1FD literal 0 HcmV?d00001 diff --git a/picture/popup.png b/picture/popup.png new file mode 100644 index 0000000000000000000000000000000000000000..d3ff330bfd1fd1b247233f41983eb52af50d53db GIT binary patch literal 605 zcmV-j0;2tiP)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00G5GL_t(o!|j)`io!q;hX05} zG+-g3g_usTF_pFTHiG4X*!U7YgD+ttf~8<%oytNBwX_QeQ9)3Q64_0zy*s&!iCI04 z3~ZU~$L!2M^GoG&*~K4<82(s9Kwc3K@{y)#P*oNAd>)BJ0=Zlc0I=KbVB0pf+bs;k zz;e0t{cp)nQBz7$DwTX)uwJh*91g<;YPDKWRrRT-Fbo6ze*bx(PN#!dESyqv90%QQ zHyBW%P(ZWU6jHc@!2p}h#$T6FO2Ii7aww(#GSqIjkxr+Dw)g3DLa*0*tnC#=0q0yO zkfJD$=@20VjIo!9ARz>k$>evSY&I)AJD>0J%#bY0FUycD%icie^BKux@+Cmm>(v{` zG))wX#g_n?rs=Iix~>b;pYKQ4^~c)&cs%~tmSKfuS^h>xqtOrwG#ZWk57&CVE(B&g z9tWTHgb+xQ6bgvzx_3etXdkLptH@+BPr)1x2h3)(@HWPHJdRqe<{MEOx;>#j$9|1)`{{iR&ktsWhUaOrv00000NkvXXu0mjf@1Xx5 literal 0 HcmV?d00001 diff --git a/picture/sound.png b/picture/sound.png new file mode 100644 index 0000000000000000000000000000000000000000..373b969b13d3d30f7f52c64ee156d87022459fcf GIT binary patch literal 793 zcmV+!1LpjRP)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00MzYL_t(o!|hkGYAQh#J-Y@m z5!XgZNUH4?5)08{MG1)*NGn<_2U2Ca?fbn>28hdqh1+Ui&p6BuS__%zBGMNmHkB`9^n+!9QN+k@3L!6wP zEWc#=d>(sydpa@S1XT`wm@PTtJc}gDbNf(lialVi6x7ABaREx;)p{*I|7{BRCw6 zl?du|ItK3b_0{|yy1BUl5t&|oi(HJ;h{a-HjN$qD*-)~lrzh*yaeI4f2sl4K2gh-? z-0^rkczb&@^f@BJU@)-PI_~c7(ChX7*r7xs0mc|=wVI9>1Yxe2g_~==UIzfv9yE=3 zJdW{rjB2&2b*It{!C(*opsK26ZtkaF=|CWW?d@&Ll`jfz^S9p!+6dYR`p5VM XLioLT1&9Mb00000NkvXXu0mjf``=s> literal 0 HcmV?d00001 diff --git a/picture/tuto.png b/picture/tuto.png new file mode 100644 index 0000000000000000000000000000000000000000..63fc5e3af1c3e8416c2886f39ad8b1ebcd723a95 GIT binary patch literal 810 zcmV+_1J(SAP)i!uNJ02y>e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00NRpL_t(o!|j*9N-I$ihd+0Z z2__41^G{O*FM%~RuuUs-P#lkRrJ7<1#=8VnH&pZ4ellWma0vZANH8G4N8yg!;O-&Jx$C;Rz zz_Kiw%_g_Ex0FgHPr1ehmAw#x-Q8WH(dehK_xJZ4931fU^z=1AJ3Bih5(&>gq3b$_ zhlj%j+S}VB6bcP|yryZgzrR16rq1W{1cO0r+aB11!65m3-hWdIAy8En+qQj+Kvh+Q z5Pf^fb%nOJwtQ9QZ{ObD_E(`uB;raXZY>sz`2*^9yF)py7khks^bWMSxk;zf;rRF% zUDrvaQbPmMb=^JC>gpqG_UOrY2>*CKp+5sZQHb3EpBdZuq+Ej zQF=L4Ri)8rxVv1JmX?^Fo_5uk?RJ}!lM_!n6M*A5l*?uJxBdG1x@Xn2+if&W`!sHC zZH+)6z|ql>d!R%j!Q$fLz>>bWxOjKy0c5jT&d$!f?L(nZh+Hn`8Aj7IOw%0xPHmc| zr+e$+;epG`%dcJX{{+%BjhUGllF4LmEZp7QQLELy@73`#Sx-+-0jSk#UjpD7sL^PA oI4{2aq4+OgMo;Mx(0>W^3`iIZ6PPO%YybcN07*qoM6N<$g3&W-?*IS* literal 0 HcmV?d00001 diff --git a/picture/windows.png b/picture/windows.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d5eb3dfeecb399d0daaec630abe9339d4bcf00 GIT binary patch literal 454 zcmV;%0XhDOP)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00AyZL_t(o!|j(ru7n^AhTF+I ziVN@Lo|PLth_1Yy2k;K9FpEhIV_*cIC<~exiADJQ+tP@2T^q>AUXYm;paS$?`*S_) z`~H^AhhYd)h?zkt1w{09XJ#NGU}onfJ|g-W+jEps+gdI|*E!U-t#h(51`rX9`Me@y zL_Fo6rYS6BL