diff --git a/route-planning.md b/route-planning.md
index 4d5ffe9..4c16098 100644
--- a/route-planning.md
+++ b/route-planning.md
@@ -13,9 +13,21 @@ Naszą główną funkcją jest funkcja `aStar(startField, goalField)`, przyjmuje
-- Dodajemy pierwszy element który będziemy sprawdzać do listy openSet: `addToOpenSet(openSet, startField)`
+- Dodajemy pierwszy element który będziemy sprawdzać do listy openSet: `openSet.push(startField);`
+- Kolorujemy punkt startowy na zielono: `colorGreen(startField, animationFrame);`
- Dopuki lista `openSet` nie bedzie pusta sprawdzamy jej elementy: `while(openSet.length > 0)`
-- Wybieramy najbardziej obiecujący element z zbioru `openSet`: `let current = findLowestFScore(openSet, goalField)`
+- Wybieramy najbardziej obiecujący element z zbioru `openSet`:
+
+```javascript
+let winner = 0;
+for(let i = 0; i < openSet.length; i++){
+ if (openSet[i].f < openSet[winner].f){
+ winner = i
+ }
+}
+
+let current = openSet[winner];
+```
- Jeśli pole `current` okaże się naszym celem tworzymy ścieszkę z punktu startowego do naszego celu.
```javascript
@@ -32,15 +44,16 @@ if(current === goalField){
```javascript
for(var i = 0; i < path.length; i++){
- colorYellow(path[i]);
+ animationFrame = colorYellow(path[i], animationFrame);
}
-return path
+return path;
```
-- Jeśli pole `current` nie jest naszym celem, to usuwamy je z listy `openSet` i dodajemy do listy `closedSet`
+- Jeśli pole `current` nie jest naszym celem, to usuwamy je z listy `openSet`, dodajemy do listy `closedSet` oraz kolorujemy je na czerwono.
```javascript
removeFromSet(openSet, current);
-addToClosedSet(closedSet, current);
+closedSet.push(current);
+animationFrame = colorRed(current, animationFrame);
```
- Pobieramy sąsiadów pola `current`: `var neighbors = current.neighbors;`
- Dla każdego sąsiada obliczamy koszt dotarcia do niego z punktu początkowego najlepszą ścieszką.
@@ -55,15 +68,35 @@ for(var i = 0; i < neighbors.length; i++){
neighbor.gScore = tempG;
}
} else {
- neighbor.gScore = tempG;
- addToOpenSet(openSet, neighbor);
+ neighbor.g = tempG;
+ openSet.push(neighbor);
+ animationFrame = colorGreen(neighbor,animationFrame);
}
```
-- Po przypisaniu kosztu do sąsiada dodajemy jego odległość do celu:
`neighbor.heuristic = getDistance(neighbor, goalField);`,
+- Po przypisaniu kosztu do sąsiada przypisujemy jego odległość do celu:
`neighbor.h = getDistance(neighbor, goalField);
-- ??????????: `neighbor.f = neighbor.gScore + neighbor.heuristic;`
+- sume jego kosztu oraz heurystki: `neighbor.f = neighbor.g + neighbor.h;`
- oraz jego poprzednika: `neighbor.previous = current;`
### Definicja funkcji następnika
+Następnik wybierany jest z listy sąsiadów poprzednio wybranych pól. Jest to najbardziej obiecujące pole `current`,
+tzn. pole o najmniejszej sumie kosztu przejścia do niego z punktu startowego oraz heurystki.
+
+```javascript
+let winner = 0;
+ for(let i = 0; i < openSet.length; i++){
+ if (openSet[i].f < openSet[winner].f){
+ winner = i
+ }
+ }
+let current = openSet[winner];
+```
+
### Definicja przyjętej heurystyki
+Jest to szacowana odległość od sprawdzanego pola do celu. Obliczana jest za pomocą wzoru na odległość Manhattana.
+
+`|x1 - x2| + |y1 - y2|`
+
+### Testowanie projektu
+