void Awake()
 {
     _boxCollider2D        = GetComponent <BoxCollider2D>();
     _spriteRenderer       = transform.Find("sprite").GetComponent <SpriteRenderer>();
     _buildingTypeHolder   = GetComponent <BuildingTypeHolder>();
     _constructionMaterial = _spriteRenderer.material;
 }
Пример #2
0
        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);
        }