Ajout d'un mode d'édition disponible depuis le mode debug en cliquant sur le logo

Il est possible de créer des liens entre les niveaux ou de les défaire et de bouger les niveaux ainsi que les suprimer et en créer de nouveaux (limite 10).
This commit is contained in:
Le_dahut 2014-06-08 22:06:19 +02:00
parent f3238217c7
commit 7684f46b39
1 changed files with 140 additions and 19 deletions

View File

@ -159,8 +159,6 @@ def init():
reference(Uworlds,['world','level'])
if len(sys.argv)>1 and sys.argv[1]=='debug':
debug=1
elif len(sys.argv)>1 and sys.argv[1]=='edit' :
debug=2
else:
debug=0
@ -237,6 +235,7 @@ class abutton(object):
def __init__(self, window, name, x, y, width, height , active, hilite, visible, selected, content, hint, typeof, text, text2):
self.name=name
self.time=0
self.index=0
self.enter=0
self.x=x
@ -264,13 +263,12 @@ class abutton(object):
del self
self=None
def launch(self,state):
global debug
name=self.name.split('_')
if len(name)>1 and hasattr(self.window, "on_mouse_"+state['event']+"_"+name[0]) and callable(eval("self.window.on_mouse_"+state['event']+"_"+name[0])):
eval("self.window.on_mouse_"+state['event']+"_"+name[0]+"("+str(name[1])+","+str(state)+")")
if debug>0: print state
if debug>0: print state,self.name
if hasattr(self.window, "on_mouse_"+state['event']+"_"+self.name) and callable(eval("self.window.on_mouse_"+state['event']+"_"+self.name)):
if self.typeof=='multicon':
self.index+=1
@ -278,10 +276,14 @@ class abutton(object):
self.index=0
self.update(0)
eval("self.window.on_mouse_"+state['event']+"_"+self.name+"("+str(state)+")")
if debug>0: print state
if debug>0: print state,self.name
def on_mouse_press(self, x, y, button, modifiers):
if x>self.x and y>self.y and x<self.x+self.width and y<self.y+self.height and self.isactive() and self.isvisible():
if time.time()-self.time<0.30:
state={'x':x,'y':y, 'dx':0, 'dy':0, 'buttons':button, 'modifiers':modifiers, 'event': 'double'}
self.launch(state)
self.time=time.time()
state={'x':x,'y':y, 'dx':0, 'dy':0, 'buttons':button, 'modifiers':modifiers, 'event': 'press'}
self.launch(state)
@ -399,6 +401,7 @@ class menu(pyglet.window.Window):
self.p4 = pyglet.graphics.OrderedGroup(4)
self.clocks=[clock.schedule(self.draw),clock.schedule_interval(self.movefond,0.03)]
self.loc=[0,0,1,1]
self.selected=-1
self.images=[pyglet.image.load('picture/leveler0.png'),pyglet.image.load('picture/leveler1.png'),pyglet.image.load('picture/leveler2.png'),pyglet.image.load('picture/leveler3.png'),pyglet.image.load('picture/leveler4.png')]
self.colors=[[0,192,244],[235,118,118],[5,157,60],[215,33,255],[201,209,98]]
#self.fond=pyglet.image.TileableTexture.create_for_image(image.load("picture/fond.png"))
@ -421,12 +424,13 @@ class menu(pyglet.window.Window):
abutton(self,'level_6',-250, 0, 0, 0 , True, False, True, False, self.images[level], 'test', 'icon', '', ''),
abutton(self,'level_7',-250, 0, 0, 0 , True, False, True, False, self.images[level], 'test', 'icon', '', ''),
abutton(self,'level_8',-250, 0, 0, 0 , True, False, True, False, self.images[level], 'test', 'icon', '', ''),
abutton(self,'level_9',-250, 0, 0, 0 , True, False, True, False, self.images[level], 'test', 'icon', '', '')
abutton(self,'level_9',-250, 0, 0, 0 , True, False, True, False, self.images[level], 'test', 'icon', '', ''),
abutton(self,'level_10',-250, 0, 0, 0 , True, False, True, False, self.images[level], 'test', 'icon', '', '')
]
self.special=pyglet.sprite.Sprite(pyglet.image.load('picture/boss.png'),batch=self.batch, group=self.p4)
self.lock=[pyglet.sprite.Sprite(pyglet.image.load('picture/locked.png'),batch=self.batch, group=self.p4) for i in range(9)]
self.untitled=[pyglet.text.Label("",font_name='Vademecum',batch=self.batch, group=self.p4, font_size=23,x=0,y=0,bold=False,italic=False,color=(180, 180, 180,255)) for i in range(9)]
self.untitled2=[pyglet.text.Label("",font_name='Fluoxetine',batch=self.batch, group=self.p4, font_size=18,x=0,y=0,bold=False,italic=False,color=(255, 255, 255,255)) for i in range(9)]
self.special=pyglet.sprite.Sprite(pyglet.image.load('picture/boss.png'),batch=self.batch, group=self.p4,x=-150,y=-150)
self.lock=[pyglet.sprite.Sprite(pyglet.image.load('picture/locked.png'),batch=self.batch, group=self.p4,x=-150,y=-150) for i in range(10)]
self.untitled=[pyglet.text.Label("",font_name='Vademecum',batch=self.batch, group=self.p4, font_size=23,x=-150,y=-150,bold=False,italic=False,color=(180, 180, 180,255)) for i in range(10)]
self.untitled2=[pyglet.text.Label("",font_name='Fluoxetine',batch=self.batch, group=self.p4, font_size=18,x=-150,y=-150,bold=False,italic=False,color=(255, 255, 255,255)) for i in range(10)]
self.update()
def movefond(self,dt):
@ -452,9 +456,15 @@ class menu(pyglet.window.Window):
self.labels[0].x=(1024-self.labels[0].content_width)/2-50
self.labels[0].y=75*self.height/768
self.labels[0].text=obj['element']
for l in range(len(worlds[world])):
for l in range(10):
if l>=len(worlds[world]):
self.levels[l].x=-150
self.untitled[l].x=-150
self.untitled2[l].x=-150
self.lock[l].x=-150
continue
ele=worlds[world][l]
self.levels[l].active=(world,l) in finished
self.levels[l].active=(world,l) in finished or debug==2
self.levels[l].x=ele['_xx']
self.levels[l].y=ele['_yy']/768.0*self.height
self.levels[l].setselected([255,120+int(ele['_xx']/1024.0*135),155+int(ele['_xx']/1024.0*100)])
@ -467,30 +477,59 @@ class menu(pyglet.window.Window):
self.untitled2[l].text=ele['nom'].decode('utf-8')
self.untitled2[l].x=ele['_xx']-(self.untitled2[l].content_width-self.images[world].width)/2
self.untitled2[l].y=ele['_yy']/768.0*self.height-15
if (world,l) in finished:
if (world,l) in finished or debug==2:
self.untitled2[l].color=(255,255,255,255)
else:
self.untitled2[l].color=(90,90,90,255)
self.lock[l].visible=(world,l) not in finished
self.lock[l].visible=(world,l) not in finished and not debug==2
self.lock[l].x=ele['_xx']+10
self.lock[l].y=ele['_yy']/768.0*self.height+50
if ele['nom']==obj['nom']:
self.special.x=ele['_xx']
self.special.y=ele['_yy']
def drawLaser(self,x1,y1,x2,y2,width,power,color,randomize):
while(width > 0):
if randomize!=0: glLineStipple(random.randint(0,randomize),random.randint(0,65535))
glLineWidth(width)
glBegin(GL_LINES)
glColor3ub(min(color[0]+power*width,255),min(color[1]+power*width,255),min(color[2]+power*width,255))
glVertex2i(x1,y1)
glVertex2i(x2,y2)
width=width-1
glEnd()
glLineStipple(1,65535)
def draw(self,dt):
global loc
glClearColor(0,0,0,255)
self.clear()
global loc,world,worlds
glClear(GL_COLOR_BUFFER_BIT);
#self.fond.anchor_x=self.loc[0]
#self.fond.anchor_y=self.loc[1]
glColor4ub(255,255,255,160)
self.fond.blit(self.loc[0],self.loc[1])
self.fond.blit(self.loc[0]-1024,self.loc[1])
self.fond.blit(self.loc[0]-1024,self.loc[1]-768)
self.fond.blit(self.loc[0],self.loc[1]-768)
#self.fond.blit_tiled(0, 0, 0, self.width, self.height)
'''for ele in worlds[world]:
for n in ele['link']:
if n!="" and n[0]==world:
if n in finished:
self.drawLaser(ele['_xx']+50,int(ele['_yy']/768.0*self.height+50),worlds[n[0]][n[1]]['_xx']+50,int(worlds[n[0]][n[1]]['_yy']/768.0*self.height+50),random.randint(0,8),20,self.colors[world],12)
else:
self.drawLaser(ele['_xx']+50,int(ele['_yy']/768.0*self.height+50),worlds[n[0]][n[1]]['_xx']+50,int(worlds[n[0]][n[1]]['_yy']/768.0*self.height+50),2,20,[40,40,40],0) '''
self.batch.draw()
def on_mouse_press_logo(self, state):
global debug
if debug==1:
debug=2
self.buttons[0].setselected([255,0,0])
elif debug==2:
debug=1
self.buttons[0].setselected(False)
self.update()
def on_mouse_press_menu_2(self, state):
pyglet.app.exit()
@ -507,6 +546,53 @@ class menu(pyglet.window.Window):
def on_mouse_enter_menu(self, n, state):
self.buttons[2+n].setselected([255,0,0])
def on_mouse_double_level(self, n, state):
if debug<2:
return
for ele in worlds[world]:
try:
del ele['special']
except:
dummy=0
worlds[world][n]["special"]=True
self.update()
def on_mouse_drag_level(self, n, state):
global worlds,world
if debug<2:
return
if state['buttons']==2:
worlds[world][n]["_xx"]+=state['dx']
worlds[world][n]["_yy"]+=state['dy']
self.update()
elif (state['buttons']==1 or state['buttons']==4) and self.selected==-1:
self.selected=n
def on_mouse_release_level(self, n, state):
global worlds,world
if debug<2:
return
if state['buttons']==1 and self.selected>-1 and n!=self.selected:
try:
worlds[world][n]["link"].index((world,self.selected))==-1
except:
try:
worlds[world][self.selected]["link"].index((world,n))==-1
except:
worlds[world][n]["link"].append((world,self.selected))
self.selected=-1
elif state['buttons']==4 and self.selected>-1 and n!=self.selected:
try:
worlds[world][n]["link"].remove((world,self.selected))
except:
dummy=0
try:
worlds[world][self.selected]["link"].remove((world,n))
except:
dummy=0
else:
self.selected=-1
def on_mouse_leave_menu(self, n, state):
self.buttons[2+n].setselected(False)
@ -520,8 +606,42 @@ class menu(pyglet.window.Window):
self.untitled2[n].color=(255,255,255,255)
def on_mouse_press_level(self, n, state):
print "level "+str(n)
if debug==2:
self.selected=-1
if state['modifiers']==17:
del worlds[world][n]
self.update()
return
def on_mouse_press(self, x, y, button, modifiers):
if debug<2:
return
if modifiers==18 and len(worlds[world])<10:
worlds[world].append({'nom': 'nouveau',
'description': "niveau tout neuf.",
'element': 'x',
'current': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
'victory': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
'cout': 0,
'tech': 0,
'cycle': 0,
'maxcycle': 99999,
'nrj': 0,
'maxnrj': 99999,
'rayon': 0,
'maxrayon': 99999,
'temp': 0,
'maxtemp': 99999,
'_xx': x,
'_yy': y,
'link': [],
'video': False,
'special': False,
'world_art': [[0,0,0],[0,0,0],[0,0,0]],
'world_new': [[0,0,0],[0,0,0],[0,0,0]]})
self.update()
''' *********************************************************************************************** '''
''' Lancement du menu principal '''
@ -533,6 +653,7 @@ pyglet.font.add_file('font/LiberationMono-Regular.ttf')
menu_principal = menu()
menu_principal.set_minimum_size(1024, 768)
glEnable(GL_BLEND);
glEnable(GL_STENCIL_TEST);
glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glEnable(GL_LINE_STIPPLE)