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); }
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; }
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); }); }
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); }