1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- using Assets.StreetLight;
- using Assets.StreetLight.Scripts;
- using Newtonsoft.Json;
- using System;
- using System.Collections;
- using System.Collections.Concurrent;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Threading.Tasks;
- using Unity.VisualScripting;
- using UnityEngine;
- namespace Assets
- {
- public class CalibrationRecorderBehavior : MonoBehaviour
- {
- PersonManager PersonManager => personManagerLazy.Value;
- Lazy<PersonManager> personManagerLazy;
- string calibrationFileName;
- private void Awake()
- {
- personManagerLazy = new Lazy<PersonManager>(FindObjectOfType<PersonManager>);
- }
- BlockingCollection<Action> taskQueue;
- void Start()
- {
- taskQueue = new BlockingCollection<Action>();
- calibrationFileName = Path.Combine(Configuration.Instance.OutputCalibrationFilesDirectory, $"{DateTime.Now:yyyy-dd-M_HH-mm-ss}.csv");
- if (!File.Exists(calibrationFileName))
- {
- File.WriteAllLines(calibrationFileName, new string[] { "Time,WorldX,WorldY,WorldZ,UnityX,UnityY,UnityZ" });
- }
- enabled = false;
- PersonManager.DetectionReady += PersonManager_DetectionReady;
- }
- private void PersonManager_DetectionReady(object sender, EventArgs e)
- {
- enabled = true;
- }
- void Update()
- {
- var persons = PersonManager.Persons;
- if (PersonManager.Persons.Count == 1)
- {
- var person = PersonManager.Persons.Single();
- var marker = GameObject.Find("CalibrationMarker");
- var personPosition = person.WorldPosition;
- var markerPosition = marker.transform.position;
- 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}") }));
- Task.Run(() => taskQueue.Take().Invoke());
- }
- }
- }
- }
|