using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class UI_SuperJump : MonoBehaviour { public float updateTime = 0.1f; [SerializeField] private Material capAllow, capForbid; [SerializeField] private List _allCapTargets = new List(); public List _actualTargets = new List(); public void UpdateUI(TileInfo target) { transform.LookAt(target.tilePosition); _actualTargets = GetActiveCapTiles(GameData.playerLevel); StartCoroutine(Checker(updateTime)); } private List GetActiveCapTiles(int playerLevel) { List actualTargets = new List(); for (int i = 0; i <= playerLevel; i++) { GameObject curTargetTile = _allCapTargets[i]; curTargetTile.SetActive(true); Debug.Log(curTargetTile.name); actualTargets.Add(curTargetTile); } return actualTargets; } private IEnumerator Checker(float updateTime) { yield return new WaitForSeconds(updateTime); CheckPlayerOnTiles(GameManager.activePlayers); } private void CheckPlayerOnTiles(List activePlayers) { List actualTiles = new List(); foreach (var target in _actualTargets) { actualTiles.Add(TileManagment.GetTile(target.transform.position)); } foreach (var player in activePlayers) { if (actualTiles.Contains(player.currentTile)) { SetmaterialForObects(capForbid, _actualTargets); return; } } SetmaterialForObects(capAllow, _actualTargets); } private void SetmaterialForObects(Material mat, List tiles) { foreach (GameObject tile in tiles) { tile.GetComponent().material = mat; } } public void StopUpdateUI() { StopAllCoroutines(); if (_actualTargets == null) { return; } foreach (var obj in _actualTargets) { obj.SetActive(false); } _actualTargets = null; } }