Skip to content
Snippets Groups Projects
Commit 0d0805bd authored by Fabian Heinrich's avatar Fabian Heinrich
Browse files

Clean up positions in drawing

parent 2d262255
No related branches found
No related tags found
1 merge request!38Resolve "Finalize coordinate system"
Pipeline #45027 passed
......@@ -78,13 +78,13 @@ class Visualizer:
)
self.draw_counters(
screen,
state,
state["counters"],
grid_size,
)
self.draw_players(
screen,
state,
state["players"],
grid_size,
)
......@@ -130,14 +130,14 @@ class Visualizer:
def draw_players(
self,
screen: pygame.Surface,
state_dict: dict,
players: dict,
grid_size: float,
):
"""Visualizes the players as circles with a triangle for the facing direction.
If the player holds something in their hands, it is displayed
Args: state: The game state returned by the environment.
"""
for p_idx, player_dict in enumerate(state_dict["players"]):
for p_idx, player_dict in enumerate(players):
player_dict: PlayerState
pos = np.array(player_dict["pos"]) * grid_size
pos += grid_size / 2 # correct for grid offset
......@@ -196,7 +196,7 @@ class Visualizer:
)
if player_dict["holding"] is not None:
holding_item_pos = pos + (20 * facing) - (grid_size / 2)
holding_item_pos = pos + (20 * facing)
self.draw_item(
pos=holding_item_pos,
grid_size=grid_size,
......@@ -244,7 +244,6 @@ class Visualizer:
if "center_offset" in part:
draw_pos += np.array(part["center_offset"]) * grid_size
draw_pos += grid_size / 2 # Correction for grid offset
match part_type:
case "image":
self.draw_image(
......@@ -257,10 +256,9 @@ class Visualizer:
height = part["height"] * grid_size
width = part["width"] * grid_size
color = part["color"]
draw_pos = pos.copy()
rect = pygame.Rect(
draw_pos[0] - (height / 2) + (grid_size / 2),
draw_pos[1] - (width / 2) + (grid_size / 2),
draw_pos[0] - (height / 2),
draw_pos[1] - (width / 2),
height,
width,
)
......@@ -268,7 +266,6 @@ class Visualizer:
case "circle":
radius = part["radius"] * grid_size
color = colors[part["color"]]
# draw_pos = pos.copy()
pygame.draw.circle(screen, color, draw_pos, radius)
def draw_item(
......@@ -343,6 +340,8 @@ class Visualizer:
grid_size: float,
):
"""Visualize progress of progressing item as a green bar under the item."""
pos -= grid_size / 2
bar_height = grid_size * 0.2
progress_width = percent * grid_size
progress_bar = pygame.Rect(
......@@ -361,8 +360,11 @@ class Visualizer:
different parts to be drawn.
Args: counter: The counter to visualize.
"""
pos = np.array(counter_dict["pos"]) * grid_size
pos = np.array(counter_dict["pos"], dtype=float) * grid_size
counter_type = counter_dict["type"]
pos += grid_size // 2 # correct for grid offset
self.draw_thing(screen, pos, grid_size, self.config["Counter"]["parts"])
if counter_type in self.config:
self.draw_thing(screen, pos, grid_size, self.config[counter_type]["parts"])
......@@ -405,21 +407,21 @@ class Visualizer:
screen=screen,
)
def draw_counters(self, screen: pygame, state, grid_size):
def draw_counters(self, screen: pygame, counters, grid_size):
"""Visualizes the counters in the environment.
Args: state: The game state returned by the environment.
"""
for counter in state["counters"]:
for counter in counters:
self.draw_counter(screen, counter, grid_size)
for counter in state["counters"]:
for counter in counters:
if counter["occupied_by"]:
self.draw_counter_occupier(
screen,
counter["occupied_by"],
grid_size,
np.array(counter["pos"]) * grid_size,
np.array(counter["pos"]) * grid_size + (grid_size / 2),
)
if SHOW_COUNTER_CENTERS:
pygame.draw.circle(
......@@ -460,13 +462,13 @@ class Visualizer:
)
center = np.array(order_upper_left)
self.draw_thing(
pos=center,
pos=center + (grid_size / 2),
parts=config["Plate"]["parts"],
screen=order_screen,
grid_size=grid_size,
)
self.draw_item(
pos=center,
pos=center + (grid_size / 2),
item={"type": order["meal"]},
plate=True,
screen=order_screen,
......@@ -482,7 +484,7 @@ class Visualizer:
percentage = order_done_seconds / order["max_duration"]
self.draw_progress_bar(
pos=center,
pos=center + (grid_size / 2),
percent=percentage,
screen=order_screen,
grid_size=grid_size,
......
......@@ -95,7 +95,6 @@ class PyGameGUI:
self.request_url = f"http://{url}:{port}"
self.manager_id = random.choice(manager_ids)
# TODO cache loaded images?
with open(ROOT_DIR / "gui_2d_vis" / "visualization.yaml", "r") as file:
self.visualization_config = yaml.safe_load(file)
......
......@@ -275,7 +275,6 @@ Oven:
color: black
height: 0.8
width: 0.3
center_offset: [ -0.4, -0.1 ]
Basket:
parts:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment