package com.brackeen.javagamebook.path;

import java.util.Iterator;
import com.brackeen.javagamebook.game.GameObject;
import com.brackeen.javagamebook.math3D.Vector3D;

/**
    Interfejs PathFinder jest funkcją, która odnajduje ścieżkę
    (listę List wektorów Vector3Ds) z jednej lokacji do drugiej
    lub od jednego obiektu gry GameObject do drugiego. Zauważmy,
    że metoda find() może zignorować zadany jej cel i zamiast tego
    zwrócić arbitralną ścieżkę, by np. patrolować określoną trasę
    lub uciekać od celu.
*/
public interface PathFinder {

    /**
        Odnajduje ścieżkę od obiektu GameObject A do obiektu GameObject B. 
        Ścieżka ta to Iterator wektorów Vector3Ds i nie zawiera startowej
        lokacji (GameObject A), zawiera natomiast lokację docelową
        (GameObject B). Obiekty wektorów Vector3D mogą być wykorzystywane
        przez inne obiekty, więc nie powinny być modyfikowane.
        Zwraca null, jeśli nie można znaleźć ścieżki.
    */
    public Iterator find(GameObject a, GameObject b);


    /**
        Odnajduje ścieżkę od lokacji startowej do celu. 
        Ścieżka to Iterator wektorów Vector3Ds i nie zawiera
        startowej lokacji, ale zawiera lokację celu.
        Obiekty wektorów Vector3D mogą być wykorzystywane
        przez inne obiekty, więc nie powinny być modyfikowane.
        Zwraca null, jeśli nie można znaleźć ścieżki.
    */
    public Iterator find(Vector3D start, Vector3D goal);
}
