//テキストデータの再作成
        bool TryUpdateTextData(string text)
        {
            if (CurrentChangeType != ChagneType.All && this.TextData != null && this.TextData.OriginalText == text)
            {
                return(false);
            }
            else
            {
                //TextData作成
                this.textData = new TextData(text);
                if (isDebugLog)
                {
                    Debug.Log(this.TextData.ParsedText.OriginalText);
                }

                //文字データを作成
                this.characterDataList = CreateCharacterDataList(this.TextData);
                //拡張的な情報を作成
                this.additional = new UguiNovelTextGeneratorAdditional(this.CharacterDataList, this);
                //フォントの文字画像を準備・設定
                InitFontCharactes(NovelText.font, this.CharacterDataList);
                //拡張的な情報の初期化
                Additional.InitAfterCharacterInfo(this);
                return(true);
            }
        }
Пример #2
0
        //頂点情報を作成
        void Refresh()
        {
            if (isRequestingCharactersInTexture)
            {
                if (isDebugLog)
                {
                    Debug.LogError("RequestingCharactersInTexture on Refresh");
                }
                return;
            }

            //TextData作成
            textData = new TextData(NovelText.text);
            if (isDebugLog)
            {
                Debug.Log(textData.ParsedText.OriginalText);
            }

            //描画範囲のサイズを設定しておく
            Rect rect = CachedRectTransform.rect;

            maxWidth  = Mathf.Abs(rect.width);
            maxHeight = Mathf.Abs(rect.height);

            //文字データを作成
            List <UguiNovelTextCharacter> characterDataList = CreateCharacterDataList();

            //拡張的な情報を作成
            additional = new UguiNovelTextGeneratorAdditional(characterDataList, this);
            //フォントの文字画像を準備・設定
            InitFontCharactes(NovelText.font, characterDataList);
            //拡張的な情報の初期化
            Additional.InitAfterCharacterInfo(this);
            //独自の改行処理を入れる
            AutoLineBreak(characterDataList);
            //行ごとの文字データを作成
            lineDataList = CreateLineList(characterDataList);
            //テキストのアンカーを適用する
            ApplyTextAnchor(lineDataList, NovelText.alignment);
            //Offsetを適用する
            ApplyOffset(lineDataList);
            //拡張的な情報の表示位置を初期化
            Additional.InitPosition(this);
            //当たり判定の情報を作成
            MakeHitGroups(characterDataList);
            isInitGraphicObjectList = false;
            IsRebuidFont            = false;
        }
Пример #3
0
        //フォントの文字画像の作成リクエスト
        void RequestCharactersInTexture(Font font, List <UguiNovelTextCharacter> characterDataList, UguiNovelTextGeneratorAdditional additional)
        {
            List <RequestCharactersInfo> infoList = MakeRequestCharactersInfoList(characterDataList, additional);

            RequestingCharactersInTexture = true;

            Font.textureRebuilt += FontTextureRebuildCallback;
            foreach (RequestCharactersInfo info in infoList)
            {
                font.RequestCharactersInTexture(info.characters, info.size, info.style);
            }
            Font.textureRebuilt          -= FontTextureRebuildCallback;
            RequestingCharactersInTexture = false;
        }
Пример #4
0
 //フォントの文字画像の設定を試行
 bool TryeSetFontCharcters(Font font, List <UguiNovelTextCharacter> characterDataList, UguiNovelTextGeneratorAdditional additional)
 {
     foreach (UguiNovelTextCharacter character in characterDataList)
     {
         if (!character.TrySetCharacterInfo(font))
         {
             return(false);
         }
     }
     return(additional.TrySetFontCharcters(font));
 }
Пример #5
0
 //フォントのテクスチャだけ再作成(つまり、文字情報のうちUV座標だけ変更)
 internal void RebuildFontTexture(Font font, List <UguiNovelTextCharacter> characterDataList, UguiNovelTextGeneratorAdditional additional)
 {
     throw new NotImplementedException();
 }
Пример #6
0
        //フォントの文字画像を準備・設定
        internal void InitFontCharactes(Font font, List <UguiNovelTextCharacter> characterDataList, UguiNovelTextGeneratorAdditional additional)
        {
            bool isComplete = false;
            //再試行回数
            int retryCount = 5;

            for (int i = 0; i < retryCount; ++i)
            {
                if (TryeSetFontCharcters(font, characterDataList, additional))
                {
                    isComplete = true;
                    break;
                }
                else
                {
                    RequestCharactersInTexture(font, characterDataList, additional);
                    if (i == retryCount - 1)
                    {
                        SetFontCharcters(font, characterDataList);
                    }
                }
            }
            if (!isComplete)
            {
                Debug.LogError("InitFontCharactes Error");
                TryeSetFontCharcters(font, characterDataList, additional);
            }
        }
Пример #7
0
        //フォントの文字画像の作成のための情報を作成
        List <RequestCharactersInfo> MakeRequestCharactersInfoList(List <UguiNovelTextCharacter> characterDataList, UguiNovelTextGeneratorAdditional additional)
        {
            List <RequestCharactersInfo> infoList = new List <RequestCharactersInfo>();

            foreach (UguiNovelTextCharacter characterData in characterDataList)
            {
                AddToRequestCharactersInfoList(characterData, infoList);
            }
            List <UguiNovelTextCharacter> additionalCharacterList = additional.MakeCharacterList();

            foreach (UguiNovelTextCharacter characterData in additionalCharacterList)
            {
                AddToRequestCharactersInfoList(characterData, infoList);
            }
            return(infoList);
        }