You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
4.0 KiB
119 lines
4.0 KiB
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace UltraCombos.Marvel.DrawHeroes
|
|
{
|
|
public class RoleLocationManager : MonoBehaviour
|
|
{
|
|
public RectTransform highlight;
|
|
public RectTransform magnify;
|
|
public Vector4 magnifyScale;
|
|
|
|
[Header("Debug")]
|
|
public bool mode = false;
|
|
[Range(0, 20)]
|
|
public int index = 0;
|
|
|
|
Dictionary<string, RawImage> roles;
|
|
RectTransform target_role;
|
|
List<Vector3> target_positions;
|
|
|
|
private void Start()
|
|
{
|
|
var role_images = GetComponentsInChildren<RawImage>();
|
|
|
|
roles = new Dictionary<string, RawImage>();
|
|
for (int i = 0; i < role_images.Length; i++)
|
|
{
|
|
if (i == 0)
|
|
continue;
|
|
var img = role_images[i];
|
|
roles.Add(img.name, img);
|
|
img.gameObject.SetActive(false);
|
|
}
|
|
|
|
#if UNITY_EDITOR
|
|
if (string.IsNullOrEmpty(AppData.Instance.roleId))
|
|
{
|
|
AppData.Instance.roleId = "ca";
|
|
}
|
|
#endif
|
|
|
|
string id = $"Role-{AppData.Instance.roleId}";
|
|
if (roles.ContainsKey(id))
|
|
{
|
|
var role = roles[id];
|
|
role.texture = AppData.Instance.lastPainting;
|
|
role.gameObject.SetActive(true);
|
|
//highlight.position = roles[id].transform.position;
|
|
target_role = roles[id].rectTransform;
|
|
}
|
|
|
|
var canvas = GetComponentInParent<Canvas>();
|
|
var size = canvas.pixelRect.size;
|
|
size = (transform.parent as RectTransform).sizeDelta;
|
|
var half_width = size.x * 0.5f;
|
|
var half_height = size.y * 0.5f;
|
|
|
|
target_positions = new List<Vector3>();
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
target_positions.Add(new Vector3(Random.Range(-half_width, half_width), Random.Range(-half_height, half_height)));
|
|
}
|
|
//target_positions.Add(target_role.position);
|
|
var pos = target_role.GetComponentInChildren<Pivot>().Position;
|
|
target_positions.Add(new Vector3(pos.x, pos.y));
|
|
|
|
if (mode == false || Application.isEditor == false)
|
|
{
|
|
StartCoroutine(Shift());
|
|
}
|
|
|
|
Utility.Pool.SoundPool.Instance.PlayOneShot("focus.aif");
|
|
}
|
|
|
|
private void FixedUpdate()
|
|
{
|
|
var imgs = new RawImage[roles.Count];
|
|
roles.Values.CopyTo(imgs, 0);
|
|
var i = Mathf.Clamp(index, 0, roles.Count - 1);
|
|
var rt = imgs[i].rectTransform;
|
|
var smooth = Time.fixedDeltaTime * 8.0f;
|
|
|
|
if (mode && Application.isEditor)
|
|
{
|
|
var pos = rt.GetComponentInChildren<Pivot>().Position;
|
|
highlight.position = Vector2.Lerp(highlight.position, pos, smooth);
|
|
}
|
|
|
|
float sc = Mathf.Lerp(magnifyScale.z, magnifyScale.w, Mathf.InverseLerp(magnifyScale.x, magnifyScale.y, rt.localScale.x));
|
|
magnify.localScale = Vector3.one * Mathf.Lerp(magnify.localScale.x, sc, smooth);
|
|
}
|
|
|
|
private IEnumerator Shift()
|
|
{
|
|
float smooth = 0.07f;
|
|
for (int i = 0; i < target_positions.Count - 1; i++)
|
|
{
|
|
var pos = target_positions[i];
|
|
float timestamp = Time.time;
|
|
float duration = Random.Range(0.2f, 0.8f);
|
|
while (Time.time - timestamp < duration)
|
|
{
|
|
highlight.anchoredPosition = Vector2.Lerp(highlight.anchoredPosition, new Vector2(pos.x, pos.y), smooth);
|
|
yield return null;
|
|
}
|
|
}
|
|
|
|
while (true)
|
|
{
|
|
highlight.position = Vector3.Lerp(highlight.position, target_positions[target_positions.Count - 1], smooth);
|
|
yield return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|