import threading
import time
+import os
from pygame import mixer
from pynput import keyboard
+TEXT_PATH = "copy-pastas/"
-with open("badjoke.txt", "r") as f:
- script = f.read()
- script = script.replace("’", "'")
+delay = 0.025 # delay between each character typed in seconds.
+keys = {eval(f"keyboard.Key.f{i + 1}"): "" for i in range(12)}
+scripts = []
+for root, dirs, files in os.walk(TEXT_PATH):
+ for i, x in enumerate(zip(files, keys)):
+ file, key = x
+ with open(os.path.join(TEXT_PATH, file), "r") as f:
+ keys[key] = f.read().replace("’", "'")
+# Sound
mixer.init()
-
-mixer.music.load("reddit-admin-typing-14393.mp3")
+mixer.music.load("reddit-admin-typing.mp3")
mixer.music.set_volume(0.5)
-delay = 0.025
+# to stop typing before end.
+stopped = False
+
-def typer():
+def typer(text):
+ global stopped
mixer.music.play(-1)
k = keyboard.Controller()
- for char in script:
+ for char in text:
if char == "\n":
char = keyboard.Key.enter
- # print(f"{char=}, {keyboard.Key.enter}", end='')
k.press(char)
time.sleep(delay)
k.release(char)
+ if stopped:
+ break
mixer.music.stop()
def on_press(key):
- if key == keyboard.Key.f5:
- t = threading.Thread(target=typer)
+ global stopped
+ if key in keys: # having another thread so we can detect input while typing
+ stopped = False
+ t = threading.Thread(target=typer, args=[keys[key]])
t.start()
- if key == keyboard.Key.esc:
+ elif key == keyboard.Key.pause:
+ stopped = True
+ elif key == keyboard.Key.esc:
quit()
-with keyboard.Listener(on_press=on_press) as listener:
+with keyboard.Listener(on_press=on_press) as listener: # listening for events
listener.join()
self.index = 0
self.typed_words = [""]
self.display_words = [self.font.render("", True, BLACK)]
- self.position = pygame.Vector2(self.left_bound, HEIGHT/2)
+ self.position = pygame.Vector2(self.left_bound, HEIGHT / 2)
self.draw_cursor = True
self.time = 0
self.draw_cursor = not self.draw_cursor
self.time = 0
self.time += delta
+
def add_new_line(self):
self.position.y -= self.display_words[-1].get_height()
self.typed_words.append("")
self.display_words.append(self.font.render("", True, BLACK))
-
def draw(self, surf):
surf.fill(WHITE)
prev = self.position.copy()
# pygame.draw.line(surf, BLACK, (self.left_bound, 0), (self.left_bound, HEIGHT))
# pygame.draw.line(surf, BLACK, (self.right_bound, 0), (self.right_bound, HEIGHT))
if self.draw_cursor:
- pygame.draw.line(surf, BLACK, (prev.x + self.display_words[-1].get_width(),prev.y - self.display_words[-1].get_height()),(prev.x + self.display_words[-1].get_width(),prev.y))
+ pygame.draw.line(surf, BLACK, (
+ prev.x + self.display_words[-1].get_width(), prev.y - self.display_words[-1].get_height()),
+ (prev.x + self.display_words[-1].get_width(), prev.y))
game = Words()