Copying movement for period of time

Hello,
I’m developing a project in which the main mechanic is when the player picks up an object, a copy of the itself will show up and copy its last 10 seconds of movement. I already have the movement being copied, but it is the whole movement since start, not the last 10 seconds. How can I accomplish this?

public bool isCopying;
    [SerializeField] Transform copy;
    List<Vector2> positions;
    [SerializeField] [Range(0f, 10f)] float recordTime;

    void Start()
    {
        positions = new List<Vector2>();
    }

    private void FixedUpdate()
    {
        if (isCopying)
        {
            Copy();
        }
        else
        {
            RecordPosition();
        }
    }

    private void RecordPosition()
    {
        if (positions.Count > Mathf.Round(recordTime / Time.fixedDeltaTime))
        {
            positions.Remove(transform.position);
        }
        positions.Add(transform.position);
    }

    private void Copy()
    {
        if (positions.Count > 0)
        {
            copy.position = positions[0];
            positions.RemoveAt(0);
        }
        else
        {
            isCopying = false;
        }
    }

Here’s a gif of what I have:
https://media.giphy.com/media/finuyiZZ7EVuRXLfEm/giphy.gif

Queue is the key for such action:

[SerializeField] [Range(0f, 10f)] float recordTime;
private float counter;
private bool copyMovement;
private Queue<Vector2> lastMovements;

void Start(){
     lastMovements = new Queue<Vector2>();
     counter = 0;
}

void Update (){
     if(copyMovement){ //when you pick up your boost item
           lastMovements.Enqueue(transform.position);
           counter += Time.deltaTime;
           if(counter >= recordTime){
                lastMovements.Dequeue();
           }
     } else {
          counter = 0;
          lastMovements.Clear();
     }
}

This way your movements will be stored in queue but when time is greater than recordTime the last item stored will be removed at the same time. This is exactly what you need i guess.

Thank you so much! I didn’t use your code exactly the same, I adapted it to what I had. The queue method was exactly what I needed, thank you!
Here’s the final code for anyone who needs it:

    void Start()
    {
        positions = new Queue<Vector2>();
    }

    private void FixedUpdate()
    {
        if (isCopying)
        {
            Copy();
        }
        else
        {
            RecordPosition();
        }
    }

    private void RecordPosition()
    {
        if (positions.Count > Mathf.Round(recordTime / Time.fixedDeltaTime))
        {
            positions.Dequeue();
        }
        positions.Enqueue(transform.position);
    }

    private void Copy()
    {
        if (positions.Count > 0)
        {
            copy.position = positions.Dequeue();
        }
        else
        {
            isCopying = false;
        }
    }
}