public void Init(){
			instance=this;
			
			gridSize=Mathf.Max(0.25f, gridSize);
			_gridSize=gridSize;
			
			buildInfo=null;
			
			InitTower();
			InitPlatform();
		}
		void Awake(){
			instance = (BuildManager)target;
			
			GetTower();
			
			int enumLength = Enum.GetValues(typeof(BuildManager._CursorIndicatorMode)).Length;
			cursorIndModeLabel=new string[enumLength];
			cursorIndModeTooltip=new string[enumLength];
			for(int i=0; i<enumLength; i++){
				cursorIndModeLabel[i]=((BuildManager._CursorIndicatorMode)i).ToString();
				if((BuildManager._CursorIndicatorMode)i==BuildManager._CursorIndicatorMode.All) 
					cursorIndModeTooltip[i]="Always show the tile currently being hovered over by the cursor";
				if((BuildManager._CursorIndicatorMode)i==BuildManager._CursorIndicatorMode.ValidOnly) 
					cursorIndModeTooltip[i]="Only show the tile currently being hovered over by the cursor if it's available to be built on";
				if((BuildManager._CursorIndicatorMode)i==BuildManager._CursorIndicatorMode.None) 
					cursorIndModeTooltip[i]="Never show the tile currently being hovered over by the cursor";
			}
			
			EditorUtility.SetDirty(instance);
		}
Example #3
0
        IEnumerator SelectAbilityTargetRoutine(Ability ability, int pointerID = -1)
        {
            yield return(null);

            Vector3 cursorPos  = Vector3.zero;
            Unit    targetUnit = null;

            LayerMask mask = maskAOE;

            if (ability.singleUnitTargeting)
            {
                if (ability.targetType == Ability._TargetType.Hybrid)
                {
                    mask |= 1 << TDTK.GetLayerTower() | 1 << TDTK.GetLayerCreep();
                }
                else if (ability.targetType == Ability._TargetType.Friendly)
                {
                    mask |= 1 << TDTK.GetLayerTower();
                }
                else if (ability.targetType == Ability._TargetType.Hostile)
                {
                    mask |= 1 << TDTK.GetLayerCreep();
                }
            }

            Transform indicator = ability.indicator;

            if (indicator == null)
            {
                indicator = defaultIndicator;
                float scale = ability.singleUnitTargeting ? BuildManager.GetGridSize() : ability.GetAOERadius() * 2;
                indicator.localScale = new Vector3(scale, scale, scale);
            }

            //TDTK.OnGameMessage("SelectAbilityTargetRoutine   "+pointerID);

            isSelectingTarget = true;
            TDTK.OnAbilityTargetSelectModeE(true);

            if (pointerID >= 0)
            {
                while (true)
                {
                    if (TDTK.IsTouchStarting(pointerID))
                    {
                        break;
                    }
                    yield return(null);
                }
            }

            bool cursorOnUI = true;

            while (isSelectingTarget)
            {
                if (Input.GetKeyDown(KeyCode.Escape))
                {
                    break;
                }

                bool invalidCursor = false;
                bool invalidTarget = false;

                if (pointerID < 0)
                {
                    cursorPos = Input.mousePosition;
                }
                else
                {
                    cursorPos = TDTK.GetTouchPosition(pointerID);
                }

                if (cursorPos.magnitude < 0)
                {
                    invalidCursor = true;
                }


                if (!invalidCursor && !cursorOnUI)
                {
                    Ray        ray = Camera.main.ScreenPointToRay(cursorPos);
                    RaycastHit hit;
                    if (Physics.Raycast(ray, out hit, Mathf.Infinity, mask))
                    {
                        indicator.position = hit.point;

                        targetUnit = null;

                        if (ability.singleUnitTargeting)
                        {
                            targetUnit = hit.transform.GetComponent <Unit>();
                            if (targetUnit != null)
                            {
                                indicator.position = targetUnit.thisT.position;
                            }
                            else
                            {
                                invalidTarget = true;
                            }
                        }
                    }
                }

                indicator.gameObject.SetActive(!invalidCursor);

                if (pointerID == -1)
                {
                    if (Input.GetMouseButtonDown(0))
                    {
                        if (cursorOnUI)
                        {
                            break;
                        }
                        if (!invalidTarget)
                        {
                            ActivateAbility(ability, indicator.position, targetUnit);
                        }
                        else
                        {
                            TDTK.OnGameMessage("Invalid target for ability");
                        }
                        break;
                    }
                    if (Input.GetMouseButtonDown(1))
                    {
                        break;
                    }
                }
                else
                {
                    if (TDTK.IsTouchEnding(pointerID))
                    {
                        //TDTK.OnGameMessage("SelectAbilityTargetRoutine   "+pointerID+"   "+UI.IsCursorOnUI(pointerID));
                        if (cursorOnUI)
                        {
                            break;
                        }
                        if (!invalidTarget)
                        {
                            ActivateAbility(ability, indicator.position, targetUnit);
                        }
                        else
                        {
                            TDTK.OnGameMessage("Invalid target for ability");
                        }
                        break;
                    }
                }

                //check in previous frame cause IsCursorOnUI wont return true if the touch is ending
                cursorOnUI = UI.IsCursorOnUI(pointerID);

                yield return(null);
            }

            yield return(null);

            indicator.gameObject.SetActive(false);

            isSelectingTarget = false;
            TDTK.OnAbilityTargetSelectModeE(false);
        }