changed node naming system to post-creation

This commit is contained in:
Toby Lane 2024-07-01 23:41:48 +02:00
parent efe158f83f
commit 258b2613d5
3 changed files with 30 additions and 23 deletions

View File

@ -38,11 +38,10 @@ class Editor:
lambda z: self.font.render(str(z), True, (255, 255, 255)), lambda z: self.font.render(str(z), True, (255, 255, 255)),
self.ZOOMS self.ZOOMS
)) ))
self.is_creating_node: bool = False self.is_renaming_node: bool = False
self.state: State = State.STOPPING self.state: State = State.STOPPING
self.graph = Graph() self.graph = Graph()
self.typing_text: str = "" self.typing_text: str = ""
self.node_candidate_pos: tuple[int, int] = None
self.node_radius: int = 10 self.node_radius: int = 10
self.line_size: int = int(self.node_radius / 5) self.line_size: int = int(self.node_radius / 5)
self.edge_detect_radius: int = 3 * self.line_size self.edge_detect_radius: int = 3 * self.line_size
@ -77,13 +76,12 @@ class Editor:
self.width = event.x self.width = event.x
self.height = event.y self.height = event.y
elif event.type == pygame.KEYDOWN: elif event.type == pygame.KEYDOWN:
if self.is_creating_node: if self.is_renaming_node:
if event.key == pygame.K_ESCAPE: if event.key == pygame.K_ESCAPE:
self.is_creating_node = False self.is_renaming_node = False
self.node_candidate_pos = None
self.typing_text = "" self.typing_text = ""
elif event.key == pygame.K_RETURN: elif event.key == pygame.K_RETURN:
self.create_node() self.rename_nodes()
elif event.key == pygame.K_BACKSPACE: elif event.key == pygame.K_BACKSPACE:
self.typing_text = self.typing_text[:-1] self.typing_text = self.typing_text[:-1]
else: else:
@ -101,6 +99,10 @@ class Editor:
self.zoom_out() self.zoom_out()
elif event.key == pygame.K_BACKSPACE: elif event.key == pygame.K_BACKSPACE:
self.deleted_selected_objects() self.deleted_selected_objects()
elif event.key == pygame.K_RETURN:
if len(self.selected_nodes) > 0:
self.typing_text = "" if len(self.selected_nodes) > 1 else self.graph.nodes[self.selected_nodes[0]].name
self.is_renaming_node = True
elif event.type == pygame.MOUSEBUTTONDOWN: elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 2: if event.button == 2:
self.mid_drag_pos = event.pos self.mid_drag_pos = event.pos
@ -112,8 +114,7 @@ class Editor:
else: else:
self.select_object(keys[pygame.K_LSHIFT] or keys[pygame.K_RSHIFT]) self.select_object(keys[pygame.K_LSHIFT] or keys[pygame.K_RSHIFT])
elif event.button == 3: elif event.button == 3:
self.node_candidate_pos = self.screen_to_world(event.pos[0], event.pos[1]) self.create_node(self.screen_to_world(event.pos[0], event.pos[1]))
self.is_creating_node = True
elif event.button == 4: elif event.button == 4:
self.zoom_in() self.zoom_in()
elif event.button == 5: elif event.button == 5:
@ -200,8 +201,8 @@ class Editor:
pygame.draw.rect(self.win, (80, 80, 80), [0, 0, mouse_txt.get_width() + 10, mouse_txt.get_height() + 10]) pygame.draw.rect(self.win, (80, 80, 80), [0, 0, mouse_txt.get_width() + 10, mouse_txt.get_height() + 10])
self.win.blit(mouse_txt, [5, 5]) self.win.blit(mouse_txt, [5, 5])
if self.is_creating_node: if self.is_renaming_node:
self.render_node_creator() self.render_node_renamer()
pygame.display.flip() pygame.display.flip()
@ -246,7 +247,7 @@ class Editor:
pygame.display.flip() pygame.display.flip()
def render_node_creator(self) -> None: def render_node_renamer(self) -> None:
width = self.width / 2 width = self.width / 2
height = self.height / 2 height = self.height / 2
x0 = (self.width - width) / 2 x0 = (self.width - width) / 2
@ -254,8 +255,8 @@ class Editor:
line_height = height / 6 line_height = height / 6
nc_txt = self.loading_font.render("NODE CREATOR", True, (255, 255, 255)) nc_txt = self.loading_font.render("RENAME NODE", True, (255, 255, 255))
name_txt = self.loading_font.render("Name:", True, (255, 255, 255)) name_txt = self.loading_font.render("New name:", True, (255, 255, 255))
txt = self.loading_font.render(self.typing_text, True, (255, 255, 255)) txt = self.loading_font.render(self.typing_text, True, (255, 255, 255))
pygame.draw.rect(self.win, (0, 0, 0), [x0, y0, width, height]) pygame.draw.rect(self.win, (0, 0, 0), [x0, y0, width, height])
@ -398,16 +399,19 @@ class Editor:
self.selected_nodes = [] self.selected_nodes = []
self.selected_edges = [] self.selected_edges = []
def create_node(self) -> None: def rename_nodes(self) -> None:
self.graph.add_node(self.node_candidate_pos[0], self.node_candidate_pos[1], self.typing_text) for node in self.selected_nodes:
self.graph.nodes[node].rename_node(self.typing_text)
self.typing_text = "" self.typing_text = ""
self.node_candidate_pos = None self.is_renaming_node = False
self.is_creating_node = False
def create_node(self, pos, typing_text = "") -> None:
self.graph.add_node(pos[0], pos[1], typing_text)
if len(self.selected_nodes) == 1: if len(self.selected_nodes) == 1:
self.previously_created_nodes.append(self.selected_nodes[0]) self.previously_created_nodes.append(self.selected_nodes[0])
self.select_node(self.graph.number_of_nodes() - 1) self.select_node(self.graph.number_of_nodes() - 1)
def create_edge(self, node_1: int, node_2: int): def create_edge(self, node_1: int, node_2: int) -> None:
n1 = self.graph.nodes[node_1] n1 = self.graph.nodes[node_1]
n2 = self.graph.nodes[node_2] n2 = self.graph.nodes[node_2]
self.graph.add_edge(node_1, node_2, ((n1.x - n2.x) ** 2 + (n1.z - n2.z) ** 2) ** 0.5) self.graph.add_edge(node_1, node_2, ((n1.x - n2.x) ** 2 + (n1.z - n2.z) ** 2) ** 0.5)

View File

@ -9,8 +9,8 @@ class Graph:
self.edges: list[Edge] = [] self.edges: list[Edge] = []
self.nodes: list[Node] = [] self.nodes: list[Node] = []
def add_node(self, x: int, z: int, name: str) -> None: def add_node(self, x: int, z: int, name: str = "") -> None:
self.nodes.append(Node(x, z, name, len(self.nodes))) self.nodes.append(Node(x, z, len(self.nodes), name))
def add_edge(self, start_index: int, end_index: int, length: float) -> None: def add_edge(self, start_index: int, end_index: int, length: float) -> None:
self.edges.append(Edge(start_index, end_index, length, len(self.edges))) self.edges.append(Edge(start_index, end_index, length, len(self.edges)))

View File

@ -1,6 +1,9 @@
class Node: class Node:
def __init__(self, x: int, z: int, name: str, index: int): def __init__(self, x: int, z: int, index: int, name: str = ""):
self.x: int = x self.x: int = x
self.z: int = z self.z: int = z
self.index: int = index self.index: int = index
self.name: str = name self.name: str = name
def rename_node(self, name: str):
self.name = name