csharp/1ZouLTReX1/FP-MOG/top%20down%20shooter/Assets/Scripts/Utils/CircularList.cs

CircularList.cs
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public clast CircularList
{
    public CircularList(int capacity)
    {
        m_Elements = new T[capacity];
    }

    public int Capacity
    {
        get { return m_Elements.Length; }
    }

    public int Count
    {
        get { return m_Count; }
    }

    public void Add(T item)
    {
        var index = (m_First + m_Count) % m_Elements.Length;
        m_Elements[index] = item;

        if (m_Count == m_Elements.Length)
            m_First = (m_First + 1) % m_Elements.Length;
        else
            ++m_Count;
    }

    public void Clear()
    {
        m_First = 0;
        m_Count = 0;
    }

    public T this[int i]
    {
        get
        {
            return m_Elements[(m_First + i) % m_Elements.Length];
        }
        set
        {
            m_Elements[(m_First + i) % m_Elements.Length] = value;
        }
    }

    public T[] GetArray()
    {
        return m_Elements;
    }

    public int HeadIndex
    {
        get { return m_First; }
    }

    public void Reset(int headIndex, int count)
    {
        m_First = headIndex;
        m_Count = count;
    }

    int m_First;
    int m_Count;
    T[] m_Elements;
}