void AddNewState(int index, int x, int y, int dx, int dy) { int accessX = x - dx; int accessY = y - dy; int boxX = x + dx; int boxY = y + dy; ushort[] newState = new ushort[map.boxesCount + 1]; Array.Copy(state, newState, map.boxesCount); newState[map.boxesCount] = newState[index]; newState[index] = map.Pos2XY(boxX, boxY); Array.Sort(newState, 0, map.boxesCount); newStates[newStatesCount] = newState; accessXYs[newStatesCount] = map.Pos2XY(accessX, accessY); ++newStatesCount; }
void ExploreNext(int x, int y, ushort prevXY, int newDist) { if (x < 0 || x >= map.width || y < 0 || y >= map.height) { return; } int pos = map.XY2Pos(x, y); if ((cells[pos] & O_UNEXPLORABLE_MASK) != 0) { return; } cells[pos] |= O_EXPLORED; distance[pos] = newDist; backtrace[pos] = prevXY; explore.Enqueue(map.Pos2XY(x, y)); }