[UnityTest, Order(0)] // テストの実行の優先度を指定する(昇順)
        public IEnumerator a_ToTarget1()
        {
            Start();

            var handle    = new CubeHandle(test.CreateCube(150, 300, 90));
            var navigator = new CubeNavigator(handle, mode: Navigator.Mode.AVOID);

            var start_time = Time.time;
            var last_time  = start_time;

            test.init = (() =>
            {
            });

            test.update = (() =>
            {
                var now = Time.time;

                if (now - last_time > 0.05)
                {
                    navigator.Update();
                    navigator.Navi2Target(250, 250, maxSpd: 80).Exec();
                    last_time = now;
                }

                if (2.5 < Time.time - start_time)
                {
                    Debug.LogFormat("handle.pos-target.pos = {0}", handle.pos - new Vector(250, 250));
                    return(true);
                }
                return(false);
            });

            yield return(new MonoBehaviourTest <test>());
        }
Beispiel #2
0
        [UnityTest, Order(2)] // テストの実行の優先度を指定する(昇順)
        public IEnumerator e_TranslateByDist()
        {
            Start();

            var handle0 = new CubeHandle(test.CreateCube(150, 200, 90));
            var handle1 = new CubeHandle(test.CreateCube(250, 200, 90));
            var handle2 = new CubeHandle(test.CreateCube(350, 200, 90));

            var start_time = Time.time;

            test.init = (() =>
            {
                handle0.Update(); handle1.Update(); handle2.Update();
                handle0.Move(handle0.TranslateByDist(dist: 150, translate: 20));
                handle1.Move(handle1.TranslateByDist(dist: 150, translate: 60));
                handle2.Move(handle2.TranslateByDist(dist: 150, translate: 100));
            });

            test.update = (() =>
            {
                if (5 < Time.time - start_time)
                {
                    Debug.LogFormat("handle0.y-target.y = {0}", handle0.y - 350);
                    Debug.LogFormat("handle1.y-target.y = {0}", handle1.y - 350);
                    Debug.LogFormat("handle2.y-target.y = {0}", handle2.y - 350);
                    return(true);
                }
                return(false);
            });

            yield return(new MonoBehaviourTest <test>());
        }
Beispiel #3
0
        public static void ResetCubeManager(CubeManager cubeManager)
        {
            CubeNavigator.ClearGNavigators();

            cubeManager.handles.Clear();
            cubeManager.navigators.Clear();
            foreach (var cube in cubeManager.cubes)
            {
                // note 良くない
                cube.buttonCallback.ClearListener();
                cube.slopeCallback.ClearListener();
                cube.collisionCallback.ClearListener();
                cube.idCallback.ClearListener();
                cube.standardIdCallback.ClearListener();
                cube.idMissedCallback.ClearListener();
                cube.standardIdMissedCallback.ClearListener();
                cube.doubleTapCallback.ClearListener();
                cube.poseCallback.ClearListener();
                cube.targetMoveCallback.ClearListener();
                cube.shakeCallback.ClearListener();
                cube.motorSpeedCallback.ClearListener();
                var handle = new CubeHandle(cube);
                cubeManager.handles.Add(handle);
                cubeManager.navigators.Add(new CubeNavigator(handle));
            }
        }
Beispiel #4
0
        [UnityTest, Order(2)] // テストの実行の優先度を指定する(昇順)
        public IEnumerator f_RotateByRad()
        {
            Start();

            var handle0 = new CubeHandle(test.CreateCube(150, 300, 90));
            var handle1 = new CubeHandle(test.CreateCube(250, 300, 90));
            var handle2 = new CubeHandle(test.CreateCube(350, 300, 90));

            var start_time = Time.time;
            var drad       = 360 * Mathf.Deg2Rad;
            var tarRad     = Rad(drad + Deg2Rad(90));

            test.init = (() =>
            {
                handle0.Update(); handle1.Update(); handle2.Update();
                handle0.Move(handle0.RotateByRad(drad: drad, rotate: 20));
                handle1.Move(handle1.RotateByRad(drad: drad, rotate: 100));
                handle2.Move(handle2.RotateByRad(drad: drad, rotate: 200));
            });

            test.update = (() =>
            {
                if (5 < Time.time - start_time)
                {
                    Debug.LogFormat("handle0.rad-target.rad = {0}", handle0.rad - tarRad);
                    Debug.LogFormat("handle1.rad-target.rad = {0}", handle1.rad - tarRad);
                    Debug.LogFormat("handle2.rad-target.rad = {0}", handle2.rad - tarRad);
                    return(true);
                }
                return(false);
            });

            yield return(new MonoBehaviourTest <test>());
        }
Beispiel #5
0
        [UnityTest, Order(0)] // テストの実行の優先度を指定する(昇順)
        public IEnumerator a_moveRaw()
        {
            Start();

            var handle = new CubeHandle(test.CreateCube(250, 250));

            handle.MoveRaw(100, 100);

            test.update = TestUntil_Seconds(2);
            yield return(new MonoBehaviourTest <test>());
        }
Beispiel #6
0
        [UnityTest, Order(1)] // テストの実行の優先度を指定する(昇順)
        public IEnumerator b_move()
        {
            Start();

            var handle = new CubeHandle(test.CreateCube(100, 350));

            test.init = (() =>
            {
                handle.Update();
                handle.Move(80, 25, 2000);
            });

            test.update = TestUntil_Seconds(2);

            yield return(new MonoBehaviourTest <test>());
        }
Beispiel #7
0
        public CubeNavigator(CubeHandle handle, Mode mode = Mode.AVOID)
        {
            this.cube   = handle.cube; this.mode = mode;
            this.handle = handle;
            this.ego    = new CubeEntity(handle);
            this.boids  = new Boids(ego); this.avoid = new HLAvoid(ego);

            // Add borders
            AddBorder(70);

            // Auto appending of others' _other
            foreach (var o in gNavigators)
            {
                o.AddOther(this);
            }
            this.AddOther(gNavigators);
            gNavigators.Add(this);
        }
Beispiel #8
0
    bool initFlag = false;   // 初期化フラグ

    // 初期化時に呼ばれる
    public async override void Initialize()
    {
        // キューブの複数台接続
        cubeManager = new CubeManager();
        await cubeManager.MultiConnect(2);

        // 参照の取得
        this.playerHandle = cubeManager.handles[0];
        this.targetHandle = cubeManager.handles[1];
        this.playerCube   = GameObject.FindGameObjectWithTag("PlayerCube");
        this.targetCube   = GameObject.FindGameObjectWithTag("TargetCube");

        // LED色の指定
        this.playerHandle.cube.TurnLedOn(255, 0, 0, 0);
        this.targetHandle.cube.TurnLedOn(0, 0, 255, 0);

        // 初期化フラグ
        this.initFlag = true;
    }
        [UnityTest, Order(1)] // テストの実行の優先度を指定する(昇順)
        public IEnumerator g_AwayTarget()
        {
            Start();

            var handle0    = new CubeHandle(test.CreateCube(150, 150, 0));
            var handle1    = new CubeHandle(test.CreateCube(250, 350, 0));
            var navigator0 = new CubeNavigator(handle0, mode: Navigator.Mode.AVOID);
            var navigator1 = new CubeNavigator(handle1, mode: Navigator.Mode.AVOID);

            navigator0.ClearOther();

            var start_time = Time.time;
            var last_time  = start_time;

            test.init = (() =>
            {
            });

            test.update = (() =>
            {
                var now = Time.time;

                if (now - last_time > 0.05)
                {
                    navigator0.Update(); navigator1.Update();

                    navigator0.NaviAwayTarget(navigator1.handle.pos, maxSpd: 80).Exec();
                    navigator1.Navi2Target(navigator0.handle.pos, maxSpd: 40).Exec();

                    last_time = now;
                }

                if (6 < Time.time - start_time)
                {
                    return(true);
                }
                return(false);
            });

            yield return(new MonoBehaviourTest <test>());
        }
Beispiel #10
0
    public async void Connect()
    {
        // キューブの複数台接続
        await cubeManager.SingleConnect();

        if (cubeManager.handles.Count == 2)
        {
            // 参照の取得
            this.playerHandle = cubeManager.handles[0];
            this.targetHandle = cubeManager.handles[1];
            this.playerCube   = GameObject.FindGameObjectWithTag("PlayerCube");
            this.targetCube   = GameObject.FindGameObjectWithTag("TargetCube");

            // LED色の指定
            this.playerHandle.cube.TurnLedOn(255, 0, 0, 0);
            this.targetHandle.cube.TurnLedOn(0, 0, 255, 0);

            // 初期化フラグ
            this.initFlag = true;
        }
    }
        [UnityTest, Order(1)] // テストの実行の優先度を指定する(昇順)
        public IEnumerator f_SideCollision()
        {
            Start();

            var handle0    = new CubeHandle(test.CreateCube(150, 235, 10));
            var handle1    = new CubeHandle(test.CreateCube(150, 265, -10));
            var navigator0 = new CubeNavigator(handle0, mode: Navigator.Mode.AVOID);
            var navigator1 = new CubeNavigator(handle1, mode: Navigator.Mode.AVOID);

            var start_time = Time.time;
            var last_time  = start_time;

            test.init = (() =>
            {
            });

            test.update = (() =>
            {
                var now = Time.time;

                if (now - last_time > 0.05)
                {
                    navigator0.Update(); navigator1.Update();

                    navigator0.Navi2Target(400, 250, maxSpd: 80).Exec();
                    navigator1.Navi2Target(400, 250, maxSpd: 80).Exec();

                    last_time = now;
                }

                if (3 < Time.time - start_time)
                {
                    return(true);
                }
                return(false);
            });

            yield return(new MonoBehaviourTest <test>());
        }
Beispiel #12
0
        [UnityTest, Order(2)] // テストの実行の優先度を指定する(昇順)
        public IEnumerator d_Rotate2Rad()
        {
            Start();

            var handle0 = new CubeHandle(test.CreateCube(150, 300, -90));
            var handle1 = new CubeHandle(test.CreateCube(250, 300, -90));
            var handle2 = new CubeHandle(test.CreateCube(350, 300, -90));

            var start_time = Time.time;
            var last_time  = start_time;

            test.update = (() =>
            {
                var dt = Time.deltaTime;
                var now = Time.time;

                var tarRad = Deg2Rad(89);

                if (now - last_time > 0.05)
                {
                    handle0.Update(); handle1.Update(); handle2.Update();
                    handle0.Move(handle0.Rotate2Rad(tarRad, rotateTime: 200));
                    handle1.Move(handle1.Rotate2Rad(tarRad, rotateTime: 400));
                    handle2.Move(handle2.Rotate2Rad(tarRad, rotateTime: 800));
                    last_time = now;
                }
                if (3 < Time.time - start_time)
                {
                    Debug.LogFormat("handle0.rad-target.rad = {0}", handle0.rad - tarRad);
                    Debug.LogFormat("handle1.rad-target.rad = {0}", handle1.rad - tarRad);
                    Debug.LogFormat("handle2.rad-target.rad = {0}", handle2.rad - tarRad);
                    return(true);
                }
                return(false);
            });

            yield return(new MonoBehaviourTest <test>());
        }
        [UnityTest, Order(1)] // テストの実行の優先度を指定する(昇順)
        public IEnumerator c_Intersect1v1Longitudinal()
        {
            Start();

            var handle0    = new CubeHandle(test.CreateCube(100, 100, 45));
            var handle1    = new CubeHandle(test.CreateCube(400, 400, -135));
            var navigator0 = new CubeNavigator(handle0, mode: Navigator.Mode.AVOID);
            var navigator1 = new CubeNavigator(handle1, mode: Navigator.Mode.AVOID);

            var start_time = Time.time;
            var last_time  = start_time;

            test.init = (() =>
            {
            });

            test.update = (() =>
            {
                var now = Time.time;

                if (now - last_time > 0.05)
                {
                    navigator0.Update(); navigator1.Update();
                    navigator0.Navi2Target(400, 400, maxSpd: 80).Exec();
                    navigator1.Navi2Target(100, 100, maxSpd: 80).Exec();
                    last_time = now;
                }

                if (4 < Time.time - start_time)
                {
                    return(true);
                }
                return(false);
            });

            yield return(new MonoBehaviourTest <test>());
        }
        [UnityTest, Order(0)] // テストの実行の優先度を指定する(昇順)
        public IEnumerator b_BorderSingleOut()
        {
            Start();

            var handle    = new CubeHandle(test.CreateCube(150, 420, 135));
            var navigator = new CubeNavigator(handle, mode: Navigator.Mode.AVOID);

            var start_time = Time.time;
            var last_time  = start_time;

            test.init = (() =>
            {
            });

            test.update = (() =>
            {
                var now = Time.time;

                if (now - last_time > 0.05)
                {
                    navigator.Update();

                    var res = navigator.Navi2Target(400, 500, 80).Exec();
                    last_time = now;
                }

                if (3 < Time.time - start_time)
                {
                    Debug.LogFormat("handle.pos-target.pos = {0}", handle.pos - new Vector(400, 500));
                    return(true);
                }
                return(false);
            });

            yield return(new MonoBehaviourTest <test>());
        }
Beispiel #15
0
        [UnityTest, Order(2)] // テストの実行の優先度を指定する(昇順)
        public IEnumerator c_Move2Target_Back()
        {
            Start();

            var handle0 = new CubeHandle(test.CreateCube(150, 330, -90));
            var handle1 = new CubeHandle(test.CreateCube(250, 310, -90));
            var handle2 = new CubeHandle(test.CreateCube(350, 290, -90));

            var start_time = Time.time;
            var last_time  = start_time;

            test.update = (() =>
            {
                var dt = Time.deltaTime;
                var now = Time.time;

                if (now - last_time > 0.05)
                {
                    handle0.Update(); handle1.Update(); handle2.Update();
                    handle0.Move(handle0.Move2Target(150, 350, maxSpd: 100));
                    handle1.Move(handle1.Move2Target(250, 350, maxSpd: 100));
                    handle2.Move(handle2.Move2Target(350, 350, maxSpd: 100));
                    last_time = now;
                }
                if (4 < Time.time - start_time)
                {
                    Debug.LogFormat("handle0.pos-target.pos = {0}", handle0.pos - new Vector(150, 350));
                    Debug.LogFormat("handle1.pos-target.pos = {0}", handle1.pos - new Vector(250, 350));
                    Debug.LogFormat("handle2.pos-target.pos = {0}", handle2.pos - new Vector(350, 350));
                    return(true);
                }
                return(false);
            });

            yield return(new MonoBehaviourTest <test>());
        }
Beispiel #16
0
 /// <summary>
 /// margin >= 16, which is the real size (dot)
 /// </summary>
 public CubeEntity(CubeHandle handle, double margin = 16)
 {
     this.handle = handle; this.margin = margin;
 }