private void GenerateWaypoints(TaxiPath path, out MapId[] mapIds) { mapIds = (MapId[])null; if (path == null) { return; } LinkedListNode <TransportPathTempVertex> pathStart; LinkedListNode <TransportPathTempVertex> pathStop; LinkedList <TransportPathTempVertex> tempVertices = this.GetTempVertices(path, out pathStart, out pathStop, out mapIds); this.FillDistFromStop(tempVertices, pathStop); this.FillDistToStop(tempVertices, pathStart); LinkedListNode <TransportPathTempVertex> linkedListNode1 = tempVertices.First; while (linkedListNode1 != null) { linkedListNode1 = linkedListNode1.Next; } LinkedListNode <TransportPathTempVertex> linkedListNode2 = tempVertices.First; LinkedListNode <TransportPathTempVertex> linkedListNode3 = tempVertices.Last; this.m_transportPathVertices = new LinkedList <TransportPathVertex>(); uint num = 0; for (; linkedListNode2 != null; linkedListNode2 = linkedListNode2.Next) { bool flag = linkedListNode2.Value.Vertex.MapId != linkedListNode3.Value.Vertex.MapId || linkedListNode2.Value.Vertex.Flags.HasFlag((Enum)TaxiPathNodeFlags.IsTeleport); this.m_transportPathVertices.AddLast(new TransportPathVertex() { Time = num, MapId = linkedListNode2.Value.Vertex.MapId, Position = linkedListNode2.Value.Vertex.Position, Teleport = flag }); num = ((double)linkedListNode2.Value.MoveTimeFromFirstStop >= (double)linkedListNode2.Value.MoveTimeToLastStop ? num + (uint)((double)Math.Abs(linkedListNode2.Value.MoveTimeToLastStop - linkedListNode3.Value.MoveTimeToLastStop) * 1000.0) : num + (uint)((double)Math.Abs(linkedListNode2.Value.MoveTimeFromFirstStop - linkedListNode3.Value.MoveTimeFromFirstStop) * 1000.0)) + linkedListNode2.Value.Vertex.Delay * 1000U; linkedListNode3 = linkedListNode2; } this.m_pathTime = num; }
public override void FinalizeDataHolder() { m_path = TaxiMgr.PathsById.Get((uint)TaxiPathId); TransportEntry transportEntry; TransportMgr.TransportEntries.TryGetValue(GOId, out transportEntry); if (m_path == null) { ContentMgr.OnInvalidDBData("GOEntry for MOTransport \"{0}\" has invalid Path-id (Field 0): " + TaxiPathId, this); } else { var movement = new TransportMovement(this, transportEntry == null ? 0 : transportEntry.Period); base.FinalizeDataHolder(); } }
public override void FinalizeDataHolder() { m_path = TaxiMgr.PathsById.Get(TaxiPathId); TransportEntry transportEntry; TransportMgr.TransportEntries.TryGetValue(GOId, out transportEntry); if (m_path == null) { ContentHandler.OnInvalidDBData("GOEntry for MOTransport \"{0}\" has invalid Path-id (Field 0): " + TaxiPathId, this); } else { var movement = new TransportMovement(this, transportEntry == null ? 0 : transportEntry.Period); base.FinalizeDataHolder(); } }
private LinkedList <TransportPathTempVertex> GetTempVertices(TaxiPath path, out LinkedListNode <TransportPathTempVertex> pathStart, out LinkedListNode <TransportPathTempVertex> pathStop, out MapId[] mapIds) { var mapIdsList = new List <MapId>(); pathStop = null; pathStart = null; var node = path.Nodes.First; var tempVertices = new LinkedList <TransportPathTempVertex>(); while (node != null) { if (!mapIdsList.Contains(node.Value.MapId)) { mapIdsList.Add(node.Value.MapId); } var tempVertice = new TransportPathTempVertex(0.0f, 0.0f, 0.0f, node.Value); var tempVerticeNode = tempVertices.AddLast(tempVertice); if (node.Value.IsStoppingPoint) { pathStop = tempVerticeNode; if (pathStart == null) { pathStart = tempVerticeNode; } } node = node.Next; } if (pathStart == null) { throw new Exception("TaxiPath provided does not have any stops"); } mapIds = mapIdsList.ToArray(); return(tempVertices); }
public override void Process(CmdTrigger <RealmServerCmdArgs> trigger) { if (trigger.Args.Target == null) { trigger.Reply("Nothing selected."); } else if (!trigger.Args.Target.IsOnTaxi) { trigger.Reply("{0} is not on a Taxi.", (object)trigger.Args.Target.Name); } else { TaxiPath taxiPath = trigger.Args.Target.TaxiPaths.Peek(); trigger.Reply("Flying on: " + taxiPath); trigger.Reply("Flying for {0}m {1}s / {2}m {3}s ({4}%)", (object)(trigger.Args.Target.TaxiTime / 60000), (object)(trigger.Args.Target.TaxiTime / 1000 % 60), (object)(taxiPath.PathTime / 60000U), (object)(taxiPath.PathTime / 1000U % 60U), (object)((long)(100 * trigger.Args.Target.TaxiTime) / (long)taxiPath.PathTime)); } }
private LinkedList <TransportPathTempVertex> GetTempVertices(TaxiPath path, out LinkedListNode <TransportPathTempVertex> pathStart, out LinkedListNode <TransportPathTempVertex> pathStop, out MapId[] mapIds) { List <MapId> mapIdList = new List <MapId>(); pathStop = (LinkedListNode <TransportPathTempVertex>)null; pathStart = (LinkedListNode <TransportPathTempVertex>)null; LinkedListNode <PathVertex> linkedListNode1 = path.Nodes.First; LinkedList <TransportPathTempVertex> linkedList = new LinkedList <TransportPathTempVertex>(); for (; linkedListNode1 != null; linkedListNode1 = linkedListNode1.Next) { if (!mapIdList.Contains(linkedListNode1.Value.MapId)) { mapIdList.Add(linkedListNode1.Value.MapId); } TransportPathTempVertex transportPathTempVertex = new TransportPathTempVertex(0.0f, 0.0f, 0.0f, linkedListNode1.Value); LinkedListNode <TransportPathTempVertex> linkedListNode2 = linkedList.AddLast(transportPathTempVertex); if (linkedListNode1.Value.IsStoppingPoint) { pathStop = linkedListNode2; if (pathStart == null) { pathStart = linkedListNode2; } } } if (pathStart == null) { throw new Exception("TaxiPath provided does not have any stops"); } mapIds = mapIdList.ToArray(); return(linkedList); }
internal void GenerateWaypoints(TaxiPath path) { this.GenerateWaypoints(path, out this.m_mapIds); }
public void AddPath(TaxiPath path) { Paths.Add(path); }
private void GenerateWaypoints(TaxiPath path, out MapId[] mapIds) { mapIds = null; if (path == null) return; // Pass 1. Initialize tempVertices. Find first and last stop of the path. LinkedListNode<TransportPathTempVertex> pathFirstStop, pathLastStop; LinkedList<TransportPathTempVertex> tempVertices = GetTempVertices(path, out pathFirstStop, out pathLastStop, out mapIds); // Pass 2. Fill DistFromFirstStop FillDistFromStop(tempVertices, pathLastStop); // Pass 3. Fill DistToLastStop FillDistToStop(tempVertices, pathFirstStop); // Pass 4. Calculate time var node = tempVertices.First; while (node != null) { //node.Value.MoveTimeFromFirstStop = GetTimeByDistance(node.Value.DistFromFirstStop); //node.Value.MoveTimeToLastStop = GetTimeByDistance(node.Value.DistToLastStop); node = node.Next; } // Pass 5. Calculate time between neighboring vertices //node = tempVertices.First; //var prevNode = tempVertices.Last; //while (node != null) //{ // node.Value.MoveTimeFromPrevious = node.Value.MoveTimeFromFirstStop - prevNode.Value.MoveTimeFromFirstStop; // prevNode = node; // node = node.Next; //} node = tempVertices.First; var prevNode = tempVertices.Last; m_transportPathVertices = new LinkedList<TransportPathVertex>(); uint time = 0; while (node != null) { bool teleport = (node.Value.Vertex.MapId != prevNode.Value.Vertex.MapId) || (node.Value.Vertex.Flags & TaxiPathNodeFlags.IsTeleport) != 0; var pathVertice = new TransportPathVertex { Time = time, MapId = node.Value.Vertex.MapId, Position = node.Value.Vertex.Position, Teleport = teleport }; m_transportPathVertices.AddLast(pathVertice); if (node.Value.MoveTimeFromFirstStop < node.Value.MoveTimeToLastStop) time += (uint)((Math.Abs(node.Value.MoveTimeFromFirstStop - prevNode.Value.MoveTimeFromFirstStop)) * 1000f); else time += (uint)((Math.Abs(node.Value.MoveTimeToLastStop - prevNode.Value.MoveTimeToLastStop)) * 1000f); time += node.Value.Vertex.Delay * 1000; prevNode = node; node = node.Next; } m_pathTime = time; }
internal void GenerateWaypoints(TaxiPath path) { GenerateWaypoints(path, out m_mapIds); }
private LinkedList<TransportPathTempVertex> GetTempVertices(TaxiPath path, out LinkedListNode<TransportPathTempVertex> pathStart, out LinkedListNode<TransportPathTempVertex> pathStop, out MapId[] mapIds) { var mapIdsList = new List<MapId>(); pathStop = null; pathStart = null; var node = path.Nodes.First; var tempVertices = new LinkedList<TransportPathTempVertex>(); while (node != null) { if (!mapIdsList.Contains(node.Value.MapId)) mapIdsList.Add(node.Value.MapId); var tempVertice = new TransportPathTempVertex(0.0f, 0.0f, 0.0f, node.Value); var tempVerticeNode = tempVertices.AddLast(tempVertice); if (node.Value.IsStoppingPoint) { pathStop = tempVerticeNode; if (pathStart == null) pathStart = tempVerticeNode; } node = node.Next; } if (pathStart == null) { throw new Exception("TaxiPath provided does not have any stops"); } mapIds = mapIdsList.ToArray(); return tempVertices; }
private void GenerateWaypoints(TaxiPath path, out MapId[] mapIds) { mapIds = null; if (path == null) { return; } // Pass 1. Initialize tempVertices. Find first and last stop of the path. LinkedListNode <TransportPathTempVertex> pathFirstStop, pathLastStop; LinkedList <TransportPathTempVertex> tempVertices = GetTempVertices(path, out pathFirstStop, out pathLastStop, out mapIds); // Pass 2. Fill DistFromFirstStop FillDistFromStop(tempVertices, pathLastStop); // Pass 3. Fill DistToLastStop FillDistToStop(tempVertices, pathFirstStop); // Pass 4. Calculate time var node = tempVertices.First; while (node != null) { //node.Value.MoveTimeFromFirstStop = GetTimeByDistance(node.Value.DistFromFirstStop); //node.Value.MoveTimeToLastStop = GetTimeByDistance(node.Value.DistToLastStop); node = node.Next; } // Pass 5. Calculate time between neighboring vertices //node = tempVertices.First; //var prevNode = tempVertices.Last; //while (node != null) //{ // node.Value.MoveTimeFromPrevious = node.Value.MoveTimeFromFirstStop - prevNode.Value.MoveTimeFromFirstStop; // prevNode = node; // node = node.Next; //} node = tempVertices.First; var prevNode = tempVertices.Last; m_transportPathVertices = new LinkedList <TransportPathVertex>(); uint time = 0; while (node != null) { bool teleport = (node.Value.Vertex.MapId != prevNode.Value.Vertex.MapId) || node.Value.Vertex.Flags.HasFlag(TaxiPathNodeFlags.IsTeleport); var pathVertice = new TransportPathVertex { Time = time, MapId = node.Value.Vertex.MapId, Position = node.Value.Vertex.Position, Teleport = teleport }; m_transportPathVertices.AddLast(pathVertice); if (node.Value.MoveTimeFromFirstStop < node.Value.MoveTimeToLastStop) { time += (uint)((Math.Abs(node.Value.MoveTimeFromFirstStop - prevNode.Value.MoveTimeFromFirstStop)) * 1000f); } else { time += (uint)((Math.Abs(node.Value.MoveTimeToLastStop - prevNode.Value.MoveTimeToLastStop)) * 1000f); } time += node.Value.Vertex.Delay * 1000; prevNode = node; node = node.Next; } m_pathTime = time; }