Mise en place d'un tutoriel interactif à partir d'un langage de script interprété depuis la variable 'tuto'.

This commit is contained in:
Le_dahut 2014-05-14 23:09:51 +02:00
parent b676b676f8
commit 8977108aa5
3 changed files with 95 additions and 10 deletions

View File

@ -93,7 +93,7 @@ def loadpic(d):
d[j][k]['icon'][n]=image.load(d[j][k]['icon'][n])
def initgrid():
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
global msg,rect,tuto,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 = {}
@ -126,7 +126,8 @@ def initgrid():
allcout=[0,0,0]
sizex=sizey=1
seestat=thecout=world=over=play=cycle=rayon=temp=cout=decx=decy=nrj=0
debug=0
debug=rect=0
msg=tuto=''
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]]
if len(stat_var)==0:
@ -175,7 +176,7 @@ def readlevel(w,l,user):
infos()
def savelevel(w,l):
global users,worlds,Uworlds,nom,descriptif,video,link,tech,cout,victory,current,cycle,nrj,rayon,temp,maxcycle,maxnrj,maxrayon,maxtemp,world_new,world_art
global tuto,users,worlds,Uworlds,nom,descriptif,video,link,tech,cout,victory,current,cycle,nrj,rayon,temp,maxcycle,maxnrj,maxrayon,maxtemp,world_new,world_art
while len(Uworlds)<=w:
Uworlds.append(0)
Uworlds[w]=[]
@ -184,6 +185,7 @@ def savelevel(w,l):
Uworlds[w][l]={'nom':nom,
'element':element,
'users':users,
'tuto':tuto,
'description':descriptif,
'_xx':worlds[world][level]['_xx'],
'_yy':worlds[world][level]['_yy'],
@ -865,9 +867,19 @@ def drawmenu(themenus):
placex+=themenus[i][j]['size']
return
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])
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'))
txt_message.document=document
txt_message.draw()
def drawgrid(zoom):
global temp,debug,over,allcout,play,element,seestat,art,users,menus
global temp,debug,over,allcout,play,element,seestat,art,users,menus,tuto
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])
@ -902,11 +914,11 @@ 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))
drawmenu(menus)
if seestat>=1: drawbigstat(seestat)
if over>0: drawgameover()
if over<0: drawvictory()
if tuto!='' and menus[0][12]['choose']==1: drawtuto()
if allcout[2]>0: drawpopup()
return
@ -1352,6 +1364,7 @@ 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
txt_description.y=8
txt_message=pyglet.text.layout.TextLayout(document,dpi=72,multiline=True,width=384,height=200)
txt_cout2=pyglet.text.Label("",font_name='Mechanihan',font_size=20,x=780,y=120,bold=False,italic=False,color=(180, 180, 180,255))
txt_maxcycle2=pyglet.text.Label("",font_name='Mechanihan',font_size=20,x=780,y=75,bold=False,italic=False,color=(180, 180, 180,255))
txt_tech2=pyglet.text.Label("",font_name='Mechanihan',font_size=20,x=980,y=120,bold=False,italic=False,color=(180, 180, 180,255))
@ -1617,7 +1630,53 @@ def testgrid(themenus,x,y,dx,dy,buttons,modifiers):
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 tutoriel
'''
def compiler():
global tuto
tutoexec=tuto.splitlines(False)
result=[]
for line in tutoexec:
clock.tick()
if line=='': continue
cmd=line.split(" ")[0].lower()
arg=line[len(cmd):].lstrip().split(',')
for i in range(len(arg)):
arg[i]=arg[i].lstrip().rstrip()
result.append((cmd,arg))
tuto=[result,0]
def execute(dt):
global tuto,rect,tech,msg,menus
if tuto[1]>=len(tuto[0]): return
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])]
elif cmd=='wait':
if int(arg[0])>0: dt=int(arg[0])
elif cmd=='next':
nextgrid()
elif cmd=='del':
rect=0
msg=''
elif cmd=='tech':
tech= int(arg[0])
elif cmd=='msg':
msg= str(arg[0])
elif cmd=='select':
if menus[int(arg[0])][0].has_key('mouse'):
menus[int(arg[0])][0]['mouse'][int(arg[2])]=int(arg[1])
elif cmd=='set':
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)
''' *********************************************************************************************** '''
''' Fonctions evenementielles '''
@ -1684,7 +1743,7 @@ def on_mouse_drag(x, y, dx, dy, buttons, modifiers):
@win.event
def on_mouse_press(x, y, button, modifiers):
global zoom,over,level,selected,world,users,world_new,world_art,menus
global zoom,over,level,selected,world,users,world_new,world_art,menus,tuto
if player.source and player.source.video_format:
player.next()
ambiance.play()
@ -1705,12 +1764,16 @@ def on_mouse_press(x, y, button, modifiers):
elif selected==-1:
return
else:
readlevel(selected['world'],selected['level'],True)
if selected['video']:
'''readlevel(selected['world'],selected['level'],True)'''
readlevel(selected['world'],selected['level'],False)
if video:
player.queue(pyglet.resource.media('movie/level'+str(world)+"-"+str(level)+".mp4"))
player.play()
ambiance.pause()
selected=-1
if type(tuto) is str and tuto!='':
compiler()
execute(0.1)
return
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)

BIN
dbdata

Binary file not shown.

24
dbsrc
View File

@ -41,6 +41,28 @@ worlds=[[{'nom': 'Introduction',
[0, 0, 0, 0, 0],
[0, 0, 196637, 0, 0],
[0, 0, 0, 0, 0]],
'tuto':'''
mSG CECI EST LE TUTO ;)
waIT 2
next
wait 1
rEct 90 ,90 ,200 , 200
next
next
tech 8
select 0,2,2
set 0, 6
wait 2
MSg cool non ?
tech -1
wait 4
del
unset 0, 6
''',
'description': "Prise en main de l'interface de WireChem{#169} et amener l'\xc3\xa9lectron neutre sur le senseur.",
'temp': 0,
'nrj': 0,
@ -1048,7 +1070,7 @@ menus=[
{'motion':'motion_popup','click': 'click_menu', 'tech':-1, 'value':'Laboratoires', 'size':45,'icon': 'picture/levels.png','variable':False,'visible':True,'separe':False,'squarred':False,'active': True},
{'motion':'motion_popup','click': ['click_fullscreen','click_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':'motion_popup','click': ['click_sound','click_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':'motion_popup','click': ['click_tutoriel','click_popup','click_simple'], 'tech':-1, 'value':['Activer Tutoriel','Activer Aide','Sans Aide/Tutoriel',], 'size':45,'icon': ['picture/tuto.png','picture/popup.png','picture/nothing.png'], 'choose': 2,'variable':False,'visible':True,'separe':False,'squarred':False,'active': True},
{'motion':'motion_popup','click': ['click_tutoriel','click_popup','click_simple'], 'tech':-1, 'value':['Activer Tutoriel','Activer Aide','Sans Aide/Tutoriel',], 'size':45,'icon': ['picture/tuto.png','picture/popup.png','picture/nothing.png'], 'choose': 1,'variable':False,'visible':True,'separe':False,'squarred':False,'active': True},
{'motion':'motion_popup','click': 'click_settings', 'tech':-1, 'value':'Options...', 'size':45,'icon': 'picture/settings.png','variable':False,'visible':True,'separe':False,'squarred':False,'active': True},
{'motion':'motion_popup','click': 'click_exit', 'tech':-1, 'value':'Quitter', 'size':45,'icon': 'picture/exits.png','variable':False,'visible':True,'separe':True,'squarred':False,'active': True},
{'motion':'motion_popup','click': 'click_drag_copper', 'drag': 'click_drag_copper' ,'tech':0, 'value':'Cuivre', 'size':45,'icon': [240, 100, 38],'variable':False,'visible':True,'separe':False,'squarred':False,'active': True},