Ejemplo n.º 1
0
 public void SetActiveBuildingType(BuildingTypeSO buildingType)
 {
     m_activeBuildingType = buildingType;
     OnActiveBuildingTypeChanged?.Invoke(this,
                                         new OnActiveBuildingTypeChangedEventArgs {
         activeBuildingType = m_activeBuildingType
     }
                                         );
 }
        public static BuildingConstruction Create(Vector3 position, BuildingTypeSO buildingType)
        {
            Transform buildingConstructionTransform = Instantiate(GameAssets.Instance.pfBuildingConstruction, position, Quaternion.identity);

            BuildingConstruction buildingConstruction = buildingConstructionTransform.GetComponent <BuildingConstruction>();

            buildingConstruction.SetBuildingType(buildingType);

            return(buildingConstruction);
        }
Ejemplo n.º 3
0
        private void Awake()
        {
            m_buildingType = GetComponent <BuildingTypeHolder>().buildingType;
            m_healthSystem = GetComponent <HealthSystem>();

            m_buildingDemolishButton = transform.Find("pfBuildingDemolishButton");
            m_buildingRepairButton   = transform.Find("pfBuildingRepairButton");

            SetDemolishButtonVisibility(false);
            SetRepairButtonVisibility(false);
        }
        private void SetBuildingType(BuildingTypeSO buildingType)
        {
            m_buildingType = buildingType;

            m_buildingTypeholder.buildingType = buildingType;
            m_constructionTimerMax            = buildingType.constructionTimerMax;
            m_constructionTimer = m_constructionTimerMax;

            m_spriteRenderer.sprite = buildingType.sprite;

            BoxCollider2D buildingBoxCollider = buildingType.prefab.GetComponent <BoxCollider2D>();

            m_boxCollider2D.offset = buildingBoxCollider.offset;
            m_boxCollider2D.size   = buildingBoxCollider.offset;
        }
Ejemplo n.º 5
0
        private void UpdateactiveBuildingTypeButton()
        {
            m_arrowButton.Find("Selected").gameObject.SetActive(false);
            foreach (BuildingTypeSO buildingType in m_buttonTransformDictionary.Keys)
            {
                Transform buttonTransform = m_buttonTransformDictionary[buildingType];

                buttonTransform.Find("Selected").gameObject.SetActive(false);
            }

            BuildingTypeSO activeBuildingType = BuildingManager.Instance.GetActiveBuildingType();

            if (activeBuildingType == null)
            {
                m_arrowButton.Find("Selected").gameObject.SetActive(true);
            }
            else
            {
                m_buttonTransformDictionary[activeBuildingType].Find("Selected").gameObject.SetActive(true);
            }
        }
        private void Awake()
        {
            Button button = transform.Find("Button").GetComponent <Button>();

            button.onClick.AddListener(() => {
                BuildingTypeSO buildingType = m_building.GetBuildingType();
                HealthSystem healthSystem   = m_building.GetHealthSystem();

                float recoupPercentage = (healthSystem != null) ?
                                         healthSystem.GetHealthAmountNormalized() * buildingType.demolishResourceRecoupPercent :
                                         buildingType.demolishResourceRecoupPercent;

                foreach (ResourceAmount resourceAmount in buildingType.constructionResourceCostArray)
                {
                    int recoupAmount = Mathf.FloorToInt(resourceAmount.amount * recoupPercentage);

                    ResourceManager.Instance.AddResource(resourceAmount.resourceType, recoupAmount);
                }

                Destroy(m_building.gameObject);
            });
        }
Ejemplo n.º 7
0
        private 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, 0f);

            bool isAreaClear = collider2DArray.Length == 0;

            if (!isAreaClear)
            {
                errorMessage = "Area is not clear!";
                return(false);
            }

            collider2DArray = Physics2D.OverlapCircleAll(position, buildingType.minConstructionRadius);

            foreach (Collider2D collider in collider2DArray)
            {
                // Colliders inside construction radius:
                BuildingTypeHolder buildingTypeHolder = collider.GetComponent <BuildingTypeHolder>();

                // Have a building and it is same type, then we can't build here:
                if (buildingTypeHolder != null)
                {
                    if (buildingTypeHolder.buildingType == buildingType)
                    {
                        errorMessage = "To close to another building of the same type!";
                        return(false);
                    }
                }
            }

            if (buildingType.hasResourceGeneratorData)
            {
                int nearbyResourceAmount = ResourceGenerator.GetNearbyResourceAmount(buildingType.resourceGeneratorData, position);

                if (nearbyResourceAmount == 0)
                {
                    errorMessage = "No nearby resources!";
                    return(false);
                }
            }

            // Check to see if there is a building within the maxConstructionRadius:
            collider2DArray = Physics2D.OverlapCircleAll(position, m_maxConstructionRadius);

            foreach (Collider2D collider in collider2DArray)
            {
                // Colliders inside construction radius:
                BuildingTypeHolder buildingTypeHolder = collider.GetComponent <BuildingTypeHolder>();

                // Have a building so it is okay to build:
                if (buildingTypeHolder != null)
                {
                    errorMessage = "";
                    return(true);
                }
            }

            // To far away from another building, can't build:
            errorMessage = "Too far from from any other building!";
            return(false);
        }