private void ShowSkillUseAvailability(Skill skill, Vector2 space) { // Debug.Log ("ShowSkillUseAvailability - 1"); if (trackedSpaces.Contains(space)) { return; } Vector2 currentSpace = new Vector2(activeToken.posX, activeToken.posY); Vector2 checkSpace = new Vector2(space.x, space.y); BodToken checkToken = battleBoard.tokenPositions[(int)space.x, (int)space.y]; trackedSpaces.Add(checkSpace); // Debug.Log ("MaxRange: " + skill.rangeMax); if (Vector2.Distance(currentSpace, checkSpace) > skill.rangeMax) { return; } Debug.Log("Checking: " + skill.name + " at pos: " + space.x + ", " + space.y); // Check usability of Skill if (skill.usable(activeToken.bodRef, (checkToken == null) ? null : checkToken.bodRef, currentSpace, checkSpace)) { battleBoard.ShowSpaceAvailable(checkSpace, skill); } // Recursive Case: Check adjacent spaces // Up if (space.y > 0) { ShowSkillUseAvailability(skill, new Vector2(space.x, (space.y - 1))); } // Left if (space.x > 0) { ShowSkillUseAvailability(skill, new Vector2((space.x - 1), space.y)); } // Down if (space.y < (battleBoard.dimensionY - 1)) { ShowSkillUseAvailability(skill, new Vector2(space.x, (space.y + 1))); } // Right if (space.x < (battleBoard.dimensionX - 1)) { ShowSkillUseAvailability(skill, new Vector2((space.x + 1), space.y)); } }