/// <summary> /// Return all <see cref="GridEntity"/>'s in map that satisfy <see cref="ISearchCheck"/>. /// </summary> public void Search(Vector3 vector, float radius, ISearchCheck check, out List <GridEntity> intersectedEntities) { intersectedEntities = new List <GridEntity>(); for (float z = vector.Z - radius; z <= vector.Z + radius; z += MapCell.Size) { for (float x = vector.X - radius; x <= vector.X + radius; x += MapCell.Size) { var searchVector = new Vector3(x, 0f, z); GetGrid(searchVector).Search(searchVector, check, intersectedEntities); } } }
/// <summary> /// Return all <see cref="GridEntity"/>'s in map that satisfy <see cref="ISearchCheck"/>. /// </summary> public void Search(Vector3 vector, float radius, ISearchCheck check, out List <GridEntity> intersectedEntities) { // negative radius is unlimited distance if (radius < 0) { intersectedEntities = entities.Values.ToList(); return; } intersectedEntities = new List <GridEntity>(); for (float z = vector.Z - radius; z <= vector.Z + radius; z += MapCell.Size) { for (float x = vector.X - radius; x <= vector.X + radius; x += MapCell.Size) { var searchVector = new Vector3(x, 0f, z); GetGrid(searchVector).Search(searchVector, check, intersectedEntities); } } }
/// <summary> /// Return all <see cref="GridEntity"/>'s in map that satisfy <see cref="ISearchCheck"/>. /// </summary> public void Search(Vector3 vector, float radius, ISearchCheck check, out List <GridEntity> intersectedEntities) { // negative radius is unlimited distance if (radius < 0) { intersectedEntities = entities.Values.ToList(); return; } intersectedEntities = new List <GridEntity>(); for (float z = vector.Z - radius; z < vector.Z + radius + MapDefines.GridCellSize; z += MapDefines.GridCellSize) { for (float x = vector.X - radius; x < vector.X + radius + MapDefines.GridCellSize; x += MapDefines.GridCellSize) { var searchVector = new Vector3(x, 0f, z); // don't activate new grids during serch GetGrid(searchVector)?.Search(searchVector, check, intersectedEntities); } } }
/// <summary> /// Return all <see cref="GridEntity"/>'s in cell that satisfy <see cref="ISearchCheck"/>. /// </summary> public void Search(ISearchCheck check, List <GridEntity> intersectedEntities) { intersectedEntities.AddRange(entities.Where(check.CheckEntity)); }
/// <summary> /// Return all <see cref="GridEntity"/>'s in grid that satisfy <see cref="ISearchCheck"/>. /// </summary> public void Search(Vector3 position, ISearchCheck check, List <GridEntity> intersectedEntities) { GetCell(position).Search(check, intersectedEntities); }