// 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 }
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(); } }
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"); } } }
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; } } } }
void SetTreeAsset(DialogTreeAsset myTreeAsset) { m_TreeAsset = myTreeAsset; EditorUtility.SetDirty(m_TreeAsset); m_Initialized = false; }