@@ -10,7 +10,7 @@ namespace MLAPI.MonoBehaviours.Core
10
10
public class TrackedObject : MonoBehaviour
11
11
{
12
12
internal Dictionary < float , TrackedPointData > FrameData = new Dictionary < float , TrackedPointData > ( ) ;
13
- internal List < float > Framekeys = new List < float > ( ) { 0 } ;
13
+ internal LinkedList < float > Framekeys = new LinkedList < float > ( ) ;
14
14
private Vector3 savedPosition ;
15
15
private Quaternion savedRotation ;
16
16
@@ -22,15 +22,21 @@ internal void ReverseTransform(float secondsAgo)
22
22
float targetTime = currentTime - secondsAgo ;
23
23
float previousTime = 0 ;
24
24
float nextTime = 0 ;
25
- for ( int i = 1 ; i < Framekeys . Count ; i ++ )
25
+ LinkedListNode < float > node = Framekeys . First ;
26
+ float previousValue = 0f ;
27
+ while ( node != null )
26
28
{
27
- if ( Framekeys [ i - 1 ] <= targetTime && Framekeys [ i ] >= targetTime )
29
+ if ( previousValue <= targetTime && node . Value >= targetTime )
28
30
{
29
- previousTime = Framekeys [ i ] ;
30
- nextTime = Framekeys [ i + 1 ] ;
31
+ previousTime = previousValue ;
32
+ nextTime = node . Value ;
31
33
break ;
32
34
}
33
-
35
+ else
36
+ {
37
+ previousValue = node . Value ;
38
+ node = node . Next ;
39
+ }
34
40
}
35
41
36
42
float timeBetweenFrames = nextTime - previousTime ;
@@ -48,35 +54,35 @@ internal void ResetStateTransform()
48
54
49
55
void Start ( )
50
56
{
57
+ Framekeys . AddFirst ( 0 ) ;
51
58
LagCompensationManager . SimulationObjects . Add ( this ) ;
52
59
}
53
60
54
61
void OnDestroy ( )
55
62
{
63
+ Framekeys . Clear ( ) ;
64
+ FrameData . Clear ( ) ;
56
65
LagCompensationManager . SimulationObjects . Remove ( this ) ;
57
66
}
58
67
59
68
internal void AddFrame ( )
60
69
{
61
70
float currentTime = Time . time ;
62
- for ( int i = 0 ; i < Framekeys . Count ; i ++ )
71
+ LinkedListNode < float > node = Framekeys . First ;
72
+ LinkedListNode < float > nextNode = node . Next ;
73
+ while ( currentTime - node . Value >= NetworkingManager . singleton . NetworkConfig . SecondsHistory )
63
74
{
64
- if ( currentTime - Framekeys [ i ] >= NetworkingManager . singleton . NetworkConfig . SecondsHistory )
65
- {
66
- for ( int j = 0 ; j < i ; j ++ )
67
- {
68
- FrameData . Remove ( Framekeys [ 0 ] ) ;
69
- //This is not good for performance. Other datatypes should be concidered.
70
- Framekeys . RemoveAt ( 0 ) ;
71
- }
72
- }
75
+ nextNode = node . Next ;
76
+ FrameData . Remove ( node . Value ) ;
77
+ Framekeys . RemoveFirst ( ) ;
78
+ node = nextNode ;
73
79
}
74
80
FrameData . Add ( Time . time , new TrackedPointData ( )
75
81
{
76
82
position = transform . position ,
77
83
rotation = transform . rotation
78
84
} ) ;
79
- Framekeys . Add ( Time . time ) ;
85
+ Framekeys . AddLast ( Time . time ) ;
80
86
}
81
87
}
82
88
}
0 commit comments