Esempio n. 1
0
        public IEnumerator AngleErrorNonNeighbor()
        {
            yield return(null);

            var rn  = utils.factory.NewRailNode(new Vector3(0f, 0f));
            var rnX = utils.factory.NewRailNode(new Vector3(0f, 0f));

            yield return(null);

            var p = rn.BuildStation();

            yield return(null);

            var e12 = rn.Extend(new Vector3(1f, 1f));
            var eX  = rnX.Extend(new Vector3(1f, 1f));

            yield return(null);

            var l    = new RailLine(utils.storage, utils.listener);
            var dept = new DeptTask(utils.storage, utils.listener, l, p);
            var move = new EdgeTask(utils.storage, utils.listener, l, e12, dept);

            yield return(null);

            Assert.Throws <ArgumentException>(() => move.SignedAngle(eX));
        }
Esempio n. 2
0
        public IEnumerator Angle()
        {
            yield return(null);

            var rn = utils.factory.NewRailNode(new Vector3(-1f, 0f));

            yield return(null);

            var p = rn.BuildStation();

            yield return(null);

            var e12 = rn.Extend(new Vector3(0f, 0f));

            yield return(null);

            var e23 = e12.To.Extend(new Vector3(1, Mathf.Sqrt(3)));

            yield return(null);

            var l    = new RailLine(utils.storage, utils.listener);
            var dept = new DeptTask(utils.storage, utils.listener, l, p);
            var mv12 = new EdgeTask(utils.storage, utils.listener, l, e12, dept);

            // mv12 (x軸) から e23 (1, √3) は 240° 回転した位置に見える (左向き正)
            Assert.AreEqual(-120f, mv12.SignedAngle(e23), utils.DELTA);
        }
Esempio n. 3
0
        public IEnumerator AngleZeroWithZeroLengthEdge()
        {
            yield return(null);

            var rn = utils.factory.NewRailNode(new Vector3(0f, 0f));

            yield return(null);

            var p = rn.BuildStation();

            yield return(null);

            var e12 = rn.Extend(new Vector3(0f, 0f));

            yield return(null);

            var e23 = e12.To.Extend(new Vector3(0f, 0f));

            yield return(null);

            var l    = new RailLine(utils.storage, utils.listener);
            var dept = new DeptTask(utils.storage, utils.listener, l, p);
            var mv12 = new EdgeTask(utils.storage, utils.listener, l, e12, dept);

            Assert.AreEqual(mv12.SignedAngle(e23), 0f);
        }
Esempio n. 4
0
        public IEnumerator AngleErrorWhenAllTaskZeroLength()
        {
            yield return(null);

            var rn = utils.factory.NewRailNode(new Vector3(0f, 0f));

            yield return(null);

            var p1 = rn.BuildStation();

            yield return(null);

            var e12 = rn.Extend(new Vector3(0f, 0f));

            yield return(null);

            var rn2 = e12.To;
            var p2  = rn2.BuildStation();

            yield return(null);

            var e23 = rn2.Extend(new Vector3(0f, 0f));

            yield return(null);

            var l     = new RailLine(utils.storage, utils.listener);
            var dept1 = new DeptTask(utils.storage, utils.listener, l, p1);

            dept1.InsertEdge(e12);
            var dept2 = dept1.Next.Next;

            Assert.Throws <ArgumentException>(() => dept2.SignedAngle(e23));
        }
Esempio n. 5
0
 public void StartLine(Platform p)
 {
     if (Top != null)
     {
         throw new ArgumentException("try to start already constructed line");
     }
     Top = new DeptTask(storage, listener, this, p);
 }
Esempio n. 6
0
    public override void InsertPlatform(Platform platform)
    {
        if (Edge.To != platform.On)
        {
            throw new ArgumentException("try to insert non-neighbored platform");
        }
        var obj  = Next;
        var dept = new DeptTask(storage, listener, Parent, platform, this);

        dept.Next = obj;
        obj.Prev  = dept;
    }
Esempio n. 7
0
 public StayTask(ModelListener lis, Train t, DeptTask dept, OnComplete fn) : base(t, fn)
 {
     org        = dept;
     listener   = lis;
     onComplete = () =>
     {
         // 積み残しがあるまま発車
         InQueue.ToList().ForEach(h =>
         {
             h.State   = Human.StateType.WAIT_TRAIN_ARRIVAL;
             h.OnTrain = null;
         });
         fn();
     };
     org      = dept;
     OutQueue = new LinkedList <Human>();
     InQueue  = new LinkedList <Human>();
     org.Trains.Add(train);
 }
Esempio n. 8
0
    /**
     * 現在地点で路線を分断し、指定された往復路を路線タスクに挿入します
     * Before (a) = (a) -> (b)
     * After  (a) = (a) -> (X) -> (a) -> (a) -> (b)
     * * edge : (a) -> (X)
     */
    public override void InsertEdge(RailEdge edge)
    {
        var nx      = Next;
        var inbound = CreateTask(edge);

        if (this != nx)
        {
            // 自身が発車タスクなので、復路の後の発車タスクを追加する
            var dept = new DeptTask(storage, listener, Parent, Stay, inbound);
            dept.Next = nx;
            nx.Prev   = dept;
        }
        else
        {
            // 単体dept(セルフループ)の場合は例外で発車タスクをつけない
            inbound.Next = nx;
            nx.Prev      = inbound;
        }
    }
Esempio n. 9
0
        public IEnumerator AngleErrorOnlyDeptTask()
        {
            yield return(null);

            var rn = utils.factory.NewRailNode(new Vector3(0f, 0f));

            yield return(null);

            var p = rn.BuildStation();

            yield return(null);

            var re = rn.Extend(new Vector3(1f, 1f));

            yield return(null);

            var l    = new RailLine(utils.storage, utils.listener);
            var dept = new DeptTask(utils.storage, utils.listener, l, p);

            Assert.True(dept.IsNeighbor(re));
            Assert.Throws <ArgumentException>(() => dept.SignedAngle(re));
        }
Esempio n. 10
0
        public IEnumerator FirstDeparture()
        {
            yield return(null);

            var rn = utils.factory.NewRailNode(new Vector3(1f, 2f, 3f));

            yield return(null);

            var p = rn.BuildStation();

            yield return(null);

            var l    = new RailLine(utils.storage, utils.listener);
            var dept = new DeptTask(utils.storage, utils.listener, l, p);

            Assert.AreSame(p, dept.Stay);
            Assert.AreSame(l, dept.Parent);
            Assert.AreSame(dept, dept.Prev);
            Assert.AreSame(dept, dept.Next);
            Assert.AreSame(rn, dept.Departure);
            Assert.AreSame(rn, dept.Destination);
            Assert.AreEqual(0, dept.Length);
        }
Esempio n. 11
0
 public RouterImpl(DeptTask dept)
 {
     parent = dept;
 }
Esempio n. 12
0
 private void Add(DeptTask dept)
 {
     Finders.ForEach(f => f.Node(dept));
     Reset();
 }
Esempio n. 13
0
 private void Remove(DeptTask dept)
 {
     Finders.ForEach(f => f.Unnode(dept));
     Reset();
 }
Esempio n. 14
0
 public void Ride(DeptTask dept)
 {
     rideFrom = dept;
 }