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)); }
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); }
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); }
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)); }
public void StartLine(Platform p) { if (Top != null) { throw new ArgumentException("try to start already constructed line"); } Top = new DeptTask(storage, listener, this, p); }
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; }
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); }
/** * 現在地点で路線を分断し、指定された往復路を路線タスクに挿入します * 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; } }
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)); }
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); }
public RouterImpl(DeptTask dept) { parent = dept; }
private void Add(DeptTask dept) { Finders.ForEach(f => f.Node(dept)); Reset(); }
private void Remove(DeptTask dept) { Finders.ForEach(f => f.Unnode(dept)); Reset(); }
public void Ride(DeptTask dept) { rideFrom = dept; }