43 lines
1.6 KiB
GDScript
43 lines
1.6 KiB
GDScript
@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()
|