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.CurrentTowerLevel.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); } } } }