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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }