public static void ResolveDrawEntries(ColonistHistoryData data)
 {
     RecordReportUtility.cachedDrawEntries.Clear();
     if (ColonistHistoryMod.Settings.hideUnrecorded)
     {
         foreach (ColonistHistoryDef def in ColonistHistoryMod.Settings.ColonistHistorysOrder)
         {
             foreach (ColonistHistoryRecord record in data.records.records)
             {
                 if (def == record.Parent)
                 {
                     RecordReportUtility.cachedDrawEntries.Add(new RecordDrawEntry(record));
                 }
             }
         }
     }
     else
     {
         CompRecorder.ResolveAvailableRecords();
         foreach (ColonistHistoryDef def in ColonistHistoryMod.Settings.ColonistHistorysOrder)
         {
             foreach (RecordIdentifier recordID in CompRecorder.AvailableRecords)
             {
                 if (recordID.colonistHistoryDef == def)
                 {
                     ColonistHistoryRecord record = data.GetRecord(recordID, true);
                     RecordReportUtility.cachedDrawEntries.Add(new RecordDrawEntry(record));
                 }
             }
         }
     }
 }
 public void Add(ColonistHistoryData data, Pawn pawn = null)
 {
     this.log.Add(data);
     if (pawn != null)
     {
         this.pawnName = pawn.Name.ToStringShort;
     }
 }
        public static ColonistHistoryDataList ConvertFromLightWeight(ColonistHistoryDataList lightWeightList)
        {
            ColonistHistoryDataList dataList = new ColonistHistoryDataList(lightWeightList.pawnName);

            LightWeightSaver.tableRecords.Clear();
            foreach (ColonistHistoryData dataSrc in lightWeightList.log)
            {
                ColonistHistoryData data = new ColonistHistoryData(dataSrc, false);
                foreach (ColonistHistoryRecord recordNew in dataSrc.records.records)
                {
                    if (LightWeightSaver.tableRecords.ContainsKey(recordNew.RecordID))
                    {
                        if (!LightWeightSaver.tableRecords[recordNew.RecordID].IsEqualValue(recordNew))
                        {
                            LightWeightSaver.tableRecords[recordNew.RecordID] = recordNew;
                        }
                    }
                    else
                    {
                        LightWeightSaver.tableRecords[recordNew.RecordID] = recordNew;
                    }
                }
                foreach (ColonistHistoryDef def in DefDatabase <ColonistHistoryDef> .AllDefsListForReading)
                {
                    foreach (RecordIdentifier recordID in def.RecordIDs)
                    {
                        if (LightWeightSaver.tableRecords.ContainsKey(recordID))
                        {
                            data.records.records.Add(LightWeightSaver.tableRecords[recordID]);
                        }
                    }
                }
                dataList.Add(data);
            }

            /*
             * dataList.log.Add(new ColonistHistoryData(lightWeightList.log[0], true));
             * for (int i = 1; i < lightWeightList.log.Count; i++) {
             *  ColonistHistoryData current = lightWeightList.log[i];
             *  ColonistHistoryData previous = new ColonistHistoryData(dataList.log[i-1],true);
             *
             *  ColonistHistoryData data = new ColonistHistoryData(current, false);
             *  data.records.records = new List<ColonistHistoryRecord>(previous.records.records);
             *  foreach (ColonistHistoryRecord recordNew in current.records.records) {
             *      int index = data.records.records.FindIndex(r => r.RecordID.IsSame(recordNew.RecordID));
             *      if (index != -1) {
             *          data.records.records[index].SetValue(recordNew);
             *      } else {
             *          data.records.records.Add(recordNew);
             *      }
             *  }
             *  dataList.log.Add(data);
             * }
             */
            return(dataList);
        }
 public ColonistHistoryData(ColonistHistoryData src, bool copyRecords)
 {
     this.recordTick  = src.recordTick;
     this.forceRecord = src.forceRecord;
     if (copyRecords)
     {
         this.records = new ColonistHistoryDataRecords(src.records);
     }
     else
     {
         this.records = new ColonistHistoryDataRecords();
     }
     this.dateString = src.dateString;
 }
        public static ColonistHistoryDataList GetLightWeight(ColonistHistoryDataList dataListSrc)
        {
            LightWeightSaver.tableValues.Clear();
            LightWeightSaver.tableIsUnrecorded.Clear();

            ColonistHistoryDataList dataList = new ColonistHistoryDataList(dataListSrc.pawnName);

            foreach (ColonistHistoryData dataSrc in dataListSrc.log)
            {
                ColonistHistoryData data = new ColonistHistoryData(dataSrc, false);
                foreach (ColonistHistoryRecord recordSrc in dataSrc.records.records)
                {
                    if (RegisterTable(recordSrc))
                    {
                        data.records.records.Add(recordSrc);
                    }
                }
                dataList.Add(data);
            }
            return(dataList);
        }
        public bool Record(bool manualRecord = false)
        {
            int         currentTick = Current.Game.tickManager.TicksAbs;
            List <Pawn> colonists   = Find.ColonistBar.GetColonistsInOrder().Where(p => ColonistHistoryMod.Settings.recordOtherFactionPawn || !p.ExistExtraNoPlayerFactions()).ToList();

            if (colonists.NullOrEmpty())
            {
                return(false);
            }

            if (this.firstTile == -1)
            {
                this.firstTile = colonists.First().MapHeld.Tile;
            }

            foreach (Pawn colonist in colonists)
            {
                if (!this.colonistHistories.ContainsKey(colonist))
                {
                    this.colonistHistories[colonist] = new ColonistHistoryDataList(colonist);
                }
                ColonistHistoryData colonistHistoryData = new ColonistHistoryData(currentTick, this.firstTile, manualRecord, colonist);
                this.colonistHistories[colonist].Add(colonistHistoryData, colonist);
            }

            this.lastRecordIsManual = manualRecord;
            if (manualRecord)
            {
                this.lastManualRecordTick = currentTick;
            }
            else
            {
                this.lastAutoRecordTick = currentTick;
            }

            ResolveAvailableRecords();
            RecordGraphUtility.CurRecordGroup.ResolveGraph();

            return(true);
        }