Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        //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";
        }
Пример #5
0
		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);
			}
		}
Пример #6
0
        //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");
        }