using UnityEngine; public class ObjectPlaceholder : UnitPlaceholder { public GameObject Prefab { get; set; } public override void Place() { base.Place(); Prefab.Create(transform.position, parent : LevelManager.Instance.LevelTransform); } public override bool CanBePlacedHere() { //bool isTileEmpty = !LevelManager.Instance.Has(obj => obj.Position.IsContainedIn(transform.position)); bool isHarvesterAndAllowed = IsHarvesterAndAllowed(); var objsOnPosition = LevelManager.Instance.GetAll(obj => obj.Position.IsContainedIn(transform.position)); var positionIsCollidable = objsOnPosition.Exists(obj => obj.IsCollidable); // Look if tile is already used by an ally var isTileBusy = false; Transform[] children = LevelManager.Instance.LevelTransform.GetComponentsInChildren(); foreach (Transform tr in children) { Debug.Log(tr); if (tr == null || tr.tag != "Ally") break; float distance = Vector2.Distance(transform.position, tr.position); Debug.Log("distance : " + distance); if (distance <= 0.5f) { Debug.Log("distance ahah: " + distance); isTileBusy = true; break; } } var defaultUnitCost = GlobalConfig.Instance.Current.populationCostPerUnit; return !positionIsCollidable && LevelBoundCache.Contains(transform.position) && ResourceManager.Instance.EnoughFor(Rock, Wood, Food) && (Prefab.GetComponent() || ResourceManager.Instance.EnoughPopulationFor(defaultUnitCost)) && isHarvesterAndAllowed && !isTileBusy; } private bool IsHarvesterAndAllowed() { Ally unit = Prefab.GetComponent(); //Obtiens info correctement. LevelTile pointedTile = LevelManager.Instance.Get(obj => obj.Position.IsContainedIn(transform.position)); return unit is not Harvester || (unit is Harvester && IsAllowedTile(pointedTile)); } private bool IsAllowedTile(LevelTile pointedTile) { return pointedTile is ResourceTile; } }