Пример #1
0
    void OnDialogHandlerLifetimeEnded(GameObject sender)
    {
        DialogHandler handler    = sender.GetComponent <DialogHandler>();
        DialogSO      nextDialog = handler.dialogSO.nextDialog;


        if (!handler.dialogSO.isWithNext)        // not in the same line
        {
            foreach (var item in dialogContainer)
            {
                item.GetComponent <DialogHandler>().FadeOutTransition();
            }
            dialogContainer.Clear();
        }

        if (nextDialog != null)
        {
            //still on the same character talk
            if (nextDialog.actor == actor)
            {
                Talk(nextDialog);
            }
            else
            {
                handler.OnObjectDestroyed += OnDialogHandlerObjectDestroyed;
            }
        }
    }
Пример #2
0
    public void EndDialog()
    {
        bubble.gameObject.SetActive(false);
        optionRoot.gameObject.SetActive(false);
        foreach (Transform child in optionRoot)
        {
            Destroy(child.gameObject);
        }
        dialogText.text = "";


        if (nextDialog != null)
        {
            currentLine = 0;
            StartDialog(nextDialog);
            nextDialog = null;
        }
        else
        {
            currentLine   = 0;
            currentDialog = null;
            talkingTo     = null;
            PlayerController.instance.canMove = true;
            isTalking = false;
        }
    }
Пример #3
0
    public void StartDialog(DialogSO dialog)
    {
        PlayerController.instance.canMove = false;
        isTalking     = true;
        currentDialog = dialog;
        currentLine   = 0;

        StartCoroutine(PlayNextText());
    }
Пример #4
0
    GameObject CreateDialogText(DialogSO dialogSO)
    {
        GameObject obj = Instantiate(dialogPrefab) as GameObject;

        obj.GetComponent <DialogHandler>().SetText(dialogSO, transform);
        obj.GetComponent <DialogHandler>().OnLifetimeEnded += OnDialogHandlerLifetimeEnded;

        return(obj);
    }
Пример #5
0
    void OnDialogHandlerObjectDestroyed(GameObject sender)
    {
        DialogHandler handler    = sender.GetComponent <DialogHandler>();
        DialogSO      nextDialog = handler.dialogSO.nextDialog;

        if (nextDialog != null)
        {
            ActorSingleton.shared(nextDialog.actor.ToString()).Talk(nextDialog);
        }
    }
Пример #6
0
    public static void CreateMyAsset()
    {
        DialogSO asset = ScriptableObject.CreateInstance <DialogSO>();

        AssetDatabase.CreateAsset(asset, "Assets/NewDialogObject.asset");
        AssetDatabase.SaveAssets();

        EditorUtility.FocusProjectWindow();

        Selection.activeObject = asset;
    }
Пример #7
0
    private IEnumerator AnimateSubtitles(DialogSO dialog)
    {
        subtitleBox.gameObject.SetActive(true);

        for (int i = 0; i < dialog.subtitles.Length; ++i)
        {
            subtitleText.text = dialog.subtitles[i].line;
            yield return(new WaitForSeconds(dialog.subtitles[i].time));
        }

        subtitleBox.gameObject.SetActive(false);
    }
Пример #8
0
    public void PlayDialog(DialogSO dialogObject)
    {
        if (dialogAudioSource.isPlaying)
        {
            dialogAudioSource.Stop();
            StopCoroutine(activeSubtitleRoutine);
        }

        dialogAudioSource.clip = dialogObject.clip;
        dialogAudioSource.Play();

        activeSubtitleRoutine = StartCoroutine(AnimateSubtitles(dialogObject));
    }
Пример #9
0
    public void SetText(DialogSO dialogSO, Transform parent)
    {
        this.dialogSO              = dialogSO;
        this.textLifetime          = dialogSO.lifetime;
        this.TextMeshPro.text      = dialogSO.GetText();
        this.TextMeshPro.fontSize *= this.GetFontSize(dialogSO.fontSize);
        this.TextMeshPro.alignment = GetTextAlignment(dialogSO.alignment);
        this.extraOffset           = dialogSO.extraOffset;
        this.offset += this.GetOffset(dialogSO.alignment);
        this.parent  = parent;

        Vector3 playerHeight = new Vector3(0, 1.0f, 0);

        this.transform.position = parent.position + playerHeight;
        this.GetComponent <RectTransform>().pivot = GetPivot(dialogSO.alignment);

        FadeInTransition();
    }
Пример #10
0
 public void LoadInDialog(DialogSO dialog)
 {
     currentDialog = dialog;
     dialogPieces  = new Queue <DialogSO.DialogPiece>(currentDialog.dialogPieces);
     SetNextDialogPieceAndEnqueueItsSentences();
 }
Пример #11
0
 void SetNextDialog(DialogSO dialogSO)
 {
     nextDialog = dialogSO;
 }
Пример #12
0
 public Dialog_End(DialogSO dialog, Character character)
 {
     Dialog    = dialog;
     Character = character;
 }
Пример #13
0
 public Dialog_Start(DialogSO dialog, Character character)
 {
     Dialog    = dialog;
     Character = character;
 }
Пример #14
0
 public void Talk(DialogSO dialog)
 {
     AddLineToPreviousText();
     dialogContainer.Add(CreateDialogText(dialog));
 }
Пример #15
0
    public static void generatedialog()
    {
        string basePath = "Assets/ScriptableObject";

        DialogSO lastDialogSO         = null;
        string   lastCutSceneFolderID = "";
        int      lastLineIdx          = 0;


        if (LanguageManager.Instance == null)
        {
            Debug.LogError("Need to run in PLAY MODE"); return;
        }

        foreach (string item in LanguageManager.Instance.GetAllKeys())
        {
            string[] splittedPath = item.Split('.');
            if (splittedPath[0] != "Dialog")
            {
                continue;
            }

            if (splittedPath.Length != 7)
            {
                string assetPath = basePath + "/Others";
                CreateFolder(assetPath);
                DialogSO asset = AssetCreator.CreateObject <DialogSO>(item, assetPath);
                asset.objectID = item;
            }
            else
            {
                string dialogFolder   = splittedPath[0];
                string areaFolder     = splittedPath[1];
                string puzzleFolder   = splittedPath[2];
                string cutsceneFolder = splittedPath[3];
                string dialogLine     = splittedPath[4];
                string actor          = splittedPath[5];

                int currLineIdx = int.Parse(dialogLine);


                string assetPath = basePath + "/" + dialogFolder + "/" + areaFolder + "/" + puzzleFolder + "/" + cutsceneFolder;
                string filePath  = assetPath + "/" + item + ".asset";
                //				Dialog.A01.P02.CS01.01.Lev.01

                CreateFolder(assetPath);
                DialogSO asset = null;

                if (!File.Exists(filePath))
                {
                    asset           = AssetCreator.CreateObject <DialogSO>(item, assetPath);
                    asset.objectID  = item;
                    asset.alignment = DialogAlignmentType.TopCenter;
                    asset.SetActor(actor);
                }
                else
                {
                    asset = AssetDatabase.LoadAssetAtPath <DialogSO>(filePath);
                }



                if (cutsceneFolder.Equals(lastCutSceneFolderID))                //if in the same cutscene folder
                {
                    if (currLineIdx > lastLineIdx)
                    {
                        lastDialogSO.nextDialog = asset;
                        lastLineIdx             = currLineIdx;
                    }
                }
                else                 //reset
                {
                    lastLineIdx = 0;
                }

                lastCutSceneFolderID = cutsceneFolder;
                lastDialogSO         = asset;
                EditorUtility.SetDirty(asset);
            }
        }

        Debug.Log("GENERATE SUCCESSFUL");
    }