From d28d1d10ed4f40dc29d2611b7b3ac86e3d740847 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?b=CA=B0edoh=E2=82=82=20sw=C3=A9?= Date: Sun, 7 Apr 2024 01:12:28 +0500 Subject: [PATCH] Make code worse. --- main.py | 127 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 88 insertions(+), 39 deletions(-) diff --git a/main.py b/main.py index fdd50d3..5fe1596 100755 --- a/main.py +++ b/main.py @@ -32,6 +32,66 @@ def nonzerocap(n): if n <= 0: return 1 return n +class EngineEvent: + def __init__(self, sVariableToModify, fLambda, tsArguments=None): + self.sVariableToModify = sVariableToModify + self.fLambda = fLambda + if tsArguments is not None: + self.tsArguments = tsArguments + else: + self.tsArguments = (sVariableToModify,) + +def defaultcontrols(): + aoEngineEvents = list() + for event in pygame.event.get(): + if event.type == pygame.QUIT: + aoEngineEvents.append(EngineEvent("bCont", lambda _: False)) + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_r: + aoEngineEvents.append(EngineEvent(None, lambda args: args[0].rotate(-1), tsArguments=("gPlayer",))) + if event.key == pygame.K_F3: + aoEngineEvents.append(EngineEvent("debugInfo", lambda args: not args[0])) + if event.key == pygame.K_F1: + aoEngineEvents.append(EngineEvent("bCap", lambda args: not args[0])) + if event.key == pygame.K_F2: + def fX(args): + #0: wall_buffer + #1: gPlayer + #2: level + if (len(args[0]) == 1): + args[0].append(args[1].cPos) + make_wall(args[0], args[2]) + args[0].clear() + else: + args[0].append(args[1].cPos) + aoEngineEvents.append(EngineEvent(None, fX, tsArguments=("wall_buffer", "gPlayer", "level") )) + if event.key == pygame.K_F5: + #0: level + #1: alert_append + #2: display + def fX(args): + filename = save_level(args[0]) + alert = Alert(f"File saved as {filename}", args[2]) + + args[1](alert, 5) + aoEngineEvents.append(EngineEvent(None, fX, tsArguments=("level", "alert_append", "display") )) + if event.key == pygame.K_F4: + aoEngineEvents.append(EngineEvent(None, lambda args: print(args[0].cPos), tsArguments=("gPlayer",))) + keys = pygame.key.get_pressed() + if keys[pygame.K_d]: + aoEngineEvents.append(EngineEvent(None, lambda args: args[0].rotate( ROT), tsArguments=("gPlayer",))) + if keys[pygame.K_a]: + aoEngineEvents.append(EngineEvent(None, lambda args: args[0].rotate(IROT), tsArguments=("gPlayer",))) + if keys[pygame.K_q]: + aoEngineEvents.append(EngineEvent(None, lambda args: args[0].__iadd__(GyroVector(OFFSET * args[0].cRot*I, 1)), tsArguments=("gPlayer",))) + if keys[pygame.K_e]: + aoEngineEvents.append(EngineEvent(None, lambda args: args[0].__isub__(GyroVector(OFFSET * args[0].cRot*I, 1)), tsArguments=("gPlayer",))) + if keys[pygame.K_w]: + aoEngineEvents.append(EngineEvent(None, lambda args: args[0].__isub__(GyroVector(OFFSET * args[0].cRot , 1)), tsArguments=("gPlayer",))) + if keys[pygame.K_s]: + aoEngineEvents.append(EngineEvent(None, lambda args: args[0].__iadd__(GyroVector(OFFSET * args[0].cRot , 1)), tsArguments=("gPlayer",))) + return aoEngineEvents + def mainLoop(): bCap = True bCont = True @@ -42,7 +102,9 @@ def mainLoop(): debugInfo = True wall_buffer = [] alerts = [] - + aoEngineEvents = [] + fvControl_ao = defaultcontrols + def alert_append(alert, delay): if len(alerts) >= 1: alerts.pop() @@ -56,44 +118,31 @@ def mainLoop(): level = open_level("maps/squareroom.json") while bCont: - for event in pygame.event.get(): - if event.type == pygame.QUIT: - bCont = False - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_r: - gPlayer.cRot *= -1 - if event.key == pygame.K_F3: - debugInfo = not debugInfo - if event.key == pygame.K_F1: - bCap = not bCap - if event.key == pygame.K_F2: - if (len(wall_buffer) == 1): - wall_buffer.append(gPlayer.cPos) - make_wall(wall_buffer, level) - wall_buffer.clear() - else: - wall_buffer.append(gPlayer.cPos) - if event.key == pygame.K_F5: - filename = save_level(level) - alert = Alert(f"File saved as {filename}", display) - - alert_append(alert, 5) - if event.key == pygame.K_F4: - print(gPlayer.cPos) - - keys = pygame.key.get_pressed() - if keys[pygame.K_d]: - gPlayer.rotate(ROT) - if keys[pygame.K_a]: - gPlayer.rotate(IROT) - if keys[pygame.K_q]: - gPlayer += GyroVector(OFFSET * gPlayer.cRot*I, 1) - if keys[pygame.K_e]: - gPlayer -= GyroVector(OFFSET * gPlayer.cRot*I, 1) - if keys[pygame.K_w]: - gPlayer -= GyroVector(OFFSET * gPlayer.cRot, 1) - if keys[pygame.K_s]: - gPlayer += GyroVector(OFFSET * gPlayer.cRot, 1) + aoEngineEvents = fvControl_ao() + state = { + 'bCap': bCap, + 'bCont': bCont, + 'gPlayer': gPlayer, + 'display': display, + 'fontSize': fontSize, + 'debugInfo': debugInfo, + 'wall_buffer': wall_buffer, + 'alerts': alerts, + 'alert_append': alert_append, + 'aoEngineEvents': aoEngineEvents, + 'level': level + } + for i in aoEngineEvents: + if i.sVariableToModify == "bCont": + bCont = i.fLambda(list(map(lambda oX: state[oX], i.tsArguments))) + if i.sVariableToModify == "debugInfo": + debugInfo = i.fLambda(list(map(lambda oX: state[oX], i.tsArguments))) + if i.sVariableToModify == "gPlayer": + gPlayer = i.fLambda(list(map(lambda oX: state[oX], i.tsArguments))) + if i.sVariableToModify == "bCap": + bCap = i.fLambda(list(map(lambda oX: state[oX], i.tsArguments))) + if i.sVariableToModify is None: + i.fLambda(list(map(lambda oX: state[oX], i.tsArguments))) display.fill(WHITE) drawn = draw(level,gPlayer,pi/4,320)