def event_handler(): for event in pygame.event.get(): if event.type == QUIT: EditorExit() elif event.type == KEYDOWN: if event.key == K_ESCAPE: EditorExit() Ced.levelname.handle_event(event) elif event.type == MOUSEBUTTONDOWN: # prev ? if Ced.b_prev.handle_event(event): Ced.b_prev.setClicked(True) Config.level -= 1 if Config.level < 1: # on boucle Config.level = Config.maxlevel Ced.levelname.setText('level-{0:03d}.txt'.format(Config.level)) # next ? elif Ced.b_next.handle_event(event): Ced.b_next.setClicked(True) Config.level += 1 if Config.level > Config.maxlevel: # on boucle Config.level = 1 Ced.levelname.setText('level-{0:03d}.txt'.format(Config.level)) # save ? elif Ced.b_save.handle_event(event): Ced.b_save.setClicked(True) SaveLevel() # load ? elif Ced.b_load.handle_event(event): Ced.b_load.setClicked(True) LoadLevel() # reset ? elif Ced.b_raz.handle_event(event): Ced.b_raz.setClicked(True) PushUndos() RazLevel() Config.bossLevel = False Ced.b_test.setClicked(False) Config.testMode = False # select ? elif Ced.b_select.handle_event(event) and not Config.bossLevel: if Ced.in_select: Ced.b_select.setClicked(False) Ced.in_select = False else: Ced.b_select.setClicked(True) Ced.in_select = True # copy ? elif Ced.b_copy.handle_event(event) and Ced.z_select is not None and not Config.bossLevel: Ced.b_copy.setClicked(True) Ced.z_select.copySelect() Ced.in_copy = True # cut ? elif Ced.b_cut.handle_event(event) and Ced.z_select is not None and not Config.bossLevel: Ced.b_cut.setClicked(True) Ced.z_select.cutSelect() Ced.in_cut = True # paste ? elif Ced.b_paste.handle_event(event) and Ced.z_select is not None and (Ced.in_copy or Ced.in_cut) and not Config.bossLevel: if Ced.in_copy: Ced.b_copy.setClicked(False) Ced.in_copy = False elif Ced.in_cut: Ced.b_cut.setClicked(False) Ced.in_cut = False Ced.b_paste.setClicked(True) Ced.in_paste = True # undo ? elif Ced.b_undo.handle_event(event) and ((Ced.z_select is not None) or (len(Ced.undos) > 0)) and not Config.bossLevel: if Ced.z_select is not None: Ced.b_undo.setClicked(True) # on reset la sélection Ced.z_select.undoSelect() # fin de sélection del Ced.z_select Ced.z_select = None Ced.in_copy = False Ced.in_select = False Ced.in_cut = False # reset des boutons for btn in [ Ced.b_select, Ced.b_copy, Ced.b_cut, Ced.b_paste ]: btn.setClicked(False) elif len(Ced.undos) > 0: Ced.b_undo.setClicked(True) PopUndos() # cancel ? elif Ced.b_cancel.handle_event(event) and Ced.z_select is not None and not Config.bossLevel: Ced.b_cancel.setClicked(True) # fin de sélection del Ced.z_select Ced.z_select = None Ced.in_copy = False Ced.in_select = False Ced.in_cut = False # reset des boutons for btn in [ Ced.b_select, Ced.b_copy, Ced.b_cut, Ced.b_paste ]: btn.setClicked(False) # view_grid ? elif Ced.b_grid.handle_event(event): Ced.view_grid = not Ced.view_grid Ced.b_grid.setClicked(Ced.view_grid) # test ? elif Ced.b_test.handle_event(event): fname = Ced.levelname.getText() if len(fname) > 0 and ((not isLevelEmpty()) or Config.bossLevel): Ced.b_test.setClicked(True) Ced.b_test.draw() pygame.display.update() pygame.event.pump() # on sauve le niveau dans le répertoire tempo Config.testMode = True SaveLevel() # on lance le programme pour tester le niveau if platform.system() == 'Windows': os.system('{0} {1} -t {2}'.format(sys.executable, os.path.join(Config.path_app, '', 'briks.py'), fname)) elif platform.system() == 'Linux': os.system('{0} {1} -t {2}'.format(sys.executable, os.path.join(Config.path_app, '', 'briks.py'), fname)) # on supprime le niveau temporaire try: os.remove(os.path.join(os.path.abspath(os.sep), tempfile.gettempdir(), fname)) except: pass Ced.b_test.setClicked(False) Config.testMode = False elif not Ced.in_paste: # une brique du menu ? if not Config.bossLevel: for i in range(1, len(Ced.ico_br)): if Ced.ico_br[i][1].collidepoint(event.pos): # clic droit déselectionne if event.button == 3 and Ced.bsel_i == i: Ced.bsel_i = 0 elif event.button != 3: Ced.bsel_i = i break # la brique du bossLevel ? if Ced.boss_br[1].collidepoint(event.pos): # clic droit déselectionne if event.button == 3: Config.bossLevel = False elif event.button != 3: Config.bossLevel = True Ced.bsel_i = 0 doBossLevel() # une brique du niveau ? if not Config.bossLevel: for cl in range(Config.maxli): for i in range(Config.maxbr): if Ced.lmap[cl][i][2].collidepoint(event.pos): if event.button == 1 and Ced.in_select: # clic gauche, début de sélection if Ced.z_select is None: Ced.z_select = Gui.SelectionRect((cl, i)) Ced.z_select.draw() else: PushUndos() if Ced.bsel_i > 0: # on met la brique sélectionnée Ced.lmap[cl][i][0] = Ced.bsel_i Ced.lmap[cl][i][1] = Ced.ico_br[Ced.bsel_i][0] elif Ced.lmap[cl][i][0] > 0: # clic sur une case pleine, on la vide Ced.lmap[cl][i][0] = 0 Ced.lmap[cl][i][1] = pygame.Surface([Config.brw, Config.brh]) Ced.levelname.handle_event(event) elif event.type == MOUSEMOTION: if event.buttons[0] == 1: # bouton gauche appuyé en mouvement for cl in range(Config.maxli): for i in range(Config.maxbr): if Ced.lmap[cl][i][2].collidepoint(event.pos): if Ced.in_select and Ced.z_select is not None: Ced.z_select.updateRect((cl, i)) Ced.z_select.draw() else: if Ced.bsel_i > 0: # on met la brique sélectionnée Ced.lmap[cl][i][0] = Ced.bsel_i Ced.lmap[cl][i][1] = Ced.ico_br[Ced.bsel_i][0] elif Ced.lmap[cl][i][0] > 0: # clic sur une case pleine, on la vide Ced.lmap[cl][i][0] = 0 Ced.lmap[cl][i][1] = pygame.Surface([Config.brw, Config.brh]) elif event.type == MOUSEBUTTONUP: if event.button == 1 and Ced.in_select and Ced.z_select is not None: # fin de sélection Ced.b_select.setClicked(False) Ced.in_select = False rect = None # update final for cl in range(Config.maxli): for i in range(Config.maxbr): if Ced.lmap[cl][i][2].collidepoint(event.pos): rect = Ced.z_select.updateRect((cl, i)) Ced.z_select.draw() break if rect is not None: break elif event.button == 1 and Ced.in_paste: paste_finish = False for cl in range(Config.maxli): for i in range(Config.maxbr): if Ced.lmap[cl][i][2].collidepoint(event.pos): # copie de la sélection Ced.z_select.pasteSelect((cl, i)) Ced.in_paste = False Ced.b_paste.setClicked(False) paste_finish = True break if paste_finish: break else: for btn in [ Ced.b_prev, Ced.b_next, Ced.b_save, Ced.b_load, Ced.b_raz, Ced.b_undo, Ced.b_cancel ]: if btn.handle_event(event): btn.setClicked(False)