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