using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class Rotate : MonoBehaviour,IDragHandler,IEndDragHandler
{
public Image prefab;
public float max, min, spaceing;
float r, g, distance, Ang;
int num;
List<Image> objs = new List<Image>();
List<Transform> sort = new List<Transform>();
// Start is called before the first frame update
void Start()
{
num = DataManager.Instance.MapDataList.Count;
g = (prefab.GetComponent<RectTransform>().rect.width + spaceing) * num;
r = g / Mathf.PI / 2;
Ang = 2 * Mathf.PI / num;
Move();
}
public void Move()
{
float moveAng = distance / r;
for (int i = 0; i < num; i++)
{
if(objs.Count<=i)
{
Image image = Instantiate(prefab, transform);
image.GetComponent<MapItem>().SaveData(DataManager.Instance.MapDataList[i]);//加载资源
image.name = "Map_" + i;//名字随便
objs.Add(image);
sort.Add(image.transform);
}
float x = Mathf.Sin(i * Ang + moveAng) * r;
float y = Mathf.Cos(i * Ang + moveAng) * r;
objs[i].rectTransform.anchoredPosition = new Vector2(x, 0);
float p = (y + r) / (2 * r);
float scale = (max - min) * p + min;
objs[i].transform.localScale = Vector3.one * scale;
sort.Sort((a, b) => {
if(a.localScale.x>b.localScale.x)
{
return 1;
}
else if(a.localScale.x == b.localScale.x)
{
return 0;
}
else
{
return -1;
}
});
for (int j = 0; j < sort.Count; j++)
{
sort[j].SetSiblingIndex(j);
}
}
}
public void OnDrag(PointerEventData eventData)
{
distance += eventData.delta.x;
Move();
}
public void OnEndDrag(PointerEventData eventData)
{
float speed = eventData.delta.x;
float time = Mathf.Abs(speed) / 50;
DOTween.To((a) => {
distance += a;
Move();
},speed,0,time).OnComplete(()=> { Align(); });
}
public void Align()
{
float x = sort[num - 1].GetComponent<RectTransform>().anchoredPosition.x;
float moveAng = Mathf.Asin(x / r) * r;
float time = Mathf.Abs(moveAng) / 100;
DOTween.To((a) => {
distance = a;
Move();
},distance,distance-moveAng,time);
}
// Update is called once per frame
void Update()
{
}
}