60 lines
2.2 KiB
C#
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;
|
|
}
|
|
} |