public void _ShowTowerRangeIndicator(UnitTower tower) { _ClearRangeIndicator(); if (tower.type == _TowerType.Block || tower.type == _TowerType.Resource) { return; } _ClearRangeIndicator(); currentTower = tower; indicatorSelectedRenderer.material.SetColor("_Color", new Color(0, 1, 0, 1)); indicatorSelected.position = tower.thisT.position; indicatorSelected.rotation = tower.thisT.rotation; indicatorSelectedObj.SetActive(true); float range = tower.GetRange(); Transform indicatorT = !tower.directionalTargeting ? rangeIndicator : rangeIndicatorCone; if (indicatorT != null) { indicatorT.position = tower.thisT.position; indicatorT.localScale = new Vector3(2 * range, 1, 2 * range); indicatorT.parent = tower.thisT; if (tower.directionalTargeting) { indicatorT.localRotation = Quaternion.identity * Quaternion.Euler(0, tower.dirScanAngle, 0); } indicatorT.gameObject.SetActive(true); } }
public void _SelectTower(UnitTower tower) { _ClearSelectedTower(); selectedTower = tower; float range = tower.GetRange(); Transform indicatorT = rangeIndicator; if (indicatorT != null) { indicatorT.parent = tower.thisT; indicatorT.position = tower.thisT.position; indicatorT.localScale = new Vector3(2 * range, 1, 2 * range); indicatorT.gameObject.SetActive(true); } }
public void _SelectTower(UnitTower tower) { _ClearSelectedTower(); selectedTower=tower; float range=tower.GetRange(); Transform indicatorT=rangeIndicator; if(indicatorT!=null){ indicatorT.parent=tower.thisT; indicatorT.position=tower.thisT.position; indicatorT.localScale=new Vector3(2*range, 1, 2*range); indicatorT.gameObject.SetActive(true); } }
//called by any external component to build tower, uses buildInfo public static string BuildTower(UnitTower tower) { if (buildInfo == null) return "Select a Build Point First"; UnitTower sampleTower = GetSampleTower(tower); /***/ // check if there's energy reciving tower if (tower.electricityNeeded && !tower.electricityReciever && !tower.electricityFacility) { LayerMask maskTarget = 1 << LayerManager.LayerTower(); Collider[] cols = Physics.OverlapSphere(buildInfo.position, 1000 /*GetRange()*/, maskTarget); if (cols.Length > 0) { tower.electicitySources.Clear(); // find all electric facility for (int i = 0; i < cols.Length; i++) { // if it's not electric reciever skip if (!cols[i].gameObject.GetComponent<UnitTower>().electricityReciever) continue; //float test = cols[i].gameObject.GetComponent<UnitTower>().GetRange(); //float test2 = Vector3.Distance(cols[i].gameObject.GetComponent<UnitTower>().transform.position, buildInfo.position); // if this tower is in range of electricityReciever if (Vector3.Distance(cols[i].gameObject.GetComponent<UnitTower>().transform.position, buildInfo.position) <= cols[i].gameObject.GetComponent<UnitTower>().GetRange()) { tower.electicitySources.Add(cols[i].gameObject.GetComponent<UnitTower>()); } } if (tower.electicitySources.Count == 0) { // set electricity source for tower weapon return "There is not enough electricity"; } } else return "There is not enough electricity"; } /***/ //check if there are sufficient resource List<int> cost = sampleTower.GetCost(); int suffCost = ResourceManager.HasSufficientResource(cost); if (suffCost == -1) { ResourceManager.SpendResource(cost); GameObject towerObj = (GameObject)Instantiate(tower.gameObject, buildInfo.position, buildInfo.platform.thisT.rotation); UnitTower towerInstance = towerObj.GetComponent<UnitTower>(); towerInstance.InitTower(instance.towerCount += 1, buildInfo.platform); towerInstance.Build(); // if new electricity reciver is placed search for all towers in it's range and add itself as electricity source if (tower.electricityReciever) { LayerMask maskTarget = 1 << LayerManager.LayerTower(); Collider[] cols = Physics.OverlapSphere(buildInfo.position, tower.GetRange(), maskTarget); if (cols.Length > 0) { UnitTower tmp_tow; for (int i = 0; i < cols.Length; i++) { tmp_tow = cols[i].gameObject.GetComponent<UnitTower>(); if (tmp_tow.electricityReciever || tmp_tow.electricityFacility) continue; tmp_tow.electicitySources.Add(towerInstance); } } } //clear the build info and indicator for build manager ClearBuildPoint(); return ""; } return "Insufficient Resource"; }
public void _SelectTower(UnitTower tower){ _ClearSelectedTower(); selectedTower=tower; if(tower.type==_TowerType.Block || tower.type==_TowerType.Resource) return; float range=tower.GetRange(); Transform indicatorT=!tower.directionalTargeting ? rangeIndicator : rangeIndicatorCone; if(indicatorT!=null){ indicatorT.parent=tower.thisT; indicatorT.position=tower.thisT.position; indicatorT.localScale=new Vector3(2*range, 1, 2*range); if(tower.directionalTargeting) indicatorT.localRotation=Quaternion.identity*Quaternion.Euler(0, tower.dirScanAngle, 0); indicatorT.gameObject.SetActive(true); } }
//called by any external component to build tower, uses buildInfo public static string BuildTower(UnitTower tower) { if (buildInfo == null) { return("Select a Build Point First"); } UnitTower sampleTower = GetSampleTower(tower); /***/ // check if there's energy reciving tower if (tower.electricityNeeded && !tower.electricityReciever && !tower.electricityFacility) { LayerMask maskTarget = 1 << LayerManager.LayerTower(); Collider[] cols = Physics.OverlapSphere(buildInfo.position, 1000 /*GetRange()*/, maskTarget); if (cols.Length > 0) { tower.electicitySources.Clear(); // find all electric facility for (int i = 0; i < cols.Length; i++) { // if it's not electric reciever skip if (!cols[i].gameObject.GetComponent <UnitTower>().electricityReciever) { continue; } //float test = cols[i].gameObject.GetComponent<UnitTower>().GetRange(); //float test2 = Vector3.Distance(cols[i].gameObject.GetComponent<UnitTower>().transform.position, buildInfo.position); // if this tower is in range of electricityReciever if (Vector3.Distance(cols[i].gameObject.GetComponent <UnitTower>().transform.position, buildInfo.position) <= cols[i].gameObject.GetComponent <UnitTower>().GetRange()) { tower.electicitySources.Add(cols[i].gameObject.GetComponent <UnitTower>()); } } if (tower.electicitySources.Count == 0) { // set electricity source for tower weapon return("There is not enough electricity"); } } else { return("There is not enough electricity"); } } /***/ //check if there are sufficient resource List <int> cost = sampleTower.GetCost(); int suffCost = ResourceManager.HasSufficientResource(cost); if (suffCost == -1) { ResourceManager.SpendResource(cost); GameObject towerObj = (GameObject)Instantiate(tower.gameObject, buildInfo.position, buildInfo.platform.thisT.rotation); UnitTower towerInstance = towerObj.GetComponent <UnitTower>(); towerInstance.InitTower(instance.towerCount += 1, buildInfo.platform); towerInstance.Build(); // if new electricity reciver is placed search for all towers in it's range and add itself as electricity source if (tower.electricityReciever) { LayerMask maskTarget = 1 << LayerManager.LayerTower(); Collider[] cols = Physics.OverlapSphere(buildInfo.position, tower.GetRange(), maskTarget); if (cols.Length > 0) { UnitTower tmp_tow; for (int i = 0; i < cols.Length; i++) { tmp_tow = cols[i].gameObject.GetComponent <UnitTower>(); if (tmp_tow.electricityReciever || tmp_tow.electricityFacility) { continue; } tmp_tow.electicitySources.Add(towerInstance); } } } //clear the build info and indicator for build manager ClearBuildPoint(); return(""); } return("Insufficient Resource"); }