using System.Collections.Generic;
using TowerDefense.Towers;
using UnityEngine;
namespace TowerDefense.UI
{
public class RadiusVisualizerController : MonoBehaviour
{
///
/// Prefab used to visualize effect radius of tower
///
public GameObject radiusVisualizerPrefab;
public float radiusVisualizerHeight = 0.02f;
///
/// The local euler angles
///
public Vector3 localEuler;
readonly List m_RadiusVisualizers = new List();
///
/// Sets up the radius visualizer for a tower or ghost tower
///
///
/// The tower to get the data from
///
/// Transform of ghost to parent the visualiser to.
public void SetupRadiusVisualizers(Tower tower, Transform ghost = null)
{
// Create necessary affector radius visualizations
List providers =
tower.levels[tower.currentLevel].GetRadiusVisualizers();
int length = providers.Count;
for (int i = 0; i < length; i++)
{
if (m_RadiusVisualizers.Count < i + 1)
{
m_RadiusVisualizers.Add(Instantiate(radiusVisualizerPrefab));
}
ITowerRadiusProvider provider = providers[i];
GameObject radiusVisualizer = m_RadiusVisualizers[i];
radiusVisualizer.SetActive(true);
radiusVisualizer.transform.SetParent(ghost == null ? tower.transform : ghost);
radiusVisualizer.transform.localPosition = new Vector3(0, radiusVisualizerHeight, 0);
radiusVisualizer.transform.localScale = Vector3.one * provider.effectRadius * 2.0f;
radiusVisualizer.transform.localRotation = new Quaternion {eulerAngles = localEuler};
var visualizerRenderer = radiusVisualizer.GetComponent();
if (visualizerRenderer != null)
{
visualizerRenderer.material.color = provider.effectColor;
}
}
}
///
/// Hides the radius visualizers
///
public void HideRadiusVisualizers()
{
foreach (GameObject radiusVisualizer in m_RadiusVisualizers)
{
radiusVisualizer.transform.parent = transform;
radiusVisualizer.SetActive(false);
}
}
}
}