public void InsertedAt(BlocIndex pos) { indexInMap = pos; transform.parent = Map.GetMapRefTransform(); transform.position = Map.IndexToPosition(pos); gameObject.transform.FindChild("GUI").gameObject.transform.position = transform.position; }
public static Vector3 IndexToPosition(BlocIndex index) { return IndexToPosition(index.x, index.y, index.z); }
public static List<Bloc> FetchNeighbors(BlocIndex index, int range, bool volumetricSearch = false, bool includeStartBloc = false) { List<Bloc> list = new List<Bloc>(); int minX = Mathf.Max(0, index.x - range); int maxX = Mathf.Min(_width-1, index.x + range); int minY = Mathf.Max(0, index.y - range); int maxY = Mathf.Min(_length-1, index.y + range); int minZ = index.z; int maxZ = index.z; if(volumetricSearch) { minZ = Mathf.Max(0, index.z - range); maxZ = index.z + range; } for(int x = minX; x <= maxX; ++x) { for(int y = minY; y <= maxY; ++y) { for(int z = minZ; z <= maxZ; ++z) { /*if(x != index.x && y != index.y) //discard corners continue;*/ Bloc bloc = GetBlocAt(x, y, z); if(bloc == null) continue; if(bloc.indexInMap == index && !includeStartBloc) //discard starting bloc continue; list.Add(bloc); } } } return list; }
public static List<Bloc> FetchNeighbors2D(BlocIndex index, int range, bool includeStartBloc = false) { List<Bloc> list = new List<Bloc>(); int minX = Mathf.Max(0, index.x - range); int maxX = Mathf.Min(_width-1, index.x + range); int minY = Mathf.Max(0, index.y - range); int maxY = Mathf.Min(_length-1, index.y + range); for(int x = minX; x <= maxX; ++x) { for(int y = minY; y <= maxY; ++y) { if(x != index.x && y != index.y) continue; Bloc bloc = GetBlocAt(x, y);//get the one on top if(bloc == null) continue; if(bloc.indexInMap == index && !includeStartBloc) //discard starting bloc continue; list.Add(bloc); } } return list; }