Beispiel #1
0
        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();
            }
        }
Beispiel #3
0
		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();
			}
		}
Beispiel #4
0
        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);
        }
Beispiel #5
0
 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));
     }
 }
Beispiel #6
0
        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);
        }
Beispiel #7
0
 internal void GenerateWaypoints(TaxiPath path)
 {
     this.GenerateWaypoints(path, out this.m_mapIds);
 }
Beispiel #8
0
 public void AddPath(TaxiPath path)
 {
     Paths.Add(path);
 }
Beispiel #9
0
		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;
		}
Beispiel #10
0
		internal void GenerateWaypoints(TaxiPath path)
		{
			GenerateWaypoints(path, out m_mapIds);
		}
Beispiel #11
0
		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;
		}
Beispiel #12
0
 internal void GenerateWaypoints(TaxiPath path)
 {
     GenerateWaypoints(path, out m_mapIds);
 }
Beispiel #13
0
        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;
        }