///<summary> ///Remember this ///</summary> ///<param name="mode"></param> ///<param name="status"></param> ///<param name="sourceNodeIndex"></param> ///<param name="destinationNodeIndex"></param> ///<param name="timeTaken"></param> ///<param name="timeExpected"></param> public void RecordTimeTaken( TravelModes mode, TravelStatuses status, int sourceNodeIndex, int destinationNodeIndex, float timeTaken, float timeExpected) { NavigationalMemoryKey key = new NavigationalMemoryKey( mode, sourceNodeIndex, destinationNodeIndex); MakeNewRecordIfNotAlreadyPresent(key); NavigationalMemoryRecord record = MemoryMap[key]; switch (status) { case TravelStatuses.Completed: record.CompletedCount++; record.RunningAverageTimeTaken += (timeTaken - record.RunningAverageTimeTaken)/ record.CompletedCount; record.CompletedMarginRunningAverage += (timeExpected - timeTaken - record.CompletedMarginRunningAverage)/ record.CompletedCount; break; case TravelStatuses.Failed: record.FailedCount++; float estimatedRemainingTime; Owner.CalculateTimeToReachNode( destinationNodeIndex, out estimatedRemainingTime); record.FailedMarginRunningAverage += (estimatedRemainingTime - record.FailedMarginRunningAverage)/ record.FailedCount; break; case TravelStatuses.Abandoned: Assert.Fatal(false, "NavigationalMemory,RecordTimeTaken: " + "abandoned status not implemented yet."); break; } record.CompletedPerSecond = record.CompletedCount/Time.TimeNow; record.FailedPerSecond = record.FailedCount/Time.TimeNow; LogUtil.WriteLineIfLogNavigationalMemory( "NavigationalMemory.RecordTimeTaken: " + record); DumpMemory(DumpFrequency); }
///<summary> ///constructor ///</summary> ///<param name="mode"></param> ///<param name="sourceNodeIndex"></param> ///<param name="destinationNodeIndex"></param> public NavigationalMemoryKey( TravelModes mode, int sourceNodeIndex, int destinationNodeIndex) { _mode = mode; _sourceNodeIndex = sourceNodeIndex; _destinationNodeIndex = destinationNodeIndex; }
///<summary> ///Sets a reference to a particular memory for ease of access (to avoid ///multiple lookups). ///</summary> ///<param name="mode"></param> ///<param name="sourceNodeIndex"></param> ///<param name="destinationNodeIndex"></param> public void MakeCurrent( TravelModes mode, int sourceNodeIndex, int destinationNodeIndex) { NavigationalMemoryKey key = new NavigationalMemoryKey( mode, sourceNodeIndex, destinationNodeIndex); MakeNewRecordIfNotAlreadyPresent(key); Current = MemoryMap[key]; }