UPF/Assets/Game/Scripts/CollectEffect.cs
2022-12-14 01:49:10 +05:30

94 lines
3.7 KiB
C#

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<ParticleSystem>().maxParticles = (int)Mathf.Clamp(amount * EffectScale, 5, 100);
// Vector3 ViewportPosition = Camera.main.WorldToViewportPoint(goldMine.position);
// RectTransform CanvasRect = GoldEffect.root.GetComponent<RectTransform>();
// 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<ParticleSystem>().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);
// }
}