카테고리 없음

Unity 본캠프 63일차

julesnow 2025. 7. 10. 01:34
using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;
using System.Linq;

public class EntiremapUI : BaseUI
{
    public override CanvasLayer Layer => CanvasLayer.StagePopup;
    public RectTransform panel;
    public RectTransform roomIconPrefab;
    private List<RectTransform> _roomIcons = new();
    private FloorManager _floorManager;
    
    private float _roomCellSpacing = 105f;
    private Vector2 _roomSize = new(10, 10); // 기준 방 사이즈
    
    public override void Enable()
    {
        // var floorManager = FindObjectOfType<FloorManager>();
        // if (floorManager != null && floorManager.IsBattle)
        // {
        //     Logger.Log("전투 중에는 지도를 열 수 없습니다!");
        //     return;
        // }
    
        gameObject.SetActive(true);
    }

    public override void Disable() => gameObject.SetActive(false);


    public void Init(FloorManager floorManager)
    {
        _floorManager = floorManager;

        RefreshMap();
    }
    
    private void RefreshMap()
    {
        foreach (var icon in _roomIcons)
        {
            Destroy(icon.gameObject);
        }
        
        _roomIcons.Clear();

        
        Vector2Int playerCell = _floorManager.CurEnteredRoom.Cell;

        
        float centerX = panel.rect.width * 0.5f;
        float centerY = panel.rect.height * 0.5f;
        

        foreach (var room in _floorManager.State.TotalRooms)
        {
            if (!room.IsDiscovered) continue;
            
            Vector2Int offset = room.Cell - playerCell;
            float uiX = offset.x * _roomCellSpacing + centerX;
            float uiY = offset.y * _roomCellSpacing + centerY;

            var newIcon = Instantiate(roomIconPrefab, panel);

            int cellSizeX  =  (int)room.RoomBounds.size.x / (int)_roomSize.x;
            // 비율 반영 시
            // float sizeX = room.RoomSize.x * 5f; 
            // float sizeY = room.RoomSize.y * 5f;
            
            /*float cellWidth = room.IsBig ? 210f : 105f;
            float cellHeight = room.IsBig ? 210f : 105f;
            rt.anchoredPosition = new Vector2(uiX, uiY);
            rt.sizeDelta = new Vector2(cellWidth, cellHeight);*/
            
            newIcon.GetComponentInChildren<Button>()?.onClick.AddListener(() => { OnClickRoom(room); });
            Logger.Log("CLICK!");
            
            _roomIcons.Add(newIcon);
        }
    }

    private void OnClickRoom(BaseRoom room)
    {
        // var floorManager = FindObjectOfType<FloorManager>();
        // if (floorManager != null && floorManager.IsBattle)
        // {
        //     Logger.Log("전투 중에는 이동할 수 없습니다!");
        //     return;
        // }
        
        // if (isBattle)
        // {
        //     Logger.Log("전투 중에 이동할 수 없슴니다.");
        // }

        var player = _floorManager.Player;

        player.transform.position = room.RoomBounds.center;
        Logger.Log($"텔레포트: {room.name} 방으로 이동!");
        
        room.EnterRoom(player);
        
        gameObject.SetActive(false);
    }
}