@tool extends "res://games/pacman/pacman_view.gd" ## A static design-time board, using the same renderer as the running game. ## No gameplay model, audio, input handlers, or room events are instantiated. func _ready() -> void: super._ready() if not Engine.is_editor_hint(): hide() set_process(false) return var preview_ghosts: Array[Dictionary] = [] for i in range(4): var ghost := Maze.actor([Maze.DOOR, Vector2i(13, 14), Vector2i(11, 14), Vector2i(15, 14)][i], Vector2i.LEFT) ghost["status"] = "active" if i == 0 else "house" ghost["frightened"] = false preview_ghosts.append(ghost) model = { "state": "ready", "phase_time": 2.0, "clock": 0.0, "score": 0, "high_score": 0, "level": 1, "lives": 3, "dots": Maze.pellets(), "player": Maze.actor(Maze.PLAYER_START, Vector2i.LEFT), "ghosts": preview_ghosts, "fruit_time": 0.0, "fright_time": 0.0, "popup_time": 0.0, } _update_preview() func _process(_delta: float) -> void: if Engine.is_editor_hint(): _update_preview() func _update_preview() -> void: # Match runtime placement inside the configured game viewport, independently # of the editor's current panel size, zoom, and pan. var screen_size := Vector2( ProjectSettings.get_setting("display/window/size/viewport_width", 1920), ProjectSettings.get_setting("display/window/size/viewport_height", 1080) ) var factor := minf(screen_size.x / GAME_RECT.size.x, screen_size.y / GAME_RECT.size.y) if factor >= 1.0: factor = floorf(factor) scale = Vector2.ONE * factor position = ((screen_size - GAME_RECT.size * factor) * 0.5).floor() model.lives = int(get_parent().get("starting_lives")) queue_redraw()