CalibrationRecorderBehavior.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using Assets.StreetLight;
  2. using Assets.StreetLight.Scripts;
  3. using Newtonsoft.Json;
  4. using System;
  5. using System.Collections;
  6. using System.Collections.Concurrent;
  7. using System.Collections.Generic;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Threading.Tasks;
  11. using Unity.VisualScripting;
  12. using UnityEngine;
  13. namespace Assets
  14. {
  15. public class CalibrationRecorderBehavior : MonoBehaviour
  16. {
  17. PersonManager PersonManager => personManagerLazy.Value;
  18. Lazy<PersonManager> personManagerLazy;
  19. string calibrationFileName;
  20. private void Awake()
  21. {
  22. personManagerLazy = new Lazy<PersonManager>(FindObjectOfType<PersonManager>);
  23. }
  24. BlockingCollection<Action> taskQueue;
  25. void Start()
  26. {
  27. taskQueue = new BlockingCollection<Action>();
  28. calibrationFileName = Path.Combine(Configuration.Instance.CalibrationFilesDirectory, $"{DateTime.Now:yyyy-dd-M_HH-mm-ss}.csv");
  29. if (!File.Exists(calibrationFileName))
  30. {
  31. File.WriteAllLines(calibrationFileName, new string[] { "Time,WorldX,WorldY,WorldZ,UnityX,UnityY,UnityZ" });
  32. }
  33. }
  34. // Update is called once per frame
  35. void Update()
  36. {
  37. var persons = PersonManager.Persons;
  38. if (PersonManager.Persons.Count == 1)
  39. {
  40. var person = PersonManager.Persons.Single();
  41. var marker = GameObject.Find("CalibrationMarker");
  42. var personPosition = person.WorldPosition;
  43. var markerPosition = marker.transform.position;
  44. taskQueue.Add(() => File.AppendAllLines(calibrationFileName, new string[] { FormattableString.Invariant($"{DateTime.Now:yyyy-MM-dd-HH-mm-ss-ff},{personPosition.x},{personPosition.y},{personPosition.z},{markerPosition.x},{markerPosition.y},{markerPosition.z}") }));
  45. Task.Run(() => taskQueue.Take().Invoke());
  46. }
  47. }
  48. }
  49. }