74 lines
2.8 KiB
C#
74 lines
2.8 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Cysharp.Threading.Tasks;
|
|
using DG.Tweening;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
|
|
public class GameObjectPool : Singleton<GameObjectPool>
|
|
{
|
|
public Dictionary<string, List<GameObject>> storedObject = new();
|
|
public Canvas IconCanvas;
|
|
public TextMeshProUGUI TargetIcon;
|
|
|
|
|
|
public void CreateDebugSphere(Vector3 position)
|
|
{
|
|
var s = GameObject.CreatePrimitive(PrimitiveType.Sphere);
|
|
s.transform.position = position;
|
|
}
|
|
|
|
public GameObject Spawn(string resourcePath, Vector3 position = default, Quaternion rotation = default)
|
|
{
|
|
if (!storedObject.ContainsKey(resourcePath))
|
|
{
|
|
storedObject[resourcePath] = new List<GameObject>();
|
|
}
|
|
var availableObject = storedObject[resourcePath].Where(o => !o.activeSelf);
|
|
GameObject result = null;
|
|
var gameObjects = availableObject as GameObject[] ?? availableObject.ToArray();
|
|
if (!gameObjects.Any())
|
|
{
|
|
//如果一个可用的都找不出来的话,就去生成
|
|
result = Instantiate(Resources.Load<GameObject>(resourcePath), position, rotation);
|
|
storedObject[resourcePath].Add(result);
|
|
}
|
|
else
|
|
{
|
|
result = gameObjects.First();
|
|
result.transform.position = position;
|
|
result.transform.rotation = rotation;
|
|
}
|
|
result.SetActive(true);
|
|
return result;
|
|
}
|
|
|
|
|
|
public async UniTaskVoid GenerateIcon(GameObject source)
|
|
{
|
|
var go = GameObjectPool.Instance.Spawn("ResourceIcon");
|
|
var rect = go.GetComponent<RectTransform>();
|
|
IconCanvas = GameObject.Find("Canvas").GetComponent<Canvas>();
|
|
go.transform.SetParent(IconCanvas.transform);
|
|
rect.anchoredPosition = Vector2.zero;
|
|
// IconCanvas.worldCamera.WorldToScreenPoint(source.transform.position);
|
|
// go.GetComponent<RectTransform>().anchoredPosition = R;
|
|
TargetIcon = GameObject.Find("Canvas/TopBar/FaithStatus/FaithCountLabel").GetComponent<TextMeshProUGUI>();
|
|
// print($"from {go.transform.position} to {TargetIcon.rectTransform.anchoredPosition}");
|
|
|
|
// var tweenSequence = DOTween.Sequence();
|
|
var randTime = Random.Range(0.2f, 0.8f);
|
|
await rect.DOAnchorPos((Random.insideUnitCircle - Vector2.down) * 100, 0.2f);
|
|
await UniTask.WaitForSeconds(0.1f);
|
|
rect.DOMoveX(TargetIcon.rectTransform.position.x, randTime).SetEase(ArrayUtils.UIEasing.RandomPick());
|
|
await rect.DOMoveY(TargetIcon.rectTransform.position.y, randTime).SetEase(ArrayUtils.UIEasing.RandomPick());
|
|
|
|
// print("resource icon ++");
|
|
go.SetActive(false);
|
|
// TargetIcon.rectTransform.DOPunchScale(Vector3.one, 0.1f);
|
|
GameProcedureManager.Instance.FaithCount += 1;
|
|
}
|
|
|
|
}
|