InsAsterix/InsAsterix/Assets/Scripts/HUD/UIItemSpawner.cs
2023-09-09 19:44:28 +02:00

95 lines
2.8 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.UI;
public class UIItemSpawner : MonoBehaviour
{
[FormerlySerializedAs("EntityToSpawn")] public GameObject entityToSpawn ;
[FormerlySerializedAs("MaxNumberOfInstances")] public int maxNbEntityInstances ;
[FormerlySerializedAs("InitNumberOfInstances")] public int initNbEntityInstances ;
private GameObject[] _instances;
private int index = 0 ;
private int gap = 25 ;
// Animation
public Sprite[] m_SpriteArray;
public Sprite[] m_AltSpriteArray;
private bool toggleAlt = false;
private float normalSpeed = .07f;
private float altSpeed = .03f;
private float m_Speed ;
private int m_IndexSprite;
private Image[] _images;
Coroutine m_CorotineAnim;
void Start()
{
_instances = new GameObject[maxNbEntityInstances];
_images = new Image[maxNbEntityInstances];
for (int index = 0; index < initNbEntityInstances; index++)
{
SpawnEntity() ;
}
m_Speed = normalSpeed;
StartCoroutine(PlayAnimUI());
}
public void SpawnEntity()
{
if (index >= maxNbEntityInstances)
return;
var currentPos = gameObject.transform.position;
gameObject.transform.position = new Vector3(currentPos.x + gap, currentPos.y, currentPos.z);
_instances[index] = Instantiate(entityToSpawn, transform.parent, true);
_images[index] = _instances[index].GetComponent<Image>();
_instances[index].transform.position = currentPos;
index++;
}
public void DespawnEntity()
{
Debug.Log(index);
if (index <= 0)
return;
var currentPos = gameObject.transform.position;
gameObject.transform.position = new Vector3(currentPos.x - gap, currentPos.y, currentPos.z); ;
index--;
Destroy(_instances[index]);
}
public void SetAltItem(bool alt)
{
toggleAlt = alt;
m_Speed = alt ? altSpeed : normalSpeed;
Debug.Log(m_Speed);
}
IEnumerator PlayAnimUI()
{
yield return new WaitForSeconds(m_Speed);
if (m_IndexSprite >= m_SpriteArray.Length)
{
m_IndexSprite = 0;
}
for (int currentIndex = 0; currentIndex < index; currentIndex++)
{
var _spriteIndex = (m_IndexSprite + maxNbEntityInstances - currentIndex) % m_SpriteArray.Length;
Debug.Log(_spriteIndex);
_images[currentIndex].sprite = toggleAlt ? m_AltSpriteArray[_spriteIndex] : m_SpriteArray[_spriteIndex];
}
m_IndexSprite += 1;
m_CorotineAnim = StartCoroutine(PlayAnimUI());
}
}