public void FindWinBrick() { winAction = FindObjectsOfType <WinAction>().Where(action => action.CompareTag("TutorialRequirement")).FirstOrDefault(); if (!winAction) { Debug.LogError("In order to be completed, this tutorial expects exactly one 'WinAction' brick tagged as 'TutorialRequirement', to which a 'TouchTrigger' brick is connected"); return; } if (!TouchTrigger) { TouchTrigger = winAction.GetTargetingTriggers().First() as TouchTrigger; } if (!TouchTrigger || triggerCopy) { return; } GameObject touchTriggerObject = TouchTrigger.gameObject; Transform touchTriggerTransform = touchTriggerObject.transform; triggerCopy = Instantiate(touchTriggerObject, touchTriggerTransform.parent); // Remove one-way connectivity references var brick = triggerCopy.GetComponent <Brick>(); foreach (var part in brick.parts) { foreach (var field in part.connectivity.connectionFields) { field.connected.Clear(); for (var i = 0; i < field.connections.Length; i++) { field.connectedTo[i].field = null; field.connectedTo[i].indexOfConnection = -1; } } } // The original TouchTrigger is referenced by the previous tutorial steps so it has a // SceneObjectGuid for it and we need to get rid duplicate GUID for the the clone. var sceneObjGuid = triggerCopy.GetComponent <SceneObjectGUIDComponent>(); if (sceneObjGuid != null) { DestroyImmediate(sceneObjGuid); } triggerCopy.transform.localPosition = touchTriggerTransform.localPosition; triggerCopy.transform.localEulerAngles = touchTriggerTransform.localEulerAngles; triggerCopy.transform.localScale = touchTriggerTransform.localScale; triggerCopy.layer = touchTriggerObject.layer; triggerCopy.tag = touchTriggerObject.tag; triggerCopy.hideFlags = touchTriggerObject.hideFlags; triggerCopy.SetActive(false); }
public void FindWinBrick() { winAction = FindObjectsOfType <WinAction>().Where(action => action.CompareTag("TutorialRequirement")).FirstOrDefault(); if (!winAction) { Debug.LogError("In order to be completed, this tutorial expects exactly one 'WinAction' brick tagged as 'TutorialRequirement', to which a 'TouchTrigger' brick is connected"); return; } TouchTrigger = winAction.GetTargetingTriggers().First() as TouchTrigger; }
public void RestoreTouchTriggerIfMissing() { if (TouchTrigger) { if (triggerCopy) { DestroyImmediate(triggerCopy); } return; } List <Trigger> triggers = winAction.GetTargetingTriggers(); if (triggers.Count > 1 && triggers[0] as PickupTrigger) { if (triggerCopy) { DestroyImmediate(triggerCopy); } return; } if (!triggerCopy) { return; } triggerCopy.SetActive(true); triggerCopy.name = triggerCopy.name.Replace("(Clone)", ""); // Re-restablish connectivity var brick = triggerCopy.GetComponent <Brick>(); foreach (var part in brick.parts) { foreach (var field in part.connectivity.connectionFields) { var query = field.QueryConnections(out _); foreach (var(connection, otherConnection) in query) { var position = connection.field.GetPosition(connection); if (ConnectionField.IsConnectionValid(connection, otherConnection, position)) { var connections = ConnectionField.Connect(connection, otherConnection, position); if (connections.Count > 0) { break; } } } } } }
public bool HasPickupTriggerBeenConnected() { if (!winAction) //needed because of AutoAdvance triggering this immediately instead of respecting the setup callbacks { FindWinBrick(); return(false); } Trigger trigger = winAction.GetTargetingTriggers().FirstOrDefault(); if (!trigger) { return(false); } return((trigger as PickupTrigger) != null); }
public void UpdateTouchTriggerCriteriaReference() { winAction = FindObjectsOfType <WinAction>().Where(action => action.CompareTag("TutorialRequirement")).FirstOrDefault(); if (!winAction) { Debug.LogError("In order to be completed, this tutorial expects exactly one 'WinAction' brick tagged as 'TutorialRequirement', to which a 'TouchTrigger' brick is connected"); return; } if (!TouchTrigger) { TouchTrigger = winAction.GetTargetingTriggers().First() as TouchTrigger; if (!TouchTrigger) { Debug.LogError("'Touch Trigger' brick not found. In order to be completed, this tutorial expects exactly one 'WinAction' brick tagged as 'TutorialRequirement', to which a 'TouchTrigger' brick is connected"); return; } } ObjectReference referenceToBrick = new ObjectReference(); referenceToBrick.sceneObjectReference = new SceneObjectReference(); referenceToBrick.sceneObjectReference.Update(TouchTrigger.gameObject); var criteria = tutorialPage.paragraphs[2].criteria; foreach (var criterion in criteria) { if (criterion.criterion as RequiredSelectionCriterion) { (criterion.criterion as RequiredSelectionCriterion).SetObjectReferences(new List <ObjectReference>() { referenceToBrick }); EditorUtility.SetDirty(tutorialPage); AssetDatabase.SaveAssets(); break; } } }