From 3975a28ed1cd17f2181adf8f679ea6cf8656a762 Mon Sep 17 00:00:00 2001 From: Dmitrii Bykov Date: Sun, 24 May 2026 17:17:43 +0300 Subject: [PATCH] act1: fix WASD + 3D pixelation (canvas_items stretch) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. stretch/mode: viewport → canvas_items + aspect=keep 3D теперь рендерится в native window resolution (1920×1080), а 2D UI остаётся в 640×360 logical coords с nearest-фильтрацией — гибрид smooth 3D + pixel-art UI. 2. [input] map: добавлены move_forward/back/left/right на WASD + стрелки (physical_keycode для layout-независимости). Дефолтные ui_left/right/up/down в Godot 4 биндятся только на стрелки — поэтому WASD ничего не делал. 3. HUD-подсказка обновлена: «WASD ходить · мышь смотреть · ЛКМ взаимодействие». Co-Authored-By: Claude Opus 4.7 (1M context) --- project.godot | 30 +++++++++++++++++++++++++++++- scripts/player/fpv_controller.gd | 2 +- scripts/prologue/act1.gd | 2 +- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/project.godot b/project.godot index 0dca601..40ec271 100644 --- a/project.godot +++ b/project.godot @@ -25,7 +25,35 @@ window/size/viewport_width=640 window/size/viewport_height=360 window/size/window_width_override=1920 window/size/window_height_override=1080 -window/stretch/mode="viewport" +window/stretch/mode="canvas_items" +window/stretch/aspect="keep" + +[input] + +move_forward={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +move_back={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +move_left={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +move_right={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} [rendering] diff --git a/scripts/player/fpv_controller.gd b/scripts/player/fpv_controller.gd index 7416ea8..cfc6b41 100644 --- a/scripts/player/fpv_controller.gd +++ b/scripts/player/fpv_controller.gd @@ -61,7 +61,7 @@ func _physics_process(delta: float) -> void: move_and_slide() _update_focus() return - var input_dir: Vector2 = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down") + var input_dir: Vector2 = Input.get_vector("move_left", "move_right", "move_forward", "move_back") var direction: Vector3 = (transform.basis * Vector3(input_dir.x, 0.0, input_dir.y)).normalized() velocity.x = direction.x * move_speed velocity.z = direction.z * move_speed diff --git a/scripts/prologue/act1.gd b/scripts/prologue/act1.gd index eac8ed4..ef5e0a6 100644 --- a/scripts/prologue/act1.gd +++ b/scripts/prologue/act1.gd @@ -21,7 +21,7 @@ func _ready() -> void: player.interactable_focused.connect(_on_player_focused) player.interactable_unfocused.connect(_on_player_unfocused) - DialogManager.set_hud("Акт 1 — Подарок · ЛКМ/ПРОБЕЛ — дальше · ESC — мышь · Q — выход") + DialogManager.set_hud("Акт 1 — Подарок · WASD ходить · мышь смотреть · ЛКМ взаимодействие · ESC мышь · Q выход") await get_tree().create_timer(0.8).timeout await DialogManager.say("ОТЕЦ", "Ну? Чё стоишь. Распаковывай давай. Сам собирал, между прочим — полночи не спал.")