Skip to content

Instantly share code, notes, and snippets.

@PoetaKodu
Created April 8, 2017 18:53
Show Gist options
  • Save PoetaKodu/13a011d8aece9e90cb1e87c03774c3cc to your computer and use it in GitHub Desktop.
Save PoetaKodu/13a011d8aece9e90cb1e87c03774c3cc to your computer and use it in GitHub Desktop.
#include "Actor.hpp" // Klasa bedzie operowala na aktorach ze sceny.
#include "Pawn.hpp" // Potrzebna bedzie tez klasa pionka
// Klasa bazowa dla wszelkich zmyslow.
class IAISense
{
protected:
IPawn &m_owner; // Wlasciciel tego konkretnego zmyslu.
public:
/* Jest to konstruktor klasy zmyslu.
*/
explicit IAISense(IPawn &owner);
/* Pomocniczy typ do skrocenia zapisu. */
typedef std::vector<IActor*> TQueryActors;
/* Ta metoda bedzie odpowiadala za wykonanie odpowiedniego dzialania
sprawdzajacego wyniki dzialania zmyslu. Bedzie ona zwracala liste pasujacych aktorow ze sceny,
ktorzy spelniają odpowiednie warunki.
Warunki, ktore ma spelnic dany aktor by nie zostal usuniety z wynikow sprawdza funkcja filterFunc.
Parametr filterFunc to wskaznik na funkcje, ktora zwraca prawde gdy aktor ma byc dodany do wynikow lub falsz gdy ma byc usuniety z wynikow.
Domyslnie filterFunc akceptuje kazdy wynik.
Przykladowo gdy chcemy sprawdzic czy zmysl wykryl jakichs aktorow, ktorzy sa graczami, bedziemy chcieli usunac z wynikow
wszystkich aktorow, ktorzy nie sa klasy CPlayer. Zrobimy to w ten sposob:
aiSense->QueryActors([](IActor *const actor){ return dynamic_cast<CPlayer*>(actor) != nullptr; }
dynamic_cast daje pusty wskaznik, gdy wykonano niepoprawne rzutowanie, dlatego bedzie skutecznym filtrem przeciwko niechcianym wynikom.
*/
virtual TQueryActors QueryActors(bool(*filterFunc)(IActor* const actor) = [](IActor *const actor) { return true; }) = 0; // Funkcja domyslnie jest niezdefiniowana.
/* Ta metoda zwraca KOPIE tablicy, w ktorej znajduja sie wszyscy wykryci aktorzy przez zmysl.
*/
inline TQueryActors GetSensedActors() const { return m_sensedActors; }
protected:
TQueryActors m_sensedActors; // Tablica aktorow, ktora byla wynikiem ostatniego wywolania QueryActors.
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment