Skip to content

Commit bba5d49

Browse files
committed
AddedNodeLogging
1 parent cdccf2a commit bba5d49

File tree

6 files changed

+838
-49
lines changed

6 files changed

+838
-49
lines changed
Lines changed: 51 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
using System;
22
using System.Collections;
33
using System.Collections.Generic;
4+
using System.Globalization;
45
using System.IO;
56
using UnityEngine;
6-
using UnityEngine.InputSystem;
77

88
public class DataLogger : MonoBehaviour
99
{
10-
[SerializeField] private string pathForLogFile;
10+
[SerializeField] private string pathForPositionalLogs;
11+
[SerializeField] private string pathForNodeLogs;
1112
[SerializeField] private Transform playerTransform;
1213
[Range(0.1f,100)][Tooltip("Sampling rate per second")]
1314
[SerializeField] private float resolution;
@@ -16,19 +17,26 @@ public class DataLogger : MonoBehaviour
1617
private bool loggingKilled;
1718
private float waitTime;
1819
private TextWriter tw;
19-
private string fileName;
20+
private string positionalFileName;
21+
private string nodeFileName;
2022
private Vector3 playerLoc;
2123
private Vector3 playerRot;
22-
private List<Array> data;
24+
private List<Array> positionalData;
25+
private List<Array> nodeData;
2326
private Camera mainCam;
2427
private void Start()
2528
{
2629
waitTime = 1.0f / resolution;
27-
data = new List<Array>();
28-
fileName = Application.dataPath + pathForLogFile;
29-
tw = new StreamWriter(fileName, false);
30+
positionalData = new List<Array>();
31+
nodeData = new List<Array>();
32+
positionalFileName = Application.dataPath + pathForPositionalLogs;
33+
nodeFileName = Application.dataPath + pathForNodeLogs;
34+
tw = new StreamWriter(positionalFileName, false);
3035
tw.WriteLine("Time, Pos.x, Pos.y, Pos.z, Rot.x, Rot.y, Rot.z");
3136
tw.Close();
37+
tw = new StreamWriter(nodeFileName, false);
38+
tw.WriteLine("Time, Node, InOrOut, Pos.x, Pos.y, Pos.z, Rot.x, Rot.y, Rot.z");
39+
tw.Close();
3240

3341
routine=StartCoroutine(CallLogger(waitTime));
3442
}
@@ -37,37 +45,62 @@ private void Update()
3745
{
3846
playerLoc = playerTransform.position;
3947
playerRot = playerTransform.eulerAngles;
48+
if (Input.GetKeyDown(KeyCode.Space))
49+
{
50+
KillLogging();
51+
}
4052
}
4153

4254
private IEnumerator CallLogger(float timeToWait)
4355
{
4456
while (true)
4557
{
4658
yield return new WaitForSeconds(timeToWait);
47-
LogData();
59+
LogLocationalData();
4860
}
4961
}
5062

51-
public void KillLogging()
63+
public void LogNodeData(string nodeName, int inOrOut)
64+
{
65+
if(loggingKilled) return;
66+
string[] nodeTriggerFrame = new string[9];
67+
nodeTriggerFrame[0] = Time.timeSinceLevelLoad.ToString(CultureInfo.CurrentCulture);
68+
nodeTriggerFrame[1] = nodeName;
69+
nodeTriggerFrame[2] = inOrOut.ToString(CultureInfo.CurrentCulture);
70+
nodeTriggerFrame[3] = playerLoc.x.ToString(CultureInfo.CurrentCulture);
71+
nodeTriggerFrame[4] = playerLoc.y.ToString(CultureInfo.CurrentCulture);
72+
nodeTriggerFrame[5] = playerLoc.z.ToString(CultureInfo.CurrentCulture);
73+
nodeTriggerFrame[6] = playerRot.x.ToString(CultureInfo.CurrentCulture);
74+
nodeTriggerFrame[7] = playerRot.y.ToString(CultureInfo.CurrentCulture);
75+
nodeTriggerFrame[8] = playerRot.z.ToString(CultureInfo.CurrentCulture);
76+
nodeData.Add(nodeTriggerFrame);
77+
}
78+
79+
//TODO: Add way to stop logging, current is hitting space
80+
private void KillLogging()
5281
{
5382
if (loggingKilled) return;
5483
loggingKilled = true;
5584
StopCoroutine(routine);
56-
tw = new StreamWriter(fileName, true);
57-
foreach (Array array in data)
85+
tw = new StreamWriter(positionalFileName, true);
86+
foreach (Array array in positionalData)
5887
{
5988
float[] frame = (float[]) array;
6089
tw.WriteLine(frame[0]+","+frame[1]+","+frame[2]+","+frame[3]+","+frame[4]+","+frame[5]+","+frame[6]);
6190
}
62-
63-
Debug.Log("-------------ended logging session-------------\nWARNING: No further information will be recorded for this session!");
6491
tw.Close();
92+
tw = new StreamWriter(nodeFileName, true);
93+
foreach (Array array in nodeData)
94+
{
95+
string[] frame = (string[]) array;
96+
tw.WriteLine(frame[0]+","+frame[1]+","+frame[2]+","+frame[3]+","+frame[4]+","+frame[5]+","+frame[6]+","+frame[7]+","+frame[8]);
97+
}
98+
tw.Close();
99+
Debug.Log("-------------ended logging session-------------\nWARNING: No further information will be recorded for this session!");
100+
65101
}
66102

67-
/// <summary>
68-
/// solved it!
69-
/// </summary>
70-
private void LogData()
103+
private void LogLocationalData()
71104
{
72105
float[] singleFrame = new float[7];
73106
singleFrame[0] = Time.timeSinceLevelLoad;
@@ -77,6 +110,6 @@ private void LogData()
77110
singleFrame[4] = playerRot.x;
78111
singleFrame[5] = playerRot.y;
79112
singleFrame[6] = playerRot.z;
80-
data.Add(singleFrame);
113+
positionalData.Add(singleFrame);
81114
}
82115
}

Assets/Scripts/NodeAndData/Node.cs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,23 @@
1+
using System;
12
using UnityEngine;
23

34
public class Node : MonoBehaviour
45
{
56
public bool HasPlayer { get; private set; } = false;
67

7-
[SerializeField] private string nodeName;
8-
98
public void OnTriggerEnter(Collider other)
10-
{
9+
{
1110
if (!other.gameObject.CompareTag("Player")) return;
12-
Debug.Log("Player entered node " + name);
11+
NodeManager.Instance.Entered(this);
1312
HasPlayer = true;
1413
}
1514

1615
public void OnTriggerExit(Collider other)
1716
{
1817
if (!other.gameObject.CompareTag("Player")) return;
19-
Debug.Log("Player exited node " + name);
18+
NodeManager.Instance.Exited(this);
2019
HasPlayer = false;
2120
}
22-
23-
public void LogMovement()
24-
{
25-
26-
}
2721
}
2822

2923

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,37 @@
1-
using System;
2-
using System.Collections.Generic;
31
using UnityEngine;
42

53
public class NodeManager : MonoBehaviour
64
{
7-
private List<Node> nodes = new List<Node>();
5+
public static NodeManager Instance;
6+
7+
private Node currentPlayerNode;
8+
private DataLogger dataLogger;
89

910
private void Start()
1011
{
11-
foreach (GameObject g in GameObject.FindGameObjectsWithTag("Node"))
12+
if (Instance == null)
13+
{
14+
Instance = this;
15+
}
16+
else
1217
{
13-
try{
14-
nodes.Add(g.GetComponent<Node>());
15-
}
16-
catch(Exception e){
17-
Debug.Log(e);
18-
}
18+
Destroy(gameObject);
1919
}
20+
dataLogger = FindObjectOfType<DataLogger>();
2021
}
2122

22-
public Node GetNodeWithPlayer()
23+
public void Entered(Node node)
24+
{
25+
currentPlayerNode = node;
26+
dataLogger.LogNodeData(node.name,1);
27+
}
28+
29+
public void Exited(Node node)
2330
{
24-
foreach (Node node in nodes)
31+
if (currentPlayerNode == node)
2532
{
26-
if(node.HasPlayer==true)
27-
{
28-
Node targetNode = node;
29-
return targetNode;
30-
}
33+
currentPlayerNode = null;
3134
}
32-
return null;
35+
dataLogger.LogNodeData(node.name,0);
3336
}
3437
}

Assets/_Scenes/Tests.unity

Lines changed: 107 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,54 @@ Rigidbody:
237237
m_Interpolate: 0
238238
m_Constraints: 0
239239
m_CollisionDetection: 0
240+
--- !u!1 &77839475
241+
GameObject:
242+
m_ObjectHideFlags: 0
243+
m_CorrespondingSourceObject: {fileID: 0}
244+
m_PrefabInstance: {fileID: 0}
245+
m_PrefabAsset: {fileID: 0}
246+
serializedVersion: 6
247+
m_Component:
248+
- component: {fileID: 77839477}
249+
- component: {fileID: 77839476}
250+
m_Layer: 0
251+
m_Name: DataLogger
252+
m_TagString: Untagged
253+
m_Icon: {fileID: 0}
254+
m_NavMeshLayer: 0
255+
m_StaticEditorFlags: 0
256+
m_IsActive: 1
257+
--- !u!114 &77839476
258+
MonoBehaviour:
259+
m_ObjectHideFlags: 0
260+
m_CorrespondingSourceObject: {fileID: 0}
261+
m_PrefabInstance: {fileID: 0}
262+
m_PrefabAsset: {fileID: 0}
263+
m_GameObject: {fileID: 77839475}
264+
m_Enabled: 1
265+
m_EditorHideFlags: 0
266+
m_Script: {fileID: 11500000, guid: 6a9601c77998c9048821faee56e1dcbe, type: 3}
267+
m_Name:
268+
m_EditorClassIdentifier:
269+
pathForPositionalLogs: /../DataLogs/PositionalLogs.csv
270+
pathForNodeLogs: /../DataLogs/NodeLogs.csv
271+
playerTransform: {fileID: 17988398}
272+
resolution: 20
273+
--- !u!4 &77839477
274+
Transform:
275+
m_ObjectHideFlags: 0
276+
m_CorrespondingSourceObject: {fileID: 0}
277+
m_PrefabInstance: {fileID: 0}
278+
m_PrefabAsset: {fileID: 0}
279+
m_GameObject: {fileID: 77839475}
280+
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
281+
m_LocalPosition: {x: 0, y: 0, z: 0}
282+
m_LocalScale: {x: 1, y: 1, z: 1}
283+
m_ConstrainProportionsScale: 0
284+
m_Children: []
285+
m_Father: {fileID: 0}
286+
m_RootOrder: 5
287+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
240288
--- !u!1 &164717246
241289
GameObject:
242290
m_ObjectHideFlags: 0
@@ -352,6 +400,7 @@ Transform:
352400
- {fileID: 426782187}
353401
- {fileID: 1676265177}
354402
- {fileID: 1208182518}
403+
- {fileID: 1250455989}
355404
m_Father: {fileID: 0}
356405
m_RootOrder: 4
357406
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -442,7 +491,6 @@ MonoBehaviour:
442491
m_Script: {fileID: 11500000, guid: 41f0c3395f5a04f53ad7f644a0377c3d, type: 3}
443492
m_Name:
444493
m_EditorClassIdentifier:
445-
nodeName: Mid
446494
--- !u!4 &426782187
447495
Transform:
448496
m_ObjectHideFlags: 0
@@ -595,7 +643,6 @@ MonoBehaviour:
595643
m_Script: {fileID: 11500000, guid: 41f0c3395f5a04f53ad7f644a0377c3d, type: 3}
596644
m_Name:
597645
m_EditorClassIdentifier:
598-
nodeName: Right
599646
--- !u!4 &1208182518
600647
Transform:
601648
m_ObjectHideFlags: 0
@@ -611,6 +658,64 @@ Transform:
611658
m_Father: {fileID: 350341669}
612659
m_RootOrder: 2
613660
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
661+
--- !u!1 &1250455988
662+
GameObject:
663+
m_ObjectHideFlags: 0
664+
m_CorrespondingSourceObject: {fileID: 0}
665+
m_PrefabInstance: {fileID: 0}
666+
m_PrefabAsset: {fileID: 0}
667+
serializedVersion: 6
668+
m_Component:
669+
- component: {fileID: 1250455989}
670+
- component: {fileID: 1250455991}
671+
- component: {fileID: 1250455990}
672+
m_Layer: 0
673+
m_Name: BackNode
674+
m_TagString: Node
675+
m_Icon: {fileID: 0}
676+
m_NavMeshLayer: 0
677+
m_StaticEditorFlags: 0
678+
m_IsActive: 1
679+
--- !u!4 &1250455989
680+
Transform:
681+
m_ObjectHideFlags: 0
682+
m_CorrespondingSourceObject: {fileID: 0}
683+
m_PrefabInstance: {fileID: 0}
684+
m_PrefabAsset: {fileID: 0}
685+
m_GameObject: {fileID: 1250455988}
686+
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
687+
m_LocalPosition: {x: -5, y: 0, z: 0}
688+
m_LocalScale: {x: 1, y: 1, z: 1}
689+
m_ConstrainProportionsScale: 0
690+
m_Children: []
691+
m_Father: {fileID: 350341669}
692+
m_RootOrder: 3
693+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
694+
--- !u!65 &1250455990
695+
BoxCollider:
696+
m_ObjectHideFlags: 0
697+
m_CorrespondingSourceObject: {fileID: 0}
698+
m_PrefabInstance: {fileID: 0}
699+
m_PrefabAsset: {fileID: 0}
700+
m_GameObject: {fileID: 1250455988}
701+
m_Material: {fileID: 0}
702+
m_IsTrigger: 1
703+
m_Enabled: 1
704+
serializedVersion: 2
705+
m_Size: {x: 5, y: 5, z: 5}
706+
m_Center: {x: 0, y: 0, z: 0}
707+
--- !u!114 &1250455991
708+
MonoBehaviour:
709+
m_ObjectHideFlags: 0
710+
m_CorrespondingSourceObject: {fileID: 0}
711+
m_PrefabInstance: {fileID: 0}
712+
m_PrefabAsset: {fileID: 0}
713+
m_GameObject: {fileID: 1250455988}
714+
m_Enabled: 1
715+
m_EditorHideFlags: 0
716+
m_Script: {fileID: 11500000, guid: 41f0c3395f5a04f53ad7f644a0377c3d, type: 3}
717+
m_Name:
718+
m_EditorClassIdentifier:
614719
--- !u!1 &1676265174
615720
GameObject:
616721
m_ObjectHideFlags: 0
@@ -654,7 +759,6 @@ MonoBehaviour:
654759
m_Script: {fileID: 11500000, guid: 41f0c3395f5a04f53ad7f644a0377c3d, type: 3}
655760
m_Name:
656761
m_EditorClassIdentifier:
657-
nodeName: Top
658762
--- !u!4 &1676265177
659763
Transform:
660764
m_ObjectHideFlags: 0

DataLogs/NodeLogs.csv

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
Time, Node, InOrOut, Pos.x, Pos.y, Pos.z, Rot.x, Rot.y, Rot.z
2+
4.9,MidNode,1,3.31,0,0,0,0,0
3+
5.02,BackNode,1,-1.66,0,0,0,0,0
4+
5.04,MidNode,0,-2.76,0,0,0,0,0
5+
5.36,BackNode,0,-2.61,0,0,0,0,0
6+
5.36,MidNode,1,-2.61,0,0,0,0,0
7+
5.4,MidNode,0,5.51,0,0,0,0,0
8+
8.36,MidNode,1,2.9,0,0,0,0,0
9+
10.04,BackNode,1,-2.01,0,0,0,0,0
10+
11.08,BackNode,0,-2.02,0,0,0,0,0
11+
11.24,MidNode,0,3.2,0,0,0,0,0
12+
18.12,MidNode,1,2.44,0,0,0,0,0
13+
18.24,BackNode,1,-1.97,0,0,0,0,0
14+
18.28,MidNode,0,-2.98,0,0,0,0,0
15+
26.48,TopNode,1,-3.16,2.96,1.55,27.60011,1.44511E-06,337.269
16+
26.86,BackNode,0,-3.01,3.28,1.71,27.60011,1.44511E-06,337.269
17+
27.14,TopNode,0,-1.6,6.26,3.28,27.60011,1.44511E-06,337.269

0 commit comments

Comments
 (0)