import pygame import math class Line: def __init__(self, screen, method, pos, size, maincolor, bgcolor): self.screen = screen self.method = method self.start_pos = pos self.length = size self.color = maincolor self.bgcolor = bgcolor self.angle = 0 # Angle in degrees self.end_pos = self.calculate_end_pos() def calculate_end_pos(self): """Calculate the end position of the line based on the angle and length.""" x_offset = self.length * math.cos(math.radians(self.angle)) y_offset = self.length * math.sin(math.radians(self.angle)) return (self.start_pos[0] + x_offset, self.start_pos[1] + y_offset) def rotate(self, degree): """Rotate the line around its start position.""" self.angle = (self.angle + degree) % 360 self.end_pos = self.calculate_end_pos() def resize(self, new_length): """Change the length of the line.""" self.length = new_length self.end_pos = self.calculate_end_pos() def recolor(self, color): """Change the color permanently.""" self.color = color def recolor_tmp(self, color, time_): """Change the color temporarily.""" original_color = self.color self.color = color pygame.time.set_timer(pygame.USEREVENT, time_ * 1000) # Set a timer for the specified time # Event handling for reverting color def revert_color(event): if event.type == pygame.USEREVENT: self.color = original_color pygame.time.set_timer(pygame.USEREVENT, 0) # Stop the timer return revert_color def move(self, degree, length): """Move the line by a certain degree and length.""" self.start_pos = (self.start_pos[0] + length * math.cos(math.radians(degree)), self.start_pos[1] + length * math.sin(math.radians(degree))) self.end_pos = self.calculate_end_pos() def show(self): """Draw the line on the screen.""" pygame.draw.line(self.screen, self.color, self.start_pos, self.end_pos, 2) def hide(self): """Clear the line from the screen by drawing over it with the background color.""" pygame.draw.line(self.screen, self.bgcolor, self.start_pos, self.end_pos, 2) # Example usage: pygame.init() screen = pygame.display.set_mode((800, 600)) line = Line(screen, 'method', (400, 300), 100, (255, 0, 0), (0, 0, 0)) running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.USEREVENT: # Handle color revert event line.recolor_tmp((0, 255, 0), 2) # Example of temporary recoloring screen.fill((0, 0, 0)) # Clear the screen line.show() # Draw the line pygame.display.flip() # Update the display pygame.quit()