[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>()); }
[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>()); }
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)); } }
[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>()); }
[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>()); }
[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>()); }
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); }
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>()); }
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>()); }
[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>()); }
[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>()); }
/// <summary> /// margin >= 16, which is the real size (dot) /// </summary> public CubeEntity(CubeHandle handle, double margin = 16) { this.handle = handle; this.margin = margin; }