void Awake() { _boxCollider2D = GetComponent <BoxCollider2D>(); _spriteRenderer = transform.Find("sprite").GetComponent <SpriteRenderer>(); _buildingTypeHolder = GetComponent <BuildingTypeHolder>(); _constructionMaterial = _spriteRenderer.material; }
bool CanSpawnBuilding(BuildingTypeSO buildingType, Vector3 position, out string errorMessage) { BoxCollider2D boxCollider2D = buildingType.prefab.GetComponent <BoxCollider2D>(); Collider2D[] collider2DArray = Physics2D.OverlapBoxAll(position + (Vector3)boxCollider2D.offset, boxCollider2D.size, 0); bool isAreaClear = collider2DArray.Length == 0; if (!isAreaClear) { errorMessage = "Area is not clear!"; return(false); } collider2DArray = Physics2D.OverlapCircleAll(position, buildingType.minConstructionRadius); foreach (Collider2D col in collider2DArray) { // Colliders inside the construction radius BuildingTypeHolder buildingTypeHolder = col.GetComponent <BuildingTypeHolder>(); if (buildingTypeHolder != null) { if (buildingTypeHolder.buildingType == buildingType) { //There's already a building of this type within the construction radius! errorMessage = "Too close ot another building of the same type!"; return(false); } } } float maxConstructionRadius = 25f; collider2DArray = Physics2D.OverlapCircleAll(position, maxConstructionRadius); foreach (Collider2D col in collider2DArray) { // Colliders inside the construction radius BuildingTypeHolder buildingTypeHolder = col.GetComponent <BuildingTypeHolder>(); if (buildingTypeHolder != null) { // It's a building! errorMessage = ""; return(true); } } errorMessage = "Too far from any other building!"; return(false); }