//次のスクリプトを読み込む関数 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); }
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; }