Пример #1
0
        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;
        }
Пример #3
0
        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;
                            }
                        }
                    }
                }
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
        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;
                }
            }
        }