60 lines
2.2 KiB
C#

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<ILevelObject>(obj => obj.Position.IsContainedIn(transform.position));
bool isHarvesterAndAllowed = IsHarvesterAndAllowed();
var objsOnPosition = LevelManager.Instance.GetAll<ILevelObject>(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<Transform>();
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<Building>()
|| ResourceManager.Instance.EnoughPopulationFor(defaultUnitCost))
&& isHarvesterAndAllowed
&& !isTileBusy;
}
private bool IsHarvesterAndAllowed()
{
Ally unit = Prefab.GetComponent<Ally>();
//Obtiens info correctement.
LevelTile pointedTile = LevelManager.Instance.Get<LevelTile>(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;
}
}