private void InitializeNewMapFinders(String index, Map map) { newPathFinder[] newFinders = new newPathFinder[ThreadingMod.NUM_THREADS_PER_MAP]; for (int i = 0; i < ThreadingMod.NUM_THREADS_PER_MAP; i++) { newFinders[i] = new newPathFinder(map); } finders.Add(index, newFinders); numBusyFinders.Add(index, 0); busyFinders.Add(index, new bool[ThreadingMod.NUM_THREADS_PER_MAP]); findersBusy.Add(index, new EventWaitHandle(true, EventResetMode.ManualReset)); }
private newPathFinder SelectFinder(String index, ref int ticket) { newPathFinder reachability = null; lock (_syncObject) { for (int i = 0; i < ThreadingMod.NUM_THREADS_PER_MAP; i++) { if (busyFinders[index][i] == false) { busyFinders[index][i] = true; reachability = finders[index][i]; ticket = i; break; } } } return(reachability); }
public static PawnPath NewFindPath(this PathFinder pf, IntVec3 start, LocalTargetInfo dest, TraverseParms traverseParms, PathEndMode peMode = PathEndMode.OnCell) { FieldInfo mapField = typeof(PathFinder).GetField("map", BindingFlags.NonPublic | BindingFlags.Instance); Map map = (Map)mapField.GetValue(pf); string index = map.GetUniqueLoadID(); int ticket = -1; newPathFinder finder = PathFinderInstanceContainer.GetInstance().requestFinder(index, ref ticket, map); var val = finder.FindPath(start, dest, traverseParms, peMode); PathFinderInstanceContainer.GetInstance().CheckInFinder(index, ticket); try { var someVal = val.LastNode; } catch (System.Exception) { Log.Message("Tried to return a path without an end.... ???"); return(PawnPath.NotFound); } return(val); }