示例#1
0
    //次のスクリプトを読み込む関数
    NOVEL_STATUS Next_Command()
    {
        if (scriptions.Count <= reading_pos)
        {
            return(NOVEL_STATUS.FINISH);
        }
        else
        {
            if (reading_pos > 0 && scriptions[reading_pos].type != COMMAND_TYPE.NORMAL_TEXT_CONTINUE)
            {
                if (now.type == COMMAND_TYPE.NORMAL_TEXT || now.type == COMMAND_TYPE.NORMAL_TEXT_CONTINUE)
                {
                    string check = "";
                    if ((now as Text_scription).character_name.Length > 0)
                    {
                        check += "[" + (now as Text_scription).character_name + "]";
                    }
                    else
                    {
                        if (characterText.text.Length > 0)
                        {
                            check += "[" + characterText.text + "]";
                        }
                        else
                        {
                            check += ' ';
                        }
                    }
                    check   += log_text;
                    log_text = "";
                    Debug.Log(check);
                    string[] temp = check.Split('\\');
                    check = temp[0];
                    for (int i = 1; i < temp.Length; i++)
                    {
                        if (i % 2 == 0)
                        {
                            check += temp[i].Substring(3);
                        }
                        else
                        {
                            string[] before_slash = temp[i].Split('/');
                            string[] contents     = before_slash[0].Split('>');
                            int      num          = contents.Length - 1;
                            check += '(' + contents[num].Substring(0, contents[num].Length - 2) + ')';
                        }
                    }

                    Debug.Log(check);
                    back_log.text += check;
                    back_log.text += "\n\n";
                }
            }

            //コマンド読み込み
            now = scriptions[reading_pos];
            reading_pos++;
            switch (now.type)
            {
            //文字速度変更コマンド
            case COMMAND_TYPE.WAIT_S:
                wait_time = (now as WAIT_scription).counter;
                return(NOVEL_STATUS.NEXT);

            // delay wait の遅延コマンド
            case COMMAND_TYPE.WAIT:
                delaytime    = (now as WAIT_scription).counter;
                delaynowtime = 0;
                skipflag     = (now as WAIT_scription).skipflag;
                return(NOVEL_STATUS.DELAY);

            //通常テキスト
            case COMMAND_TYPE.NORMAL_TEXT:
            {
                characterText.text = (now as Text_scription).character_name;
                if (characterText.text.Length > 0)
                {
                    namebox.gameObject.SetActive(true);
                }
                else
                {
                    namebox.gameObject.SetActive(false);
                }
            }
                save_data       = "";
                text.text       = "";
                character_count = 0;
                line_count      = 0;
                text.color      = chara_color;
                (now as Text_scription).counter = 0;
                (now as Text_scription).timer   = 0f;
                if ((now as Text_scription).check)
                {
                    character_voice.Play();
                }
                return(NOVEL_STATUS.WRITING);

            case COMMAND_TYPE.NORMAL_TEXT_CONTINUE:
                (now as Text_scription).counter = 0;
                (now as Text_scription).timer   = 0f;
                return(NOVEL_STATUS.WRITING);

            case COMMAND_TYPE.COLOR:
            {
                chara_color = (now as COLOR_scription).color;
            }
                return(NOVEL_STATUS.NEXT);

            //bg color系命令
            case COMMAND_TYPE.BACKGROUND_COLOR:
            {
                //Texture2DからSpriteを作成
                Sprite branksprite = Sprite.Create(
                    texture: Texture2D.whiteTexture,
                    rect: new Rect(0, 0, Texture2D.whiteTexture.width, Texture2D.whiteTexture.height),
                    pivot: new Vector2(0.5f, 0.5f)
                    );
                BackScreen.background.sprite = null;
                //BackScreen.background.sprite = branksprite;
                BackScreen.background.sprite = Resources.Load <Sprite>("bg/white");
                BackScreen.background.color  = (now as COLOR_scription).color;

                //アニメーション設定
                registered_animation = (now as COLOR_scription).animation;
                if (registered_animation == ANIMATION_TYPE.MASKRULE)
                {
                    animrulenum = Int32.Parse((now as Scription).text);
                }

                //次同時描画エフェクト(エフェクト番号0番)
                //0秒は廃止にします。(チェンジは一括にするため)
                //仕様としては、BackScreenに登録だけして、NEXTへいく
                if (registered_animation == ANIMATION_TYPE.ANIMATION_SYNCHRO)
                {
                    return(NOVEL_STATUS.NEXT);
                }


                //タイマー設定
                if (registered_animation != ANIMATION_TYPE.ANIMATION_NO_TIME)
                {
                    anim_timer = (now as COLOR_scription).timmer;
                }
                else
                {
                    //エフェクト番号1番
                    anim_timer = -1;
                }
            }
                //アニメーション準備へ
                return(NOVEL_STATUS.PRE_ANIMATION);

            //cl命令
            case COMMAND_TYPE.STAND_IMAGE_CLEAR:
            {
                //BackScreenに描画
                int place = (now as IMAGE_clear_scription).place;
                switch (place)
                {
                case 1:              //001
                    BackScreen.right.sprite = skeltonsprite;
                    BackScreen.right.name   = null;
                    break;

                case 2:              //010
                    BackScreen.center.sprite = skeltonsprite;
                    BackScreen.center.name   = null;
                    break;

                case 4:              //100
                    BackScreen.left.sprite = skeltonsprite;
                    BackScreen.left.name   = null;
                    break;

                case 7:              //111
                    BackScreen.right.sprite  = skeltonsprite;
                    BackScreen.center.sprite = skeltonsprite;
                    BackScreen.left.sprite   = skeltonsprite;
                    BackScreen.right.name    = null;
                    BackScreen.center.name   = null;
                    BackScreen.left.name     = null;
                    break;
                }



                //アニメーション設定
                registered_animation = (now as IMAGE_clear_scription).animation;
                if (registered_animation == ANIMATION_TYPE.MASKRULE)
                {
                    animrulenum = Int32.Parse((now as Scription).text);
                }

                //次同時描画エフェクト(エフェクト番号0番)
                //0秒は廃止にします。(チェンジは一括にするため)
                //仕様としては、BackScreenに登録だけして、NEXTへいく
                if (registered_animation == ANIMATION_TYPE.ANIMATION_SYNCHRO)
                {
                    return(NOVEL_STATUS.NEXT);
                }


                //タイマー設定
                if (registered_animation != ANIMATION_TYPE.ANIMATION_NO_TIME)
                {
                    anim_timer = (now as IMAGE_clear_scription).timmer;
                }
                else
                {
                    //エフェクト番号1番
                    anim_timer = -1;
                }
            }
                //アニメーション準備へ
                return(NOVEL_STATUS.PRE_ANIMATION);

            //bg命令
            case COMMAND_TYPE.BACKGROUND_IMAGE:
            {
                //裏画面に描画
                BackScreen.background.name   = (now as IMAGE_scription).imagename;
                BackScreen.background.sprite = null;
                BackScreen.background.sprite = (now as IMAGE_scription).image;
                BackScreen.background.color  = new Color(1, 1, 1, 1);

                //アニメーション設定
                registered_animation = (now as IMAGE_scription).animation;
                if (registered_animation == ANIMATION_TYPE.MASKRULE)
                {
                    animrulenum = Int32.Parse((now as Scription).text);
                }

                //次同時描画エフェクト(エフェクト番号0番)
                //0秒は廃止にします。(チェンジは一括にするため)
                //仕様としては、BackScreenに登録だけして、NEXTへいく
                if (registered_animation == ANIMATION_TYPE.ANIMATION_SYNCHRO)
                {
                    return(NOVEL_STATUS.NEXT);
                }


                //タイマー設定
                if (registered_animation != ANIMATION_TYPE.ANIMATION_NO_TIME)
                {
                    anim_timer = (now as IMAGE_scription).timmer;
                }
                else
                {
                    //エフェクト番号1番
                    anim_timer = -1;
                }
            }

                //アニメーション準備へ
                return(NOVEL_STATUS.PRE_ANIMATION);

            //ld命令
            case COMMAND_TYPE.STAND_IMAGE:
            {
                //BackScreenに描画
                //l,c,rで分岐
                switch ((now as STAND_IMAGE_scription).place)
                {
                //left  //100
                case 4:
                    BackScreen.left.sprite         = (now as IMAGE_scription).image;
                    BackScreen.left.preserveAspect = true;
                    BackScreen.left.name           = (now as IMAGE_scription).imagename;
                    break;

                //center  //010
                case 2:
                    BackScreen.center.sprite         = (now as IMAGE_scription).image;
                    BackScreen.center.preserveAspect = true;
                    BackScreen.center.name           = (now as IMAGE_scription).imagename;
                    break;

                //right   //001
                case 1:
                    BackScreen.right.sprite         = (now as IMAGE_scription).image;
                    BackScreen.right.preserveAspect = true;
                    BackScreen.right.name           = (now as IMAGE_scription).imagename;
                    break;
                }

                //アニメーション設定
                registered_animation = (now as IMAGE_scription).animation;
                if (registered_animation == ANIMATION_TYPE.MASKRULE)
                {
                    animrulenum = Int32.Parse((now as Scription).text);
                }

                //次同時描画エフェクト(エフェクト番号0番)
                //0秒は廃止にします。(チェンジは一括にするため)
                if (registered_animation == ANIMATION_TYPE.ANIMATION_SYNCHRO)
                {
                    return(NOVEL_STATUS.NEXT);
                }

                //タイマー設定
                if (registered_animation != ANIMATION_TYPE.ANIMATION_NO_TIME)
                {
                    anim_timer = (now as IMAGE_scription).timmer;
                }
                else
                {
                    //エフェクト番号1番
                    anim_timer = -1;
                }
            }
                return(NOVEL_STATUS.PRE_ANIMATION);

            //textoff命令
            case COMMAND_TYPE.TEXTOFF:
                //後でアニメーションとかする場合ここにその準備を追加。

                return(NOVEL_STATUS.UIHIDE);

            case COMMAND_TYPE.TEXTON:
                //後でアニメーションとかする場合ここにその準備を追加。

                return(NOVEL_STATUS.UISHOW);

            //bgm命令
            case COMMAND_TYPE.AUDIO_BGM:
                bgm.enabled = true;
                bgm.clip    = (now as AUDIO_scription).audio;
                bgm.loop    = true;
                bgm.Play();

                return(NOVEL_STATUS.NEXT);

            //bgmstop命令
            case COMMAND_TYPE.AUDIO_BGM_STOP:
                bgm.Stop();
                bgm.enabled = false;

                return(NOVEL_STATUS.NEXT);

            //se命令
            case COMMAND_TYPE.AUDIO_SE:
                se.enabled = true;
                se.clip    = (now as AUDIO_scription).audio;
                if (now.text == "loop")
                {
                    se.loop = true;
                }
                else
                {
                    se.loop = false;
                }
                se.Play();

                return(NOVEL_STATUS.NEXT);

            //sestop命令
            case COMMAND_TYPE.AUDIO_SE_STOP:
                se.Stop();
                se.enabled = false;

                return(NOVEL_STATUS.NEXT);

            //タグ中のボイスを再生する、またはvoice命令
            case COMMAND_TYPE.AUDIO_VOICE:
                character_voice.enabled   = true;
                character_voice.clip      = (now as AUDIO_scription).audio;
                character_voice.clip.name = (now as AUDIO_scription).audio_name;
                character_voice.loop      = false;
                //voice命令の場合
                if ((now as AUDIO_scription).text == "voice")
                {
                    character_voice.Play();
                    isvoicestop = false;
                }
                return(NOVEL_STATUS.NEXT);

            //voicestop命令
            //voice停止と共に、次の行を読むときにボイスを止めるフラグを復活させる意味がある
            case COMMAND_TYPE.AUDIO_VOICE_STOP:
                character_voice.Stop();
                character_voice.enabled = false;
                isvoicestop             = true;
                return(NOVEL_STATUS.NEXT);

            //setwindow命令
            case COMMAND_TYPE.SETWINDOW:
                //テキストボックスを取得
                GameObject textbox = mainui.transform.Find("TextBox").gameObject;
                //画像を更新
                textbox.GetComponent <Image>().sprite = Resources.Load <Sprite>((now as UI_IMAGE_scription).text);
                //位置を更新
                textbox.transform.localPosition = new Vector3((now as UI_IMAGE_scription).x, (now as UI_IMAGE_scription).y);

                //TODO:セーブデータに変更を記録する
                return(NOVEL_STATUS.NEXT);

            case COMMAND_TYPE.RETURN:
                return(NOVEL_STATUS.FINISH);
            }
        }
        Debug.Log(now.text);
        return(NOVEL_STATUS.WRITING);
    }
示例#2
0
    public void start_Novel(string novel_name, int pos)
    {
        //スクリーンショット取得
        StartCoroutine(LoadScreenshot());
        //フロントスクリーン・バックスクリーンのロード
        FrontScreen = new NovelScreen(frontscreen_inspector);
        BackScreen  = new NovelScreen(backscreen_inspector);
        FrontScreen.gobj.SetActive(true);
        BackScreen.gobj.SetActive(false);

        if (skeltonsprite == null)
        {
            skeltonsprite = Resources.Load <Sprite>("stand/skelton");
        }

        //ノベルスクリプトの取得
        string path = "";

        if (Debug.isDebugBuild)
        {
            path += "/debug/";
        }
        else
        {
            path += "/compiled/";
        }
        StreamReader sr = new StreamReader(Application.streamingAssetsPath + path + novel_name, System.Text.Encoding.GetEncoding("utf-8"));

        text.color          = chara_color = Color_Parser("000000");
        characterText.color = Color_Parser("000000");
        namebox.gameObject.SetActive(false);
        PageChangeAnim.gameObject.SetActive(false);
        PageWaitAnim.gameObject.SetActive(false);
        back_log_Stage.gameObject.SetActive(false);
        back_log.text = "";
        anim_timer    = 0;

        Debug.Log("Scripter Start Call");

        string            temp;
        Encryption_Config ec = Resources.Load <Encryption_Config>("Prefab/Encryption");

        while (sr.Peek() != -1)
        {
            temp = ec.DecryptionSystem(sr.ReadLine(), false);
            Scription test = JsonUtility.FromJson <Scription>(temp);
            switch (test.type)
            {
            case COMMAND_TYPE.AUDIO_BGM:
            case COMMAND_TYPE.AUDIO_VOICE:
            case COMMAND_TYPE.AUDIO_SE:
            {
                AUDIO_scription audio = JsonUtility.FromJson <AUDIO_scription>(temp);
                scriptions.Add(new AUDIO_scription(audio, Resources.Load <AudioClip>(audio.audio_name), audio.text, audio.type));
            }
            break;

            case COMMAND_TYPE.BACKGROUND:
            case COMMAND_TYPE.BACKGROUND_IMAGE:
            {
                IMAGE_scription image = JsonUtility.FromJson <IMAGE_scription>(temp);
                scriptions.Add(new IMAGE_scription(image, Resources.Load <Sprite>(image.imagename), image.text, image.type));
            }
            break;

            case COMMAND_TYPE.STAND_IMAGE:
            {
                STAND_IMAGE_scription image = JsonUtility.FromJson <STAND_IMAGE_scription>(temp);
                scriptions.Add(new STAND_IMAGE_scription(image.place, image, Resources.Load <Sprite>(image.imagename), image.text, image.type));
            }
            break;

            case COMMAND_TYPE.COLOR:
            case COMMAND_TYPE.BACKGROUND_COLOR:
                scriptions.Add(JsonUtility.FromJson <COLOR_scription>(temp));
                break;

            case COMMAND_TYPE.NORMAL_TEXT:
            case COMMAND_TYPE.NORMAL_TEXT_CONTINUE:
                scriptions.Add(JsonUtility.FromJson <Text_scription>(temp));
                break;

            case COMMAND_TYPE.WAIT_B:
            case COMMAND_TYPE.WAIT_S:
            case COMMAND_TYPE.WAIT_W:
            case COMMAND_TYPE.WAIT:
                scriptions.Add(JsonUtility.FromJson <WAIT_scription>(temp));
                break;

            case COMMAND_TYPE.STAND_IMAGE_CLEAR:
                scriptions.Add(JsonUtility.FromJson <IMAGE_clear_scription>(temp));
                break;

            case COMMAND_TYPE.AUDIO_BGM_STOP:
            case COMMAND_TYPE.AUDIO_SE_STOP:
            case COMMAND_TYPE.AUDIO_VOICE_STOP:
            case COMMAND_TYPE.TEXTOFF:
            case COMMAND_TYPE.TEXTON:
                scriptions.Add(JsonUtility.FromJson <Scription>(temp));
                break;

            case COMMAND_TYPE.SETWINDOW:
                scriptions.Add(JsonUtility.FromJson <UI_IMAGE_scription>(temp));
                break;

            case COMMAND_TYPE.RETURN:
                scriptions.Add(JsonUtility.FromJson <Scription>(temp));
                break;
            }
        }
        reading_pos = pos;
        now         = scriptions[reading_pos];
        state       = NOVEL_STATUS.NEXT;
    }