using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class CollectEffect : MonoBehaviour { public static CollectEffect instance; public Camera FXCam; public Transform solarPanel; public Transform goldMine; public RectTransform goldStats, metalStats; public Animator GoldAnim, MetalAnim; public RectTransform GoldEffect, MetalEffect; public float EffectScale =1; void Awake(){ instance=this; } void Start() { } public void Show(CollectablesData.ResourceType type, int amount){ if(type == CollectablesData.ResourceType.Gold){ GoldEffect.GetComponent().maxParticles = (int)Mathf.Clamp(amount * EffectScale, 5, 100); // Vector3 ViewportPosition = Camera.main.WorldToViewportPoint(goldMine.position); // RectTransform CanvasRect = GoldEffect.root.GetComponent(); // Vector2 WorldObject_ScreenPosition=new Vector2( // ((ViewportPosition.x*CanvasRect.sizeDelta.x)-(CanvasRect.sizeDelta.x*0.5f)), // ((ViewportPosition.y*CanvasRect.sizeDelta.y)-(CanvasRect.sizeDelta.y*0.5f))); // Debug.Log(WorldObject_ScreenPosition); Vector2 WorldObject_ScreenPosition = Camera.main.WorldToScreenPoint(goldMine.position); StartCoroutine(startEffect(GoldEffect, WorldObject_ScreenPosition, goldStats.position)); // StartCoroutine(PlayAnimation(GoldAnim, GoldEffect)); }else{ MetalEffect.GetComponent().maxParticles = (int)Mathf.Clamp(amount * EffectScale, 5, 100); StartCoroutine(startEffect(MetalEffect, FXCam.WorldToScreenPoint(solarPanel.position), metalStats.position)); // StartCoroutine(PlayAnimation(MetalAnim,MetalEffect)); } } // IEnumerator PlayAnimation(Animator anim, Transform target){ // target.gameObject.SetActive(false); // anim.Play("CollectAnim"); // yield return new WaitForSeconds(0.05f); // target.gameObject.SetActive(true); // while(anim.GetCurrentAnimatorStateInfo(0).IsName("CollectAnim")){ // target.position = anim.transform.position; // yield return null; // } // } IEnumerator startEffect(RectTransform item,Vector3 start, Vector3 stop){ Vector3 diff = stop - start; item.gameObject.SetActive(true); Debug.Log(start + " : " + stop); for(int i =0; i < steps; i++){ item.position = start + (diff * ((float)i/(float)steps)); item.localScale = Vector3.one * (5 + (22 * (1-(float)(Mathf.Abs(((float)steps/2f) - i)) / ((float)steps / 2f)))); yield return new WaitForFixedUpdate(); } item.gameObject.SetActive(false); } [Header("Animation tweaks")] public int steps = 500; public int offset = 10; // IEnumerator startEffect(Vector3 start, Vector3 stop){ // Vector3 diff = stop - start; // for(int i=0; i < transform.childCount; i++){ // StartCoroutine(travel(transform.GetChild(i), start,stop)); // yield return new WaitForSeconds(0.1f); // } // } // IEnumerator travel(Transform item, Vector3 start, Vector3 stop){ // Vector3 diff = stop - start; // item.gameObject.SetActive(true); // for(int i =0; i < steps; i++){ // item.position = start + (diff * ((float)i/(float)steps)); // item.localScale = Vector3.one * (1-(float)(Mathf.Abs(((float)steps/2f) - i)) / ((float)steps / 2f)); // yield return new WaitForFixedUpdate(); // } // item.gameObject.SetActive(false); // } }