using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using BITKit.IData; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Cysharp.Threading.Tasks; using UnityEngine.Events; using BITKit.IO; namespace BITKit { public class DataRecorder : Provider, IProvider { [SerializeReference, SubclassSelector] public NameProvider nameProvider; public DataRecorder recorder = new(); public Provider output; public UnityEvent onStart = new(); public UnityEvent onStop = new(); DateTime createTime; void Awake() { recorder.output += Output; recorder.onStart += onStart.Invoke; recorder.onStop += onStop.Invoke; onStop.Invoke(); } void OnDestroy() { Cancel(); } public override string Get() { throw new System.NotImplementedException(); } public override void Set(string t) { recorder.Set(t); } public void Record() { createTime = DateTime.Now; recorder.Start(); } public void Stop() { recorder.Stop(); } public void Cancel() => recorder.Cancel(); void Output(List jObject) { BITAssets assets = new(); PlayableInfo playableInfo = new() { Name = nameProvider.GetName(jObject), CreateTime = createTime, CompleteTime = DateTime.Now, FileName = "base64", }; var json = JsonConvert.SerializeObject(playableInfo, Formatting.Indented); var base64Data = JsonConvert.SerializeObject(jObject, Formatting.Indented); //base64Data = GZipHelper.GZipCompressString(base64Data); assets.Add(new BITAsset(nameof(PlayableInfo), json)); assets.Add(new BITAsset(playableInfo.FileName, base64Data)); output?.Set(assets); } bool IProvider.Get() { return recorder.isPlaying; } public void Set(bool t) { if (t) { Record(); } else { Stop(); } } } }