-Implémentation de toutes les fonctions du langage 'Tuto'

-Correction d'un bogue lors du lancement d'une paillasse sans tutoriel
-Ajout d'un document au format Markdown qui décrit le langage 'Tuto'
This commit is contained in:
Le_dahut 2014-05-15 11:30:14 +02:00
parent 8977108aa5
commit bafb591802
4 changed files with 158 additions and 8 deletions

96
BULLES.md Normal file
View File

@ -0,0 +1,96 @@
----------------------------------------------------------------
## WireChem
![The new chemistry game](logo.png)
http://wirechem.dahut.fr
*(C) Copyright 2013-2014 Nicolas Hordé
Licence GPL V3.0*
----------------------------------------------------------------
### Langage pour la création de Tutoriel
Les coordonnées sont celles du 1024x768 avec interpolation selon la
resolution choisie. Les commandes sont insensibles à la casse.
*Fonctions d'attente*
####WAIT
Attend un click ou un appuie sur une touche.
####WAIT sec
Attend le nombre de seconde spécifiés.
####WAIT MENU,menu,element
Attend le click sur le menu.
####WAIT DRAG,[bouton]
Attend un deplacement de curseur.
####WAIT CLICK,[bouton]
Attend un click du bouton.
*Fonctions d'affichage*
####MSG message
envoie un message à l'écran avec mise en forme.
####RECT x1,y1,x2,y2
dessine un carré rouge pour attirer l'attention de l'utilisateur sur une
zone à l'écran dont les coordonnées sont spécifiées.
####ARROW x1,y1,x2,y2
dessine une flèche rouge pour attirer l'attention de l'utilisateur sur une
zone à l'écran dont les coordonnées sont spécifiées.
####DEL
efface tout ce qui a été dessiné à l'écran.
*Fonctions menu*
####MENU menu,element,button
Clique sur un élément de menu.
####SELECT menu,element,button
Choisi un élément de menu.
####SET menu,element ou UNSET
Met en surbrillance un élément du menu.
####UNSET menu,element
Retire la surbrillance d'un élément du menu.
*fonctions gameplay*
####NEXT
Fait la prochaine génération de la grille de simulation.
####TECH niveau
Change le niveau technologique.
*fonction souris*
####CLICK x,y,button
Simule un clique sur le plateau de jeu aux coordonnées x,y.
####DRAG x1,y1,x2,y2,button
Simule un clique sur le plateau de jeu entre les coordonnées fournies.

View File

@ -158,7 +158,8 @@ def resize():
decy=-zoom+(win.height-zoom*(sizey-2))/2
def readlevel(w,l,user):
global worlds,cout,selected,sizex,sizey,stat,debug,tech
global tuto,worlds,cout,selected,sizex,sizey,stat,debug,tech
tuto=''
if user:
if w<len(Uworlds) and l<len(Uworlds[w]) and Uworlds[w][l].has_key("element"):
load(Uworlds[w][l])
@ -366,6 +367,20 @@ def drawsquare(x,y,x2,y2,full,color):
glVertex2i(x2,y2)
glVertex2i(x,y2)
glEnd()
def drawarrow(x,y,x2,y2,color):
glColor3ub(color[0],color[1],color[2])
glBegin(GL_LINE_LOOP)
glVertex2i(x,y)
glVertex2i(x2,y2)
glEnd()
angle=math.atan(float(y2-y)/(x2-x))
glBegin(GL_POLYGON)
glVertex2i(x2,y2)
glVertex2i(int(20*math.cos(angle+160*3.14/180))+x2,int(20*math.sin(angle+160*3.14/180))+y2)
glVertex2i(int(10*math.cos(angle+180*3.14/180))+x2,int(10*math.sin(angle+180*3.14/180))+y2)
glVertex2i(int(20*math.cos(angle-160*3.14/180))+x2,int(20*math.sin(angle-160*3.14/180))+y2)
glEnd()
def drawsemisquare(x,y,x2,y2,color):
if len(color)==4:
@ -871,7 +886,10 @@ def drawtuto():
global tuto,rect,msg,menus
drawsquare(win.width-384,menus[0][0]['size'],win.width,menus[0][0]['size']+200,2,[40,40,40,200])
if type(rect) is list:
drawsquare(rect[0]*win.width/1024,rect[1]*win.height/768,rect[2]*win.width/1024,rect[3]*win.height/768,2,[255,0,0,20])
if rect[4]==0:
drawsquare(rect[0]*win.width/1024,rect[1]*win.height/768,rect[2]*win.width/1024,rect[3]*win.height/768,2,[255,0,0,20])
else:
drawarrow(rect[0]*win.width/1024,rect[1]*win.height/768,rect[2]*win.width/1024,rect[3]*win.height/768,[255,0,0])
txt_message.x=win.width-384
txt_message.y=menus[0][0]['size']
document=pyglet.text.decode_attributed("{font_name 'OpenDyslexicAlta'}{font_size 18}{color (255, 255, 255, 255)}"+msg.decode('utf-8')+"}".encode('utf8'))
@ -1569,7 +1587,7 @@ def motion_popup(state):
''' Fonctions liée à la gestion des menus '''
def launch(x,y,dx,dy,i,j,buttons,modifiers,onmenu):
global menus,decx,decy,zoom
global menus,decx,decy,zoom,tuto
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}
@ -1583,6 +1601,21 @@ def launch(x,y,dx,dy,i,j,buttons,modifiers,onmenu):
'''print state'''
if onmenu and state['event']=='click' and menus[i][0]['selectable']:
menus[i][0]['mouse'][buttons-1]=j
if tuto!='' and tuto[1]<len(tuto[0]):
cmd,arg=tuto[0][tuto[1]]
if cmd=='wait':
if arg[0].lower()==state['event']:
if buttons==int(arg[1]) or len(arg)==1 or arg[1]=='' or int(arg[1])==0:
tuto[1]+=1
clock.schedule_once(execute,dt)
elif arg[0].lower()=='menu':
if buttons==int(arg[1]) or len(arg)==1 or arg[1]=='' or int(arg[1])==0:
tuto[1]+=1
clock.schedule_once(execute,dt)
else:
if state['event']=='click':
tuto[1]+=1
clock.schedule_once(execute,dt)
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']])):
@ -1655,9 +1688,9 @@ def execute(dt):
cmd,arg=tuto[0][tuto[1]]
print cmd,arg
if cmd=='rect':
rect=[int(arg[0]),int(arg[1]),int(arg[2]),int(arg[3])]
rect=[int(arg[0]),int(arg[1]),int(arg[2]),int(arg[3]),0]
elif cmd=='wait':
if int(arg[0])>0: dt=int(arg[0])
if int(arg[0])>0 and len(arg)==1 and arg[0]!='': dt=int(arg[0])
elif cmd=='next':
nextgrid()
elif cmd=='del':
@ -1674,8 +1707,17 @@ def execute(dt):
menus[int(arg[0])][int(arg[1])]['squarred']=True
elif cmd=='unset':
menus[int(arg[0])][int(arg[1])]['squarred']=False
tuto[1]+=1
clock.schedule_once(execute,dt)
elif cmd=='arrow':
rect=[int(arg[0]),int(arg[1]),int(arg[2]),int(arg[3]),1]
elif cmd=='menu':
launch(0,0,0,0,int(arg[0]),int(arg[1]),int(arg[2]),0,True)
elif cmd=='click':
launch(int(arg[0]),int(arg[1]),0,0,0,0,int(arg[2]),0,False)
elif cmd=='drag':
launch(int(arg[0]),int(arg[1]),int(arg[2])-int(arg[0]),int(arg[3])-int(arg[1]),0,0,int(arg[4]),0,False)
if dt!=0:
clock.schedule_once(execute,dt)
tuto[1]+=1
''' *********************************************************************************************** '''
''' Fonctions evenementielles '''
@ -1683,6 +1725,11 @@ def execute(dt):
@win.event
def on_key_press(symbol, modifiers):
global play,over,level
if tuto!='' and tuto[1]<len(tuto[0]):
cmd,arg=tuto[0][tuto[1]]
if cmd=='wait' and len(arg)==1 and arg[0]=='':
tuto[1]+=1
clock.schedule_once(execute,dt)
if player.source and player.source.video_format:
player.next()
ambiance.play()

BIN
dbdata

Binary file not shown.

9
dbsrc
View File

@ -43,19 +43,26 @@ worlds=[[{'nom': 'Introduction',
[0, 0, 0, 0, 0]],
'tuto':'''
mSG CECI EST LE TUTO ;)
arrow 700,100,420,50
waIT 2
next
wait 1
wait
msg <appuie sur touche>
rEct 90 ,90 ,200 , 200
next
next
tech 8
menu 0,1
wait 2
menu 0,1
select 0,2,2
set 0, 6
wait 2
MSg cool non ?
tech -1
wait 4
wait menu,1
wait click,2
del
unset 0, 6
''',