示例#1
0
    // Update is called once per frame
    public void Update()
    {
#if UNITY_EDITOR
        if (Application.isEditor && !Application.isPlaying)
        {
            dialogs = GetComponentsInChildren <Dialog> ();

            gameObject.name = "-" + dialogName + "- Dialog";

            int n = 0;
            foreach (Dialog myPoint in dialogs)
            {
                //PrefabUtility.UnpackPrefabInstance (myPoint.gameObject, PrefabUnpackMode.Completely, InteractionMode.AutomatedAction);
                if (!(myPoint.myTag == "" || myPoint.myTag == " "))
                {
                    myPoint.gameObject.name = "Dialog " + n + " - " + myPoint.myTag;
                }
                else
                {
                    myPoint.gameObject.name = "Dialog " + n + " - " + myPoint.text;
                }
                n++;
                myPoint.myMaster = this;
                if (n < dialogs.Length)
                {
                    myPoint.NextInChain = dialogs [n];
                }
                else
                {
                    myPoint.NextInChain = null;
                    //print ("Added listener");
                }

                int min = Mathf.Min(myPoint.bigSpriteAction.Length, myPoint.bigSpriteSlot.Length, myPoint.bigSprite.Length);
                int max = Mathf.Max(myPoint.bigSpriteAction.Length, myPoint.bigSpriteSlot.Length, myPoint.bigSprite.Length);
                if (min != max)
                {
                    int size = myPoint.bigSpriteAction.Length;
                    SetArraySize(ref myPoint.bigSpriteSlot, size);
                    SetArraySize(ref myPoint.bigSprite, size);
                }
            }

            if (lastAsset != myAsset)
            {
                lastAsset           = myAsset;
                updateAssetRealtime = false;
            }

            if (updateAssetRealtime)
            {
                UpdateMyAsset();
            }
        }
#endif
    }
示例#2
0
        void OnSelectionChange()
        {
            if (!m_Initialized)
            {
                return;
            }

            var myTreeAsset = Selection.activeObject as DialogTreeAsset;

            if (myTreeAsset != null && myTreeAsset != m_TreeAsset)
            {
                m_TreeAsset = myTreeAsset;
                m_TreeView.treeModel.SetData(GetData());
                m_TreeView.Reload();
            }
        }
示例#3
0
    public void LoadFromAsset(DialogTreeAsset asset)
    {
        updateAssetRealtime = false;
        if (asset == null)
        {
            return;
        }

        myAsset         = asset;
        dialogName      = myAsset.name;
        gameObject.name = "-" + dialogName + "- Dialog";

        Dialog[] myChild = GetComponentsInChildren <Dialog> ();
        for (int i = 0; i < myChild.Length; i++)
        {
            myChild[i].StopAllCoroutines();
            DestroyImmediate(myChild[i].gameObject);
        }
        DialogDisplayer.s.StopAllCoroutines();
        DialogDisplayer.s.Clear();

        foreach (DialogObject dia in myAsset.dialogs)
        {
            GameObject myPoint = (GameObject)Instantiate(dialogPrefab, transform.position, transform.rotation);
            myPoint.transform.parent = transform;
            Dialog myDia = myPoint.GetComponent <Dialog> ();
            myDia.myTag           = dia.tag;
            myDia.text            = dia.text;
            myDia.clearImage      = dia.clearImage;
            myDia.image           = dia.image;
            myDia.bigSpriteAction = dia.bigSpriteAction;
            myDia.bigSpriteSlot   = dia.bigSpriteSlot;
            myDia.bigSprite       = dia.bigSprite;
            myDia.delay           = dia.delay;
            myDia.breakAutoChain  = dia.breakAutoChain;
        }


        dialogs = GetComponentsInChildren <Dialog> ();


        int n = 0;

        foreach (Dialog myPoint in dialogs)
        {
            if (!(myPoint.myTag == "" || myPoint.myTag == " "))
            {
                myPoint.gameObject.name = "Dialog " + n + " - " + myPoint.myTag;
            }
            else
            {
                myPoint.gameObject.name = "Dialog " + n + " - " + myPoint.text;
            }
            n++;
            myPoint.myMaster = this;
            if (n < dialogs.Length)
            {
                myPoint.NextInChain = dialogs[n];
            }
            else
            {
                myPoint.NextInChain = null;
                //print ("Added listener");
            }
        }
    }
示例#4
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();
        DialogTree myTarget = (DialogTree)target;


        if (GUILayout.Button("Add Dialog"))
        {
            GameObject myPoint = (GameObject)Instantiate(myTarget.dialogPrefab, myTarget.transform.position, myTarget.transform.rotation);
            myPoint.transform.parent = myTarget.transform;
        }

        if (GUILayout.Button("Save Dialog Tree Asset"))
        {
            DialogTreeAsset asset           = myTarget.myAsset;
            bool            shouldCreateNew = false;
            if (asset == null)
            {
                asset           = ScriptableObject.CreateInstance <DialogTreeAsset> ();
                shouldCreateNew = true;
            }
            asset.dialogs = new DialogObject[myTarget.dialogs.Length];
            asset.name    = myTarget.dialogName;

            for (int i = 0; i < myTarget.dialogs.Length; i++)
            {
                if (myTarget.dialogs[i] != null)
                {
                    asset.dialogs[i] = new DialogObject {
                        tag             = myTarget.dialogs[i].myTag,
                        text            = myTarget.dialogs[i].text,
                        clearImage      = myTarget.dialogs[i].clearImage,
                        image           = myTarget.dialogs[i].image,
                        bigSpriteAction = myTarget.dialogs[i].bigSpriteAction,
                        bigSpriteSlot   = myTarget.dialogs[i].bigSpriteSlot,
                        bigSprite       = myTarget.dialogs[i].bigSprite,
                        delay           = myTarget.dialogs[i].delay,
                        breakAutoChain  = myTarget.dialogs[i].breakAutoChain
                    };
                }
            }

            if (shouldCreateNew)
            {
                AssetDatabase.CreateAsset(asset, "Assets/-" + myTarget.dialogName + "- Dialog.asset");
                AssetDatabase.SaveAssets();
            }

            EditorUtility.FocusProjectWindow();

            Selection.activeObject = asset;

            myTarget.myAsset = asset;
        }

        if (GUILayout.Button("Load Dialog Tree Asset"))
        {
            if (myTarget.myAsset != null)
            {
                Dialog[] myChild = myTarget.GetComponentsInChildren <Dialog> ();
                for (int i = 0; i < myChild.Length; i++)
                {
                    DestroyImmediate(myChild[i].gameObject);
                }

                foreach (DialogObject dia in myTarget.myAsset.dialogs)
                {
                    GameObject myPoint = (GameObject)Instantiate(myTarget.dialogPrefab, myTarget.transform.position, myTarget.transform.rotation);
                    myPoint.transform.parent = myTarget.transform;
                    Dialog myDia = myPoint.GetComponent <Dialog> ();
                    myDia.myTag           = dia.tag;
                    myDia.text            = dia.text;
                    myDia.clearImage      = dia.clearImage;
                    myDia.image           = dia.image;
                    myDia.bigSpriteAction = dia.bigSpriteAction;
                    myDia.bigSpriteSlot   = dia.bigSpriteSlot;
                    myDia.bigSprite       = dia.bigSprite;
                    myDia.delay           = dia.delay;
                    myDia.breakAutoChain  = dia.breakAutoChain;
                }

                //myTarget.myAsset = null;
                myTarget.dialogName          = myTarget.myAsset.name;
                myTarget.updateAssetRealtime = true;
            }
        }


        if (GUILayout.Button("Reset Dialog Tree"))
        {
            myTarget.myAsset = null;
            Dialog[] myChild = myTarget.GetComponentsInChildren <Dialog> ();
            for (int i = 0; i < myChild.Length; i++)
            {
                DestroyImmediate(myChild[i].gameObject);
            }
            myTarget.dialogName          = "New Dialog";
            myTarget.updateAssetRealtime = false;
        }
    }
    // Use this for initialization
    void Start()
    {
        bool isNotTriggeredYet, isLevelDone, isNotQuestSwapped, isQuestDone;

        isNotQuestSwapped = questDecisionReqValue == -1;

        //Check if this event was triggered before
        if (SaveMaster.s.mySave.triggeredEvents.Length <= eventId)
        {
            bool[] temp = SaveMaster.s.mySave.triggeredEvents;
            SaveMaster.s.mySave.triggeredEvents = new bool[eventId];
            temp.CopyTo(SaveMaster.s.mySave.triggeredEvents, 0);
        }
        isNotTriggeredYet = !SaveMaster.s.mySave.triggeredEvents[eventId];


        //check if the level is done
        isLevelDone = SaveMaster.isLevelDone(myLevel);


        if (isNotTriggeredYet && isLevelDone)
        {
            if (SaveMaster.s.mySave.questDecisions.Length < questDecisionLockId)
            {
                float[] temp = SaveMaster.s.mySave.questDecisions;
                SaveMaster.s.mySave.questDecisions = new float[questDecisionLockId];
                temp.CopyTo(SaveMaster.s.mySave.questDecisions, 0);
            }

            if (isNotQuestSwapped)
            {
                //check if the quest requirements are met
                isQuestDone = true;
                if (questDecisionLockId != -1 && questDecisionLockId < SaveMaster.s.mySave.questDecisions.Length)
                {
                    isQuestDone = SaveMaster.s.mySave.questDecisions[questDecisionLockId] == questDecisionReqValue;
                }

                if (isQuestDone)
                {
                    DialogTree.s.LoadFromAsset(myDialog);
                    DialogTree.s.StartDialog();
                    SaveMaster.s.mySave.triggeredEvents[eventId] = true;
                }
            }
            else
            {
                //swap based on quest decision
                DialogTreeAsset myDecisionDialog = null;
                try {
                    myDecisionDialog = questDecisionDialogSwap[(int)SaveMaster.s.mySave.questDecisions[questDecisionLockId]];
                } catch (System.Exception e) {
                    DataLogger.LogError("Can't trigger dialog after event! " + eventId, e);
                }

                if (myDecisionDialog != null)
                {
                    DialogTree.s.LoadFromAsset(myDecisionDialog);
                    DialogTree.s.StartDialog();
                    SaveMaster.s.mySave.triggeredEvents[eventId] = true;
                }
            }
        }
    }
示例#6
0
 void SetTreeAsset(DialogTreeAsset myTreeAsset)
 {
     m_TreeAsset = myTreeAsset;
     EditorUtility.SetDirty(m_TreeAsset);
     m_Initialized = false;
 }