using System.Collections.Generic; using System.Linq; using System.Reflection; using Logging.Base; using UnityEngine; namespace Logging.Data { public abstract class SensorDataLogger<T> : MonoBehaviour, ILogable, ISerializableLog<T> where T : ISerializable { public abstract string Key { get; } public IEnumerable<string> HeaderNames => typeof(T).GetFields(BindingFlags.Instance | BindingFlags.NonPublic).Select(f => f.Name) .Where(f => !f.Equals("timestamp")); public Dictionary<long, string[]> BufferLines { get; private set; } public virtual void Awake() { gameObject.SetActive(GameManager.LOG_TO_FILE); } public virtual void Start() { BufferLines = new Dictionary<long, string[]>(); FileLogger.Instance.RegisterLogable(this); } public void ClearBuffer() { BufferLines.Clear(); } public void Log(T value) { var data = value.Serialize(); BufferLines[data.Key] = data.Value; } public abstract IEnumerable<T> ReadLog(IEnumerable<IEnumerable<string>> lines); } }