Some checks failed
Godot CI / Import + smoke test (push) Failing after 19s
3D-сцена 4×4м: стены/пол/потолок, окно (свечение), дверь, стол с пека, кровать с одеялом, подарок-коробка на полу, отец-NPC в дверях. Архитектура: - FPVController (CharacterBody3D + Camera3D + RayCast3D) — mouse look, WASD, raycast-pickup, lock_input для катсцен. - Interactable (StaticBody3D base) — toggle через collision_layer. - DialogManager (autoload CanvasLayer) — субтитры snake-case, fullscreen записка, HUD-подсказки, prompt над крестом, await через signal. - act1.gd — state machine: INTRO → EXPLORE_GIFT → INSIDE_GIFT → NOTE_READ → FATHER_FAREWELL (tween x-2.5) → SEEK_DRIVE → ENDING. Канон-реплики из Пролог_Первый_день.md без правок: - Отец intro + про флешку с Шиндой - Записка «Не сожги. Пароль от Wi-Fi на холодильнике. — Бать» - Мысли героя: «новый пека?», «бать ну ты красавчик», «Андрюхино так Андрюхино» GL Compatibility renderer, unshaded материалы плоскими цветами под pixel-art 640×360. Тестировано на RTX 5070 — стартует без ошибок. main.tscn placeholder удалён, main_scene = act1_room.tscn. Не покрыто в MVP (TBD): - Опц. выход на кухню → холодильник → Wi-Fi пароль - Mastermind hack-mini-game для подбора Wi-Fi - Sfxr звуки (открытие коробки, шаги) - Переход в Акт 2 (пока quit на финале) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
32 lines
534 B
GDScript
32 lines
534 B
GDScript
class_name Interactable extends StaticBody3D
|
|
|
|
@export var prompt: String = "Взаимодействовать"
|
|
@export var enabled: bool = false
|
|
|
|
signal interacted(player: Node)
|
|
|
|
|
|
func _ready() -> void:
|
|
_apply_collision()
|
|
|
|
|
|
func set_interactable(v: bool) -> void:
|
|
enabled = v
|
|
_apply_collision()
|
|
|
|
|
|
func _apply_collision() -> void:
|
|
if enabled:
|
|
collision_layer = 1
|
|
else:
|
|
collision_layer = 0
|
|
|
|
|
|
func get_prompt() -> String:
|
|
return prompt
|
|
|
|
|
|
func interact(player: Node) -> void:
|
|
if not enabled:
|
|
return
|
|
interacted.emit(player)
|