def draw(self): self.surface.fill(pygame.Color("WHITE")) self.tek_map.draw(self.surface, GREEN, RED, BLUE, 3, 3, 3) if self.mode == 1 and self.sel_reb != []: self.draw_sel_reb() if self.mode == 1: tek = pygame.mouse.get_pos() num = self.find_nearest_reb( geoma.point(tek[0] - self.dx, tek[1] - self.dy)) self.draw_reb(num, self.sel_time_color) if (self.mode == 1 and self.is_obl): a = min(self.point1.x, self.point2.x) b = min(self.point1.y, self.point2.y) w = max(self.point1.x, self.point2.x) - a h = max(self.point1.y, self.point2.y) - b pygame.draw.rect(self.surface, self.rect_color, pygame.Rect(a, b, w, h)) if self.mode == 0 and self.is_first: self.draw_new_reb() if (self.mode == 0 and not (self.is_first)): tek = pygame.mouse.get_pos() pygame.draw.circle( self.surface, self.sel_time_color, self.get_point(geoma.point(tek[0], tek[1])).to_arr(), 5) self.screen.blit(self.surface, (self.dx, self.dy)) pygame.display.update()
def __init__(self, screen_init: pygame.display, surface_init): self.surface = surface_init self.screen = screen_init self.tek_map = map() self.mode = 1 self.sel_reb = [] self.sel_color = pygame.Color("lightblue") self.sel_time_color = pygame.Color("Brown") self.sel_width = 6 self.is_first = 0 self.reb_type = "w" self.is_obl = 0 self.rect_color = pygame.Color("lightgray") self.point1 = geoma.point(0, 0) self.point2 = geoma.point(0, 0) self.last_point = geoma.point(0, 0)
def calc_walls(self): self.w1 = geoma.otr(geoma.point(self.point1.x, self.point1.y), geoma.point(self.point1.x, self.point2.y)) self.w2 = geoma.otr(geoma.point(self.point2.x, self.point1.y), geoma.point(self.point2.x, self.point2.y)) self.w3 = geoma.otr(geoma.point(self.point1.x, self.point1.y), geoma.point(self.point2.x, self.point1.y)) self.w4 = geoma.otr(geoma.point(self.point1.x, self.point2.y), geoma.point(self.point2.x, self.point2.y))
def load(self): path = easygui.fileopenbox("Выберите карту", "", "Maps/*.mirmap", [["*.*", "All files"]]) f = open(path, "r") lines = f.readlines() f.close() self.walls.clear() self.start.clear() self.finish.clear() j = 3 for i in range(int(lines[0])): tek = lines[j].split(" ") self.walls.append( geoma.otr(geoma.point(float(tek[0]), float(tek[1])), geoma.point(float(tek[2]), float(tek[3])))) j += 1 for i in range(int(lines[1])): tek = lines[j].split(" ") self.start.append( geoma.otr(geoma.point(float(tek[0]), float(tek[1])), geoma.point(float(tek[2]), float(tek[3])))) j += 1 for i in range(int(lines[2])): tek = lines[j].split(" ") self.finish.append( geoma.otr(geoma.point(float(tek[0]), float(tek[1])), geoma.point(float(tek[2]), float(tek[3])))) j += 1
def start(self): run = True change = True while run: if change: # change = False self.draw() for event in pygame.event.get(): pressed = pygame.key.get_pressed() self.shift_pressed = pressed[pygame.K_LSHIFT] or pressed[ pygame.K_RSHIFT] if event.type == pygame.QUIT: run = False if (self.mode == 0): if event.type == pygame.MOUSEBUTTONDOWN: if (event.button == 1): self.is_first = 1 self.first_point = geoma.point( event.pos[0], event.pos[1]) self.first_point = self.get_point(self.first_point) self.second_point = geoma.point( event.pos[0], event.pos[1]) self.second_point = self.get_point( self.second_point) change = 1 if (event.button == 3): self.is_first = 1 self.first_point = self.last_point self.second_point = geoma.point( event.pos[0], event.pos[1]) self.second_point = self.get_point( self.second_point) change = 1 if (event.type == pygame.MOUSEMOTION): if (self.is_first): self.second_point = geoma.point( event.pos[0], event.pos[1]) self.second_point = self.get_point( self.second_point) change = 1 if event.type == pygame.MOUSEBUTTONUP: if (event.button == 1): if (self.is_first): self.add_reb() change = 1 self.is_first = 0 self.last_point = geoma.point( event.pos[0] - self.dx, event.pos[1] - self.dy) if (event.button == 3): self.add_reb() change = 1 self.is_first = 0 self.last_point = self.second_point elif (self.mode == 1): if (event.type == pygame.MOUSEBUTTONDOWN): if (event.button == 1): tek = self.find_nearest_reb( geoma.point(event.pos[0] - self.dx, event.pos[1] - self.dy)) for x in self.sel_reb: if (x == tek): tek = -1 if (tek != -1): self.sel_reb.append(tek) change = 1 if event.type == pygame.MOUSEBUTTONDOWN: if (event.button == 3): self.is_obl = 1 self.point1 = geoma.point(event.pos[0], event.pos[1]) self.point1 = self.get_point(self.point1) self.point2 = geoma.point(event.pos[0], event.pos[1]) self.point2 = self.get_point(self.point2) change = 1 if (event.type == pygame.MOUSEMOTION): if (self.is_obl): self.point2 = geoma.point(event.pos[0] - self.dx, event.pos[1] - self.dy) # self.point2 = self.get_point(self.point2) change = 1 if event.type == pygame.MOUSEBUTTONUP: if (event.button == 3): if (self.is_obl): change = 1 self.is_obl = 0 self.select_obl() if event.type == pygame.KEYDOWN: if (event.key == pygame.K_ESCAPE): run = False if (event.key == pygame.K_0 and self.mode != 0): self.mode = 0 self.is_first = 0 self.is_obl = 0 self.sel_reb = [] change = True if (event.key == pygame.K_1 and self.mode != 1): self.mode = 1 self.is_first = 0 self.is_obl = 0 self.sel_reb = [] change = True if (event.key == pygame.K_s and (pressed[pygame.K_LCTRL] or pressed[pygame.K_RCTRL])): self.save() change = 1 if (event.key == pygame.K_o and (pressed[pygame.K_LCTRL] or pressed[pygame.K_RCTRL])): self.load() change = 1 if (event.key == pygame.K_n and (pressed[pygame.K_LCTRL] or pressed[pygame.K_RCTRL])): self.clear() change = 1 # -------------- if (event.key == pygame.K_w and self.reb_type != "w"): self.reb_type = "w" change = True if (event.key == pygame.K_s and self.reb_type != "s"): self.reb_type = "s" change = True if (event.key == pygame.K_f and self.reb_type != "f"): self.reb_type = "f" change = True if (event.key == pygame.K_DELETE and self.sel_reb != -1): self.delete_reb() change = 1
def get_point2(): a = get_point() return geoma.point(a["pos"][0], a["pos"][1])