farming-simulator/scripts/prologue/act1_kitchen.gd
Dmitrii Bykov a6f6785188
Some checks failed
Godot CI / Import + smoke test (push) Failing after 34s
fix: установка пустая, отец в стену, нет меню
ФИКС АКТА 2 (главный баг):
- CenterContainer/WelcomeScreen/FourSquares имели
  anchor_right=1.0 + offset_right=640 → элементы уезжали
  ЗА пределы экрана (далеко на восток). Установочное окно
  было невидно. Заменил на anchors_preset=15 (full rect)
  без offset, теперь Center правильно центрирует Window.
- PanelContainer без StyleBox = прозрачный. Добавлены 3
  StyleBoxFlat (style_window — основное окно с рамкой,
  style_titlebar — тёмный header с жёлтым заголовком,
  style_panel — для вложенных панелей). Окно установки
  теперь видимо как настоящее Шиндовс-окно.
- Body теперь без scroll_active (fit_content), Buttons
  с min_size 110×28 — кнопки чётко видны.

ОТЕЦ:
- Шёл на ЗАПАД (position.x - 2.5 = -0.8) в стену, а дверь
  на ВОСТОКЕ. Меняю на +1.0 (восток к двери при x=2.05).
- _walk_father_out: сначала поворот корпуса 0.3 сек к двери
  (rotation:y = -PI/2), потом 1.4 сек шагание:
  * движение position:x на восток
  * абс(sin) bob тела на 0.04м (4 шага)
  * sin качание ног (LegL/LegR) и рук (ArmL/ArmR) в
    противофазе с амплитудой 0.4/0.24 радиан
- Теперь отец действительно идёт к двери с шагающей походкой.

ГЛАВНОЕ МЕНЮ (чего не хватало):
- scenes/main_menu.tscn: тёмный фон с виньетками, заголовок
  жёлтым акцентом, 4 кнопки (Новая игра / Продолжить /
  Настройки / Выйти), StyleBoxFlat для кнопок.
- main_menu.gd: ESC = Quit, кнопка «Новая игра» →
  SceneManager.go_room(), GameState.reset() при входе в меню.
- project.godot main_scene = main_menu.tscn (было act1_room).
- SceneManager + go_main() метод.

HUD UX:
- set_date_time("","") теперь прячет лейбл (раньше показывал
  "· "). В меню HUD скрыт полностью.
- В Акте 1 и кухне при _ready восстанавливается crosshair +
  controls_hint (которые меню скрывает).

ЧЕГО ВСЁ ЕЩЁ НЕ ХВАТАЕТ (для следующих сессий):
- Звуки/SFX (шаги, клики, sfxr-эффекты, дверь)
- Pause-меню по ESC во время геймплея
- Save/load система (сейчас всё сбрасывается)
- Анимация перехода между сценами (fade-in/out)
- Реальные ассеты (CC0 модели мебели/персонажей)
- Музыка/амбиент (CC0 трек комнаты)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 18:23:05 +03:00

65 lines
2.5 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

extends Node3D
@onready var player: FPVController = $PlayerFPV
@onready var fridge_note: Interactable = $Fridge/WiFiNote
@onready var door_back: Interactable = $WallS/DoorBack
func _ready() -> void:
_apply_textures()
player.interactable_focused.connect(_on_player_focused)
player.interactable_unfocused.connect(_on_player_unfocused)
if GameState.wifi_password_found:
fridge_note.set_interactable(false)
else:
fridge_note.set_interactable(true)
door_back.set_interactable(true)
DialogManager.set_date_time(GameState.game_date, GameState.game_time)
DialogManager.set_crosshair_visible(true)
DialogManager.set_controls_hint("WASD ходить · мышь смотреть · ЛКМ взаимодействие · ESC мышь · Q выход")
if GameState.wifi_password_found:
DialogManager.set_objective("Вернись в комнату — флешка ждёт")
else:
DialogManager.set_objective("Найди пароль Wi-Fi на холодильнике")
func _apply_textures() -> void:
var floor_mat: BaseMaterial3D = ($Floor/Mesh as MeshInstance3D).material_override
TextureGen.apply_to_material(floor_mat, TextureGen.linoleum(), Vector3(6, 6, 6))
var ceiling_mat: BaseMaterial3D = ($Ceiling/Mesh as MeshInstance3D).material_override
TextureGen.apply_to_material(ceiling_mat, TextureGen.ceiling(), Vector3(4, 4, 4))
for wall_path in ["WallN", "WallS", "WallE", "WallW"]:
var wall_node: Node = get_node(wall_path)
var wall_mat: BaseMaterial3D = (wall_node.get_node("Mesh") as MeshInstance3D).material_override
TextureGen.apply_to_material(wall_mat, TextureGen.wallpaper(), Vector3(6, 5, 6))
var door_panel_mat: BaseMaterial3D = ($WallS/DoorPanel as MeshInstance3D).material_override
TextureGen.apply_to_material(door_panel_mat, TextureGen.door(), Vector3(1, 1, 1))
func _on_player_focused(obj: Node) -> void:
if obj.has_method("get_prompt"):
DialogManager.set_prompt(obj.get_prompt())
func _on_player_unfocused() -> void:
DialogManager.clear_prompt()
func _on_note_interacted(_p: Node) -> void:
player.lock_input()
DialogManager.clear_prompt()
await DialogManager.show_note("«Wi-Fi: qwerty. Не парься.»\n— Бать")
fridge_note.set_interactable(false)
GameState.wifi_password_found = true
GameState.unlock_achievement("Wi-Fi разведчик")
DialogManager.set_objective("Вернись в комнату — флешка ждёт")
player.unlock_input()
func _on_door_back_interacted(_p: Node) -> void:
SceneManager.go_room()