// ───────────────────────────────────────────────────────────────────────────── // WLEquipGui.Gacha.cs — 장비 상자(열쇠) 시트 · 결과 화면 · 확률/천장 팝업 (#825 연출을 v3 Layer Lab 스킨으로 이식 · 2026-10-12) // // 진입 = 허브 상단 열쇠 알약의 「+」. 바닥 시트(상자 흔들림 → 등급 색 번쩍임 → 결과 카드 등장 → 전설(S) 별 튀기) · 확률·천장 바. // 로직은 WLEquipGacha(Draw · LastResults · Box). 치수·시간은 json `gacha`. // ───────────────────────────────────────────────────────────────────────────── using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; namespace WL.Equip { public partial class WLEquipGui { GameObject _boxPopup, _resultView, _ratesPopup; RectTransform _chest, _resultGrid; Image _chestImg, _chestGlow, _flash, _resultGlow, _epicBarFill, _sBarFill; TextMeshProUGUI _boxInfo, _boxKeys, _boxLog, _resultTitle, _resultHint, _ratesPity; Button _box1Btn, _box10Btn, _keyBtn, _ratesBtn, _againBtn, _resultCloseBtn; readonly List _resultCards = new List(); readonly List _resultNames = new List(); readonly List _ratesRows = new List(); readonly List _ratesPills = new List(); readonly List _ratesNames = new List(), _ratesPcts = new List(); Coroutine _drawCo; bool _revealing, _skipReveal; int _lastDrawCount = 1; public static int DrawsAnimated, ResultsShown; // ── 시트 ── void BuildBoxPopup() { _boxPopup = new GameObject("GachaSheet", typeof(RectTransform)); _boxPopup.layer = UILayer; _boxPopup.transform.SetParent(_root, false); var prt = (RectTransform)_boxPopup.transform; Stretch(prt); var dim = NewImage(prt, "Dim", null, Col("dim", new Color(0f, 0f, 0f, 0.7f)), Image.Type.Simple); Stretch(dim.rectTransform); dim.raycastTarget = true; var dimBtn = dim.gameObject.AddComponent