124 lines
4.1 KiB
C#
124 lines
4.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Doozy.Runtime.Reactor.Animators;
|
|
using Sirenix.OdinInspector;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using Random = UnityEngine.Random;
|
|
|
|
// ReSharper disable once CheckNamespace
|
|
namespace BlueWaterProject
|
|
{
|
|
public class UiManager : Singleton<UiManager>
|
|
{
|
|
[Title("Card")]
|
|
private Transform cardLayoutGroup;
|
|
public UIAnimator CardLayoutGroupAnimator { get; set; }
|
|
|
|
[Title("TakeAim")]
|
|
private GameObject takeAim;
|
|
private Texture2D cursorTexture;
|
|
private bool isTakeAim;
|
|
|
|
[Title("Radar")]
|
|
private Transform radar;
|
|
private Transform radarTargets;
|
|
public List<RadarTargetUI> RadarTargetUis { get; } = new (GlobalValue.MAX_CANON_COUNT);
|
|
public RadarNeedle RadarNeedle { get; private set; }
|
|
|
|
|
|
private void Init()
|
|
{
|
|
cardLayoutGroup = transform.Find("CardLayoutGroup");
|
|
CardLayoutGroupAnimator = cardLayoutGroup.GetComponent<UIAnimator>();
|
|
takeAim = transform.Find("Aim").gameObject;
|
|
|
|
radar = transform.Find("Radar");
|
|
radarTargets = radar.Find("RadarTargets");
|
|
|
|
RadarNeedle = radar.Find("RadarNeedle").GetComponent<RadarNeedle>();
|
|
}
|
|
|
|
protected override void OnAwake()
|
|
{
|
|
Init();
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
CursorTextureChange();
|
|
AssaultCardInit();
|
|
|
|
for (var i = 0; i < GameManager.Inst.player.Canons.Count; i++)
|
|
{
|
|
RadarTargetInit();
|
|
}
|
|
}
|
|
|
|
public void AddCard() //TODO Test button and function, delete later
|
|
{
|
|
Instantiate(DataManager.Inst.assaultCard, cardLayoutGroup);
|
|
}
|
|
|
|
public void AimOnOff(bool isOn)
|
|
{
|
|
takeAim.SetActive(isOn);
|
|
isTakeAim = isOn;
|
|
}
|
|
|
|
private void CursorTextureChange()
|
|
{
|
|
cursorTexture = DataManager.Inst.cursorTexture;
|
|
//var hotSpot = new Vector2(cursorTexture.width / 2f, cursorTexture.height / 2f);
|
|
var hotSpot = Vector2.zero;
|
|
Cursor.SetCursor(cursorTexture, hotSpot, CursorMode.Auto);
|
|
}
|
|
|
|
private void AssaultCardInit()
|
|
{
|
|
for (int i = 0; i < DataManager.Inst.CardList.Count; i++)
|
|
{
|
|
var obj = Instantiate(DataManager.Inst.assaultCard, cardLayoutGroup);
|
|
var draggableCard = obj.GetComponent<DraggableCard>();
|
|
draggableCard.card = DataManager.Inst.GetCardDictionaryFromKey(DataManager.Inst.CardList[i]);
|
|
draggableCard.CardInit();
|
|
}
|
|
}
|
|
|
|
public void RadarTargetInit()
|
|
{
|
|
var obj = Instantiate(DataManager.Inst.radarTargetUi, radarTargets);
|
|
var radarTargetUi = obj.GetComponent<RadarTargetUI>();
|
|
radarTargetUi.RadarTargetInit(Random.Range(0f, 360f), Random.Range(0.1f, 0.2f));
|
|
RadarTargetUis.Add(radarTargetUi);
|
|
}
|
|
|
|
public void CheckRadarOverlap()
|
|
{
|
|
var needleRotationZ = RadarNeedle.transform.eulerAngles.z;
|
|
|
|
for (var i = 0; i < RadarTargetUis.Count; i++)
|
|
{
|
|
var radarTargetUI = RadarTargetUis[i];
|
|
var startAngle = radarTargetUI.RotationZ;
|
|
var endAngle = radarTargetUI.RotationZ + radarTargetUI.Image.fillAmount * 360f;
|
|
|
|
// 각도 비교 및 허용 오차 추가
|
|
if (IsOverlap(needleRotationZ, startAngle, endAngle, GlobalValue.RADAR_OVERLAP_TOLERANCE)) // 5도의 오차 허용
|
|
{
|
|
radarTargetUI.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
private bool IsOverlap(float needleRotation, float startAngle, float endAngle, float tolerance = 0)
|
|
{
|
|
// 오프셋 보정 예시
|
|
var correctedNeedleRotation = needleRotation + 36;
|
|
|
|
return correctedNeedleRotation >= (startAngle - tolerance) && correctedNeedleRotation <= (endAngle + tolerance);
|
|
}
|
|
|
|
}
|
|
}
|