global_match_memory/touch_area.py
2025-12-03 16:08:36 +01:00

78 lines
2.1 KiB
Python

import pygame
from pythonosc import dispatcher, osc_server
import threading
#python test_touch_area.py
SCREEN_WIDTH = 900
SCREEN_HEIGHT = 500
# Letzter Touchpunkt
touch_pos = None
def osc_touch(address, x, y):
global touch_pos
touch_pos = (int(x), int(y))
print("Touch empfangen:", touch_pos)
def start_osc():
disp = dispatcher.Dispatcher()
disp.map("/touch", osc_touch)
server = osc_server.ThreadingOSCUDPServer(("127.0.0.1", 5005), disp)
print("🔌 OSC Touch-Test läuft auf Port 5005")
server.serve_forever()
def draw_quadrants(screen):
"""Farbliche Quadranten zur Orientierung."""
colors = [(50, 50, 200), (200, 50, 50), (50, 180, 50), (200, 200, 50)]
rects = [
pygame.Rect(0, 0, SCREEN_WIDTH//2, SCREEN_HEIGHT//2),
pygame.Rect(SCREEN_WIDTH//2, 0, SCREEN_WIDTH//2, SCREEN_HEIGHT//2),
pygame.Rect(0, SCREEN_HEIGHT//2, SCREEN_WIDTH//2, SCREEN_HEIGHT//2),
pygame.Rect(SCREEN_WIDTH//2, SCREEN_HEIGHT//2, SCREEN_WIDTH//2, SCREEN_HEIGHT//2),
]
for i, r in enumerate(rects):
pygame.draw.rect(screen, colors[i], r)
pygame.draw.rect(screen, (0,0,0), r, 2)
def main():
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("🧪 Touch-Testfläche")
font = pygame.font.SysFont(None, 28)
clock = pygame.time.Clock()
# OSC starten
threading.Thread(target=start_osc, daemon=True).start()
global touch_pos
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
return
screen.fill((30, 30, 30))
# Quadranten zeigen
draw_quadrants(screen)
# Touch anzeigen
if touch_pos is not None:
pygame.draw.circle(screen, (255, 255, 255), touch_pos, 12)
pygame.draw.circle(screen, (0, 0, 0), touch_pos, 12, 2)
txt = font.render(f"{touch_pos[0]}, {touch_pos[1]}", True, (255, 255, 255))
screen.blit(txt, (touch_pos[0] + 15, touch_pos[1] - 10))
pygame.display.flip()
clock.tick(60)
if __name__ == "__main__":
main()