public void RemoveBoid(TestBoid argBoid)
 {
     if (argBoid == null)
     {
         return;
     }
     if (mBoids.Contains(argBoid))
     {
         mBoids.Remove(argBoid);
     }
 }
    public void InsertIntoGrid(TestBoid argBoid)
    {
        int gridCellX = Mathf.FloorToInt(argBoid.transform.position.x / mGridCellSize);
        int gridCellY = Mathf.FloorToInt(argBoid.transform.position.y / mGridCellSize);
        int gridCellZ = Mathf.FloorToInt(argBoid.transform.position.z / mGridCellSize);

        Vector3Int gridCell = new Vector3Int(gridCellX, gridCellY, gridCellZ);

        if (!mCells.ContainsKey(gridCell)) mCells.Add(gridCell, new TestSpatialGridCell());

        mCells[gridCell].Insert(argBoid);

        InsertIntoNeighbours(gridCell, argBoid);
    }
    void SetupDefaultFlock()
    {
        for (int i = 0; i < mNumOfBoids; i++)
        {
            GameObject newAgent = Instantiate(mBoidPrefab, new Vector3(Random.Range(18f, 22f), Random.Range(18f, 22f), Random.Range(18f, 22f)), Quaternion.Euler(Random.Range(0, 360), Random.Range(0, 360), Random.Range(0, 360)));
            newAgent.name             = "Boid " + i;
            newAgent.transform.parent = mAgentContainer.transform;
            TestBoid agentScript = newAgent.GetComponent <TestBoid>();
            agentScript.SetManager(this);
            agentScript.SetShouldFlock(true);

            AddBoid(agentScript);
            agentScript.SetTarget(mFlockTarget.transform.position);
        }
    }
    public void AddBoid(TestBoid argBoid)
    {
        if (argBoid == null)
        {
            return;
        }

        if (!mBoids.Contains(argBoid))
        {
            mBoids.Add(argBoid);
        }
        if (argBoid.GetTarget() != mFlockTarget.transform.position)
        {
            argBoid.SetTarget(mFlockTarget.transform.position);
        }
    }
    void InsertIntoNeighbours(Vector3Int argCurrentCell, TestBoid argBoid)
    {
        for (int x = -1; x < 2; x++)
        {
            for (int y = -1; y < 2; y++)
            {
                for (int z = -1; z < 2; z++)
                {
                    if (x == 0 && y == 0 && z == 0) continue;
                    int actualX = argCurrentCell.x + x;
                    int actualY = argCurrentCell.y + y;
                    int actualZ = argCurrentCell.z + z;
                    Vector3Int gridIndex = new Vector3Int(actualX, actualY, actualZ);

                    if (!mCells.ContainsKey(gridIndex)) mCells.Add((gridIndex), new TestSpatialGridCell());
                    mCells[gridIndex].InsertFromNeighbour(argBoid);
                }
            }
        }
    }
 public void InsertFromNeighbour(TestBoid argBoid)
 {
     mBoidsFromNeighbours.Add(argBoid);
 }
 public void Insert(TestBoid argBoid)
 {
     mBoids.Add(argBoid);
 }