static bool Prefix(ref HistoryAutoRecorder __instance) { if (Find.TickManager.TicksGame % __instance.def.recordTicksFrequency > RefcellRespeedConfig.currentTimeMultiplier - 1 && __instance.records.Any <float>()) { return(false); } __instance.records.Add(__instance.def.Worker.PullRecord()); return(false); }
static void Postfix(HistoryAutoRecorder __instance) { if (Scribe.mode == LoadSaveMode.PostLoadInit) { //StringBuilder sb = new StringBuilder("!!!! " + __instance.def + " !!!!\n"); List <float> records = __instance.records; for (int i = 0; i < records.Count; ++i) { if (i > 0 && records[i] > 10000) { float max = records[i - 1] * 1.5f; if (records[i] > max) { //sb.AppendLine(" i: " + i + ": records["+i+"] " + records[i] + " ---- records[" + (i - 1) + "] " + records[i - 1] + " ---- max: " + max); int j = i + 1; while (j < records.Count) { //sb.AppendLine(" j: " + j + ": records[" + j + "] " + records[j] + " ---- records["+(i - 1)+"] " + records[i - 1] + " ---- max: " + max); if (records[j] < max) { break; } ++j; } float average; if (j != records.Count) { //sb.AppendLine(" --" + j + ": " + records[j]); average = (records[i - 1] + records[j]) * 0.5f; } else { //sb.AppendLine(" --" + j + ": end of list"); average = records[i]; } while (i < j) { //sb.AppendLine(" apply average of " + average + " to: " + i); records[i] = average; //sb.AppendLine(" i: " + i + ": " + records[i] + " (adj)"); ++i; } } //sb.AppendLine(" i: " + i + ": " + records[i]); } } __instance.records = records; //foreach (float f in __instance.records) //{ // sb.AppendLine(" " + f); //} //Log.Warning(sb.ToString()); } }
public static void RecalculateGraph(HistoryAutoRecorderGroup recorderGroup) { GraphUtility.cachedGraphTick = Find.TickManager.TicksGame; GraphUtility.curves.Clear(); GraphUtility.activeCurves.Clear(); if (!activeLegends.TryGetValue(recorderGroup, out curActiveLegends)) { curActiveLegends = new List <bool>(); for (int i = 0; i < recorderGroup.recorders.Count; i++) { curActiveLegends.Add(true); } activeLegends.Add(recorderGroup, curActiveLegends); } for (int i = 0; i < recorderGroup.recorders.Count; i++) { HistoryAutoRecorder historyAutoRecorder = recorderGroup.recorders[i]; SimpleCurveDrawInfo simpleCurveDrawInfo = new SimpleCurveDrawInfo(); simpleCurveDrawInfo.color = historyAutoRecorder.def.graphColor; simpleCurveDrawInfo.label = historyAutoRecorder.def.LabelCap; simpleCurveDrawInfo.labelY = historyAutoRecorder.def.GraphLabelY; simpleCurveDrawInfo.curve = new SimpleCurve(); for (int j = 0; j < historyAutoRecorder.records.Count; j++) { simpleCurveDrawInfo.curve.Add(new CurvePoint((float)j * (float)historyAutoRecorder.def.recordTicksFrequency / 60000f, historyAutoRecorder.records[j]), false); } simpleCurveDrawInfo.curve.SortPoints(); if (historyAutoRecorder.records.Count == 1) { simpleCurveDrawInfo.curve.Add(new CurvePoint(1.66666669E-05f, historyAutoRecorder.records[0]), true); } if (curActiveLegends[i]) { GraphUtility.activeCurves.Add(simpleCurveDrawInfo); } GraphUtility.curves.Add(simpleCurveDrawInfo); } }