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);
}
}