//Find ropes pluggued in objects atacched to one PluggedRope
	public List<Rope2D> GetAllIndirectRopes(bool p_includePluggedRopes = true)
	{
		List<Rope2D> v_indirectRopes = new List<Rope2D>(PluggedRopes);
		List<GameObject> v_indirectPluggedObjects = GetAllOtherAttachedObjectsInPluggedRopes();
		v_indirectPluggedObjects.AddChecking(this.gameObject);
		for(int i=0; i<v_indirectPluggedObjects.Count; i++)
		{
			GameObject v_otherObject = v_indirectPluggedObjects[i];
			if(v_otherObject != null && v_otherObject != this.gameObject)
			{
				RopesAttached v_attachedScript = v_otherObject.GetComponent<RopesAttached>();
				if(v_attachedScript != null)
				{
					v_indirectRopes.MergeList(v_attachedScript.PluggedRopes);
					v_indirectPluggedObjects.MergeList(v_attachedScript.GetAllOtherAttachedObjectsInPluggedRopes());
				}
			}
		}
		if(!p_includePluggedRopes)
		{
			foreach(Rope2D v_rope in PluggedRopes)
				v_indirectRopes.RemoveChecking(v_rope);
		}
		return v_indirectRopes;
	}
	protected virtual IEnumerator ChangeInput()
	{
		if(!_checking)
		{
			_checking = true;
			EventSystem v_eventSystem = EventSystem.current;
			if(v_eventSystem != null)
			{
				bool v_moveBack = Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift);
				GameObject v_currentSelectedGameObject = v_eventSystem.currentSelectedGameObject;
				Selectable v_currentSelectedComponent = v_currentSelectedGameObject != null? v_currentSelectedGameObject.GetComponent<Selectable>() : null;

				if(!(v_currentSelectedComponent is InputField) || !(((InputField)v_currentSelectedComponent).multiLine))
				{
					List<Selectable> v_currentSelectables = new List<Selectable>();
					for(int i=0; i<Selectable.allSelectables.Count; i++)
					{
						Selectable v_selectableComponent = Selectable.allSelectables[i];
						v_currentSelectables.RemoveChecking(v_selectableComponent);
						if(v_selectableComponent != null && v_selectableComponent.navigation.mode != Navigation.Mode.None  && FocusContainer.IsUnderFocus(v_selectableComponent.gameObject))
						{
							//Sort with SelectionUpDown Index
							int v_indexDown = v_currentSelectables.IndexOf(v_selectableComponent.navigation.selectOnDown);
							int v_indexUp = v_currentSelectables.IndexOf(v_selectableComponent.navigation.selectOnUp);
							bool v_insertingComplete = false;
							int v_indexToInsert = v_indexDown >=0 && v_indexDown < v_currentSelectables.Count? v_indexDown : (v_indexUp >=0 && v_indexUp < v_currentSelectables.Count? v_indexUp + 1 : -1);
							if(v_indexToInsert >=0 && v_indexToInsert < v_currentSelectables.Count+1)
							{
								try
								{
									v_currentSelectables.Insert(v_indexToInsert, v_selectableComponent);
									v_insertingComplete = true;
								}
								catch{}
							}
							if(!v_insertingComplete)
							{
								v_insertingComplete = true;
								v_currentSelectables.Add(v_selectableComponent);
							}
						}
					}

					if(v_currentSelectedComponent != null)
					{
						int v_index = v_currentSelectables.IndexOf(v_currentSelectedComponent);
						v_index = v_moveBack? v_index-1 : v_index+1;
						v_currentSelectedComponent = v_index >= 0 && v_index < v_currentSelectables.Count? v_currentSelectables[v_index] : null;
						v_currentSelectedGameObject = v_currentSelectedComponent != null? v_currentSelectedComponent.gameObject : null;
					}
					if(v_currentSelectedComponent == null)
					{
						v_currentSelectedComponent = v_moveBack? v_currentSelectables.GetLast() : v_currentSelectables.GetFirst();
						v_currentSelectedGameObject = v_currentSelectedComponent != null? v_currentSelectedComponent.gameObject : null;
					}

					v_eventSystem.SetSelectedGameObject(v_currentSelectedGameObject);
					if (v_currentSelectedComponent != null)
					{
						InputField v_inputfield = v_currentSelectedComponent.GetComponent<InputField>();
						if (v_inputfield != null)
							v_inputfield.OnPointerClick(new PointerEventData(v_eventSystem));
						yield return StartCoroutine(CoroutineUtil.WaitForRealSeconds(0.05f));
					}
				}
			}
			_checking = false;
		}
	}
Example #3
0
	public static void UnregisterRopeFromScene(Rope2D p_rope)
	{
		List<Rope2D> v_ropeList = new List<Rope2D>(_allRopesInScene);
		v_ropeList.RemoveChecking(p_rope);
		_allRopesInScene = v_ropeList.ToArray();
	}