Example #1
0
    public IEnumerator AsyncMethodWithRelayout()
    {
        var box = AsyncBoxElement.GO(
            null,// bg画像
            () =>
        {
            Debug.Log("ルートがタップされた");
        },
            AsyncTextElement.GO("hannin is yasu! this is public problem! gooooooooooooood"), // テキスト
            AsyncImageElement.GO(null),                                                      // 画像
            AsyncButtonElement.GO(null, () => { Debug.Log("ボタンがタップされた"); })
            );

        // レイアウトに使うクラスを生成する
        var layouter = new BasicAsyncLayouter();

        // コンテンツのサイズをセットする
        var size = new Vector2(600, 50);

        // レイアウトを行う

        var done = false;

        LayouTaro.LayoutAsync <BasicMissingSpriteCache>(
            canvas.transform,
            size,
            box,
            layouter,
            () =>
        {
            LayouTaro.RelayoutWithUpdateAsync <BasicMissingSpriteCache>(
                size,
                box,
                new Dictionary <LTElementType, object> {
                { LTElementType.AsyncText, "hannin is yasu! this is public problem! gooooooooooooood" }
            },
                layouter,
                () =>
            {
                done = true;
            }
                );
        }
            );

        while (!done)
        {
            yield return(null);
        }

        var rectTrans = box.GetComponent <RectTransform>();

        rectTrans.anchoredPosition3D = Vector3.zero;
        rectTrans.localScale         = Vector3.one;

        ScreenCapture.CaptureScreenshot("./images/" + methodName);
        yield break;
    }
Example #2
0
    public IEnumerator AsyncMethodWithEmojiComplex()
    {
        var box = AsyncBoxElement.GO(
            null,// bg画像
            () =>
        {
            Debug.Log("ルートがタップされた");
        },
            AsyncTextElement.GO("hannidjkfajfaoooood"),                                                         // テキスト
            AsyncImageElement.GO(null),                                                                         // 画像
            AsyncButtonElement.GO(null, () => { Debug.Log("ボタンがタップされた"); }),
            AsyncTextElement.GO("hannin is yasu!\U0001F60A\U0001F60B this is public problem! goooooooooooooad") // 59から絵文字を1文字削ると?2文字減る。文字数カウント的にはUTF8と同じ扱いなのか。うーん

            // 事前にサイズを取得、インデックスポイントを送り込んで、取り除いて、という形にするか。
            // どうすればできる?載せ替える四角を成立させればいいか。単純に文字列コンテンツを絵文字でぶった切るか!!これは手な気がする。
            // 他になんかないかな。いけるな、
            // 文字列を最初に渡すときに、N個の絵文字が出た場合、\Uで検索して文字を取り出す。そんで、その文字がどんな画像になるか、っていうのを別途やる。そんで、
            // それぞれの文字を出力して、サイズを割り出し、文字列を再構成する。
            // 再構成した上でレイアウトすればいい。で、それぞれのレイアウト終了時に絵文字の画像を割り当てるか。
            // この方法であれば、まあ、そもそも画像を割り当てるような置換ができれば優勝できるな。

            // 割り出し方に問題が出るかな、例があると嬉しいな。ない。今はない。
            );

        // レイアウトに使うクラスを生成する
        var layouter = new BasicAsyncLayouter();

        // コンテンツのサイズをセットする
        var size = new Vector2(600, 100);

        // レイアウトを行う
        var done = false;

        LayouTaro.LayoutAsync <BasicMissingSpriteCache>(
            canvas.transform,
            size,
            box,
            layouter,
            () =>
        {
            done = true;
        }
            );

        while (!done)
        {
            yield return(null);
        }

        var rectTrans = box.gameObject.GetComponent <RectTransform>();

        rectTrans.anchoredPosition3D = Vector3.zero;
        rectTrans.localScale         = Vector3.one;

        ScreenCapture.CaptureScreenshot("./images/" + methodName);

        yield break;
    }
Example #3
0
    public IEnumerator AsyncMethodImageAndButtonWithRelayout()
    {
        // generate your own data structure with parameters for UI.
        var box = AsyncBoxElement.GO(
            null,// UI bg with image
            () =>
        {
            Debug.Log("root box element is tapped.");
        },
            AsyncImageElement.GO(null),// image.
            AsyncButtonElement.GO(null, () => { Debug.Log("button is tapped."); })
            );

        // generate the layouter which you want to use for layout.
        var layouter = new BasicAsyncLayouter();

        // set the default size of content.
        var size = new Vector2(600, 100);

        // do layout with LayouTaro. the GameObject will be returned with layouted structure.
        var done = false;

        LayouTaro.LayoutAsync <BasicMissingSpriteCache>(
            canvas.transform,
            size,
            box,
            layouter,
            () =>
        {
            LayouTaro.RelayoutWithUpdateAsync <BasicMissingSpriteCache>(
                size,
                box,
                new Dictionary <LTElementType, object> {
            },
                layouter,
                () =>
            {
                done = true;
            }
                );
        }
            );

        while (!done)
        {
            yield return(null);
        }

        var rectTrans = box.gameObject.GetComponent <RectTransform>();

        rectTrans.anchoredPosition3D = Vector3.zero;
        rectTrans.localScale         = Vector3.one;

        ScreenCapture.CaptureScreenshot("./images/" + methodName);

        yield break;
    }
Example #4
0
    public IEnumerator SpacesAndLayout3RelayoutAsync()
    {
        var box = AsyncBoxElement.GO(
            null,// bg画像
            () =>
        {
            Debug.Log("ルートがタップされた");
        },
            AsyncButtonElement.GO(null, () => { }),
            AsyncTextElement.GO(
                "ここから         " + // 全角スペースが9文字あり、かなりのサイズになる。
                "・")              // 連続するスペースと文字、・の直前で改行が発生する。
            );

        // レイアウトに使うクラスを生成する
        var layouter = new BasicAsyncLayouter();

        // コンテンツのサイズをセットする
        var size = new Vector2(600, 100);

        // レイアウトを行う

        yield return(LayouTaro.LayoutAsync <BasicMissingSpriteCache>(
                         canvas.transform,
                         size,
                         box,
                         layouter
                         ));

        var rectTrans = box.gameObject.GetComponent <RectTransform>();

        rectTrans.anchoredPosition3D = Vector3.zero;
        rectTrans.localScale         = Vector3.one;

        yield return(LayouTaro.RelayoutWithUpdateAsync <BasicMissingSpriteCache>(
                         size,
                         box,
                         new Dictionary <LTElementType, object> {
            {
                LTElementType.AsyncText, "ここから         " +   // 全角スペースが9文字あり、かなりのサイズになる。
                "・"
            }
        },
                         layouter
                         ));

        yield return(null);

        while (false)
        {
            yield return(null);
        }

        ScreenCapture.CaptureScreenshot("./images/" + methodName);
        yield break;
    }
    public IEnumerator RelayoutWithEmojiAsync()
    {
        // generate your own data structure with parameters for UI.
        var box = AsyncBoxElement.GO(
            null,// UI bg with image
            () =>
        {
            Debug.Log("root box element is tapped.");
        },
            AsyncTextElement.GO("hannin is yasu! this is public problem\U0001F60A! gooooooooooooood "), // text.
            AsyncImageElement.GO(null),                                                                 // image.
            AsyncButtonElement.GO(null, () => { Debug.Log("button is tapped."); })
            );

        // generate the layouter which you want to use for layout.
        var layouter = new BasicAsyncLayouter();

        // set the default size of content.
        var size = new Vector2(600, 100);

        // do layout with LayouTaro. the GameObject will be returned with layouted structure.

        yield return(LayouTaro.LayoutAsync <BasicMissingSpriteCache>(
                         canvas.transform,
                         size,
                         box,
                         layouter
                         ));

        var rectTrans = box.gameObject.GetComponent <RectTransform>();

        rectTrans.anchoredPosition3D = Vector3.zero;
        rectTrans.localScale         = Vector3.one;

        // update element values and re-layout with same GameObject.
        yield return(LayouTaro.RelayoutWithUpdateAsync <BasicMissingSpriteCache>(
                         size,
                         box,
                         new Dictionary <LTElementType, object> {
            { LTElementType.AsyncImage, null },
            { LTElementType.AsyncText, "relayout\U0001F60A!" }
        },
                         layouter
                         ));

        while (false)
        {
            yield return(null);
        }

        yield return(null);

        ScreenCapture.CaptureScreenshot("./images/" + methodName);

        yield break;
    }
Example #6
0
    public IEnumerator BasicPatternFrames()
    {
        var box = AsyncBoxElement.GO(
            null,// bg画像
            () =>
        {
            Debug.Log("ルートがタップされた");
        },
            AsyncTextElement.GO("hannin is yasu! this is public problem! gooooooooooooood"), // テキスト
            AsyncImageElement.GO(null),                                                      // 画像
            AsyncButtonElement.GO(null, () => { Debug.Log("ボタンがタップされた"); })
            );

        // レイアウトに使うクラスを生成する
        var layouter = new BasicAsyncLayouter();

        // コンテンツのサイズをセットする
        var size = new Vector2(600, 50);

        var before = Time.frameCount;

        // レイアウトを行う

        /*
         *  さて、どんな方法が取れるか。
         *  非同期を底の方まで連れて行きたい、という需要があるので、すべてをIEnumeratorで回すか、ああ、
         *  上の方で実行しても勝手に回ってくれる必要があるのか、うん。じゃあ独自Updateかな。
         */
        yield return(LayouTaro.LayoutAsync <BasicMissingSpriteCache>(
                         canvas.transform,
                         size,
                         box,
                         layouter
                         ));

        var rectTrans = box.GetComponent <RectTransform>();

        rectTrans.anchoredPosition3D = Vector3.zero;
        rectTrans.localScale         = Vector3.one;

        var after = Time.frameCount;

        Assert.True(before + 1 == after, "not match. before:" + before + " after:" + after);

        yield return(null);

        ScreenCapture.CaptureScreenshot("./images/" + methodName);
        yield break;
    }
Example #7
0
    public IEnumerator WithEmojiComplex2Frames()
    {
        var box = AsyncBoxElement.GO(
            null,// bg画像
            () =>
        {
            Debug.Log("ルートがタップされた");
        },
            AsyncTextElement.GO("hannidjkfajfaoooood"),                                                // テキスト
            AsyncImageElement.GO(null),                                                                // 画像
            AsyncButtonElement.GO(null, () => { Debug.Log("ボタンがタップされた"); }),
            AsyncTextElement.GO("hannin is yasu!\U0001F60A this is public problem! goooooooooooooad"), // テキスト
            AsyncImageElement.GO(null),                                                                // 画像
            AsyncImageElement.GO(null),                                                                // 画像
            AsyncTextElement.GO("hannidjkfajfaoooood2")
            );

        // レイアウトに使うクラスを生成する
        var layouter = new BasicAsyncLayouter();

        // コンテンツのサイズをセットする
        var size = new Vector2(600, 100);

        var before = Time.frameCount;

        // レイアウトを行う

        yield return(LayouTaro.LayoutAsync <BasicMissingSpriteCache>(
                         canvas.transform,
                         size,
                         box,
                         layouter
                         ));

        var rectTrans = box.gameObject.GetComponent <RectTransform>();

        rectTrans.anchoredPosition3D = Vector3.zero;
        rectTrans.localScale         = Vector3.one;

        var after = Time.frameCount;

        Assert.True(before + 1 == after, "not match. before:" + before + " after:" + after);

        yield return(null);

        ScreenCapture.CaptureScreenshot("./images/" + methodName);

        yield break;
    }
Example #8
0
    public IEnumerator IsEmojiOrNotComplexCase()
    {
        var go  = AsyncTextElement.GO("A\u029AB"); // 出ない絵文字がある -> 該当文字のパラメータがNaNになってしまう
        var box = AsyncBoxElement.GO(
            null,                                  // bg画像
            () =>
        {
            Debug.Log("ルートがタップされた");
        },
            AsyncButtonElement.GO(null, () => { }),
            go
            );

        // レイアウトに使うクラスを生成する
        var layouter = new BasicAsyncLayouter();

        // コンテンツのサイズをセットする
        var size = new Vector2(600, 100);

        // レイアウトを行う

        yield return(LayouTaro.LayoutAsync <BasicMissingSpriteCache>(
                         canvas.transform,
                         size,
                         box,
                         layouter
                         ));

        // NaNになっていないかどうかをチェックする
        var targetRectTrans = go.transform.GetChild(0).GetComponent <RectTransform>();

        Assert.True(targetRectTrans.anchoredPosition.y == 0, "not match, targetRectTrans.anchoredPosition.y:" + targetRectTrans.anchoredPosition.y);

        var rectTrans = box.gameObject.GetComponent <RectTransform>();

        rectTrans.anchoredPosition3D = Vector3.zero;
        rectTrans.localScale         = Vector3.one;

        yield return(null);

        while (false)
        {
            yield return(null);
        }

        ScreenCapture.CaptureScreenshot("./images/" + methodName);
        yield break;
    }
Example #9
0
    public IEnumerator ImageAndButtonFrames()
    {
        // generate your own data structure with parameters for UI.
        var box = AsyncBoxElement.GO(
            null,// UI bg with image
            () =>
        {
            Debug.Log("root box element is tapped.");
        },
            AsyncImageElement.GO(null),// image.
            AsyncButtonElement.GO(null, () => { Debug.Log("button is tapped."); })
            );

        // generate the layouter which you want to use for layout.
        var layouter = new BasicAsyncLayouter();

        // set the default size of content.
        var size = new Vector2(600, 100);


        var before = Time.frameCount;

        // do layout with LayouTaro. the GameObject will be returned with layouted structure.

        yield return(LayouTaro.LayoutAsync <BasicMissingSpriteCache>(
                         canvas.transform,
                         size,
                         box,
                         layouter
                         ));

        var rectTrans = box.gameObject.GetComponent <RectTransform>();

        rectTrans.anchoredPosition3D = Vector3.zero;
        rectTrans.localScale         = Vector3.one;

        var after = Time.frameCount;

        Assert.True(before + 1 == after, "not match. before:" + before + " after:" + after);


        yield return(null);

        ScreenCapture.CaptureScreenshot("./images/" + methodName);

        yield break;
    }
Example #10
0
    public IEnumerator DetectMissingEmojiAsync()
    {
        // generate your own data structure with parameters for UI.
        var box = AsyncBoxElement.GO(
            null,// UI bg with image
            () =>
        {
            Debug.Log("root box element is tapped.");
        },
            AsyncTextElement.GO("\U0001F971\U0001F60A"), // emoji and mark. mark is missing by default.
            AsyncImageElement.GO(null),                  // image.
            AsyncButtonElement.GO(null, () => { Debug.Log("button is tapped."); })
            );

        // generate the layouter which you want to use for layout.
        var layouter = new BasicAsyncLayouter();

        // set the default size of content.
        var size = new Vector2(600, 100);

        // do layout with LayouTaro. the GameObject will be returned with layouted structure.

        yield return(LayouTaro.LayoutAsync <BasicMissingSpriteCache>(
                         canvas.transform,
                         size,
                         box,
                         layouter
                         ));

        var rectTrans = box.gameObject.GetComponent <RectTransform>();

        rectTrans.anchoredPosition3D = Vector3.zero;
        rectTrans.localScale         = Vector3.one;

        yield return(null);

        ScreenCapture.CaptureScreenshot("./images/" + methodName);
        while (false)
        {
            yield return(null);
        }

        yield break;
    }
Example #11
0
    public IEnumerator IsEmojiOrNotComplexCase2()
    {
        var go  = AsyncTextElement.GO("あ^い"); // 記号がmissingとして扱われてしまう場合がある
        var box = AsyncBoxElement.GO(
            null,                             // bg画像
            () =>
        {
            Debug.Log("ルートがタップされた");
        },
            AsyncButtonElement.GO(null, () => { }),
            go
            );

        // レイアウトに使うクラスを生成する
        var layouter = new BasicAsyncLayouter();

        // コンテンツのサイズをセットする
        var size = new Vector2(600, 100);

        // レイアウトを行う

        yield return(LayouTaro.LayoutAsync <BasicMissingSpriteCache>(
                         canvas.transform,
                         size,
                         box,
                         layouter
                         ));

        var rectTrans = box.gameObject.GetComponent <RectTransform>();

        rectTrans.anchoredPosition3D = Vector3.zero;
        rectTrans.localScale         = Vector3.one;

        yield return(null);

        while (false)
        {
            yield return(null);
        }

        ScreenCapture.CaptureScreenshot("./images/" + methodName);
        yield break;
    }
Example #12
0
    public IEnumerator SpacesAndLayout2Async()
    {
        var box = AsyncBoxElement.GO(
            null,// bg画像
            () =>
        {
            Debug.Log("ルートがタップされた");
        },
            AsyncButtonElement.GO(null, () => { }),
            AsyncTextElement.GO("ここから                    ・             ここまで")// 連続するスペースと文字
            );

        // レイアウトに使うクラスを生成する
        var layouter = new BasicAsyncLayouter();

        // コンテンツのサイズをセットする
        var size = new Vector2(600, 100);

        // レイアウトを行う

        yield return(LayouTaro.LayoutAsync <BasicMissingSpriteCache>(
                         canvas.transform,
                         size,
                         box,
                         layouter
                         ));

        var rectTrans = box.gameObject.GetComponent <RectTransform>();

        rectTrans.anchoredPosition3D = Vector3.zero;
        rectTrans.localScale         = Vector3.one;

        yield return(null);

        while (false)
        {
            yield return(null);
        }

        ScreenCapture.CaptureScreenshot("./images/" + methodName);
        yield break;
    }
Example #13
0
    public IEnumerator ComplexPattern2Async()
    {
        var box = AsyncBoxElement.GO(
            null,// bg画像
            () =>
        {
            Debug.Log("ルートがタップされた");
        },
            AsyncTextElement.GO("hannidjkfajfaoooood"),                                      // テキスト
            AsyncImageElement.GO(null),                                                      // 画像
            AsyncButtonElement.GO(null, () => { Debug.Log("ボタンがタップされた"); }),
            AsyncTextElement.GO("hannin is yasu! this is public problem! gooooooooooooood"), // テキスト
            AsyncImageElement.GO(null),                                                      // 画像
            AsyncImageElement.GO(null),                                                      // 画像
            AsyncTextElement.GO("hannidjkfajfaoooood2")
            );

        // レイアウトに使うクラスを生成する
        var layouter = new BasicAsyncLayouter();

        // コンテンツのサイズをセットする
        var size = new Vector2(600, 100);

        // レイアウトを行う

        yield return(LayouTaro.LayoutAsync <BasicMissingSpriteCache>(
                         canvas.transform,
                         size,
                         box,
                         layouter
                         ));

        var rectTrans = box.gameObject.GetComponent <RectTransform>();

        rectTrans.anchoredPosition3D = Vector3.zero;
        rectTrans.localScale         = Vector3.one;

        yield return(null);

        ScreenCapture.CaptureScreenshot("./images/" + methodName);
        yield break;
    }
Example #14
0
    public IEnumerator AsyncMethodSameTime()
    {
        var done0 = false;
        var done1 = false;
        var done2 = false;

        {
            var box = AsyncBoxElement.GO(
                null,// bg画像
                () =>
            {
                Debug.Log("ルートがタップされた");
            },
                AsyncTextElement.GO("hannin is yasu! this is public problem! gooooooooooooood"), // テキスト
                AsyncImageElement.GO(null),                                                      // 画像
                AsyncButtonElement.GO(null, () => { Debug.Log("ボタンがタップされた"); }),
                AsyncTextElement.GO("h")
                );

            // レイアウトに使うクラスを生成する
            var layouter = new BasicAsyncLayouter();

            // コンテンツのサイズをセットする
            var size = new Vector2(600, 50);

            // レイアウトを行う

            LayouTaro.LayoutAsync <BasicMissingSpriteCache>(
                canvas.transform,
                size,
                box,
                layouter,
                () =>
            {
                done0 = true;

                var rectTrans = box.GetComponent <RectTransform>();
                rectTrans.anchoredPosition3D = new Vector3(0, -160 * 0, 0);
                rectTrans.localScale         = Vector3.one;
            }
                );
        }

        {
            var box = AsyncBoxElement.GO(
                null,// bg画像
                () =>
            {
                Debug.Log("ルートがタップされた");
            },
                AsyncTextElement.GO("hannin is yasu! this is public problem! gooooooooooooood"), // テキスト
                AsyncImageElement.GO(null),                                                      // 画像
                AsyncButtonElement.GO(null, () => { Debug.Log("ボタンがタップされた"); }),
                AsyncTextElement.GO("h")
                );

            // レイアウトに使うクラスを生成する
            var layouter = new BasicAsyncLayouter();

            // コンテンツのサイズをセットする
            var size = new Vector2(600, 50);

            // レイアウトを行う

            LayouTaro.LayoutAsync <BasicMissingSpriteCache>(
                canvas.transform,
                size,
                box,
                layouter,
                () =>
            {
                done1 = true;

                var rectTrans = box.GetComponent <RectTransform>();
                rectTrans.anchoredPosition3D = new Vector3(0, -160 * 1, 0);
                rectTrans.localScale         = Vector3.one;
            }
                );
        }

        {
            var box = AsyncBoxElement.GO(
                null,// bg画像
                () =>
            {
                Debug.Log("ルートがタップされた");
            },
                AsyncTextElement.GO("hannin is yasu! this is public problem! gooooooooooooood"), // テキスト
                AsyncImageElement.GO(null),                                                      // 画像
                AsyncButtonElement.GO(null, () => { Debug.Log("ボタンがタップされた"); }),
                AsyncTextElement.GO("h")
                );

            // レイアウトに使うクラスを生成する
            var layouter = new BasicAsyncLayouter();

            // コンテンツのサイズをセットする
            var size = new Vector2(600, 50);

            // レイアウトを行う

            LayouTaro.LayoutAsync <BasicMissingSpriteCache>(
                canvas.transform,
                size,
                box,
                layouter,
                () =>
            {
                done2 = true;

                var rectTrans = box.GetComponent <RectTransform>();
                rectTrans.anchoredPosition3D = new Vector3(0, -160 * 2, 0);
                rectTrans.localScale         = Vector3.one;
            }
                );
        }

        while (!(done0 && done1 && done2))
        {
            yield return(null);
        }

        while (false)
        {
            yield return(null);
        }

        ScreenCapture.CaptureScreenshot("./images/" + methodName);
        yield break;
    }
Example #15
0
    public IEnumerator DetectMissingEmojiContinuesFrames()
    {
        // generate your own data structure with parameters for UI.
        var box = AsyncBoxElement.GO(
            null,// UI bg with image
            () =>
        {
            Debug.Log("root box element is tapped.");
        },
            AsyncTextElement.GO("\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A\U0001F60A"), // mark is missing by default.
            AsyncImageElement.GO(null),                                                                                                                                                                                                                                    // image.
            AsyncButtonElement.GO(null, () => { Debug.Log("button is tapped."); })
            );

        // generate the layouter which you want to use for layout.
        var layouter = new BasicAsyncLayouter();

        // set the default size of content.
        var size = new Vector2(600, 100);


        var runner = new GameObject().AddComponent <DebugRunner>();

        var cached       = false;
        var currentCache = InternalCachePool.Get <BasicMissingSpriteCache>();

        // https://dummyimage.com/21.76744x41.39648/129393
        currentCache.LoadMissingEmojiOrMark(
            "",
            0f,
            21.76744f,
            41.39648f,
            129393,
            iEnum =>
        {
            runner.StartCoroutine(iEnum);
        },
            tex =>
        {
            cached = true;
        },
            () =>
        {
            Debug.LogError("取得失敗!");
        }
            );

        while (!cached)
        {
            yield return(null);
        }

        var before = Time.frameCount;

        yield return(LayouTaro.LayoutAsync <BasicMissingSpriteCache>(
                         canvas.transform,
                         size,
                         box,
                         layouter
                         ));

        var rectTrans = box.gameObject.GetComponent <RectTransform>();

        rectTrans.anchoredPosition3D = Vector3.zero;
        rectTrans.localScale         = Vector3.one;

        var after = Time.frameCount;

        Assert.True(before + 1 == after, "not match. before:" + before + " after:" + after);


        yield return(null);

        ScreenCapture.CaptureScreenshot("./images/" + methodName);
        while (false)
        {
            yield return(null);
        }

        yield break;
    }