[Bastion-cvs] bastion/src/order InformationCollector.cpp,1.18,1.19 InformationCollector.h,1.18,1.19
Brought to you by:
jacek_kolodziej
|
From: Jacek K. <jac...@us...> - 2004-06-30 18:49:41
|
Update of /cvsroot/bastion/bastion/src/order In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24235/src/order Modified Files: InformationCollector.cpp InformationCollector.h Log Message: - Zwyciestwo! Model gry jest oddzielony od jej wizualizacji. Dzieki temu moze istniec caly model swiata bez istnienia wizualizacji (nie testowalem czy mozna tick'ac swiat zanim zacznie sie go ogladac, ale nie powinno byc z tym problemow). W szczegolnosci nie da sie juz przejsc wskaznikami od klas swiata do klas widoku. Teraz metoda void* LoadingScreen::loadLevel(void *levelName) wyglada nader prosto: new World, new GameView(world). Pawel: masz czysty teren jesli chodzi o zapisywanie stanu gry. Sa dwa miejsca gdzie obiekty swiata posiadaja wskaznik do obiektow wizualizacji: UnitHandler oraz EventUnitSpotted (klasa przechowujaca informacje o jednostce w InformationCollectorze). Klasy te posiadaja wskazniki do figurek ("figure"). Przy zapisywaniu stanu gry, nalezy te wskazniki zapisac jako NULL - sa bowiem one poprawiane przy podpinaniu swiata do GameView. Mozna przyjac ze klasa MissileView ktora zajmuje sie renderingiem strzal tez powinna byc zapisywana w pliku. Alternatywnie, mozna odpowiedni wskaznik z klasy Missile zapisac jako NULL - tez powinno dzialac ok. A tak pozatym to gra dziala tak samo jak do tej pory. Index: InformationCollector.cpp =================================================================== RCS file: /cvsroot/bastion/bastion/src/order/InformationCollector.cpp,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** InformationCollector.cpp 4 Jun 2004 20:21:47 -0000 1.18 --- InformationCollector.cpp 30 Jun 2004 18:49:31 -0000 1.19 *************** *** 9,12 **** --- 9,14 ---- #include "army/Army.h" #include "interface/world/WorldView.h" + #include "util/EventDispatcher.h" + #include "util/EventBase.h" WorldView * EventUnitSpotted::worldView=NULL; *************** *** 414,419 **** figure = NULL; //state = NULL; if (manageVisualization) ! initFigure(); } --- 416,429 ---- figure = NULL; //state = NULL; + if (manageVisualization) ! //initFigure(); ! // TODO: dispatch(nowa figurka potrzebna) ! EventDispatcher::get()->dispatch( ! EventDispatcher::ENeedAFigure, ! new EventNeedAFigure(this) ! ); ! ! } *************** *** 432,436 **** figure = NULL; if (manageVisualization) ! initFigure(); } --- 442,450 ---- figure = NULL; if (manageVisualization) ! //initFigure(); ! EventDispatcher::get()->dispatch( ! EventDispatcher::ENeedAFigure, ! new EventNeedAFigure(this) ! ); } *************** *** 464,472 **** if (isWilhelm != u->isWilhelm) { isWilhelm = u->isWilhelm; if (figure) { delete figure; figure = NULL; initFigure(); ! } } --- 478,488 ---- if (isWilhelm != u->isWilhelm) { isWilhelm = u->isWilhelm; + /***** if (figure) { delete figure; figure = NULL; initFigure(); ! } ! */ } *************** *** 490,497 **** --- 506,515 ---- } + /* void EventUnitSpotted::initFigure( ) { /// UWAGA: Tu NIE WOLNO przechodzic przez wskaznik 'unit' !!! + figure = Figure::createFigure( unitType, *************** *** 503,509 **** updateFigure(); } ! void EventUnitSpotted::updateFigure( ) { figure->setMapPos(xPos, yPos); //std::cout << " ----- Time: " << (InformationCollector::getGameTime() - time) << ", gettime: " << InformationCollector::getGameTime() << " time: " << time << "\n"; --- 521,529 ---- updateFigure(); } ! */ void EventUnitSpotted::updateFigure( ) { + if(!figure) + return; figure->setMapPos(xPos, yPos); //std::cout << " ----- Time: " << (InformationCollector::getGameTime() - time) << ", gettime: " << InformationCollector::getGameTime() << " time: " << time << "\n"; Index: InformationCollector.h =================================================================== RCS file: /cvsroot/bastion/bastion/src/order/InformationCollector.h,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** InformationCollector.h 29 May 2004 11:41:15 -0000 1.18 --- InformationCollector.h 30 Jun 2004 18:49:31 -0000 1.19 *************** *** 1 **** ! #ifndef INFCOL_H #define INFCOL_H #define DEBUG #include <stdlib.h> #include <vector> #include "OrderManager.h" #include "../army/Army.h" #include "../map/SeenSet.h" #include "../unit/Unit.h" #include "../team/Team.h" #include "../team/TeamBrain.h" #include "../util/DynamicStack.h" /*! \const OBJECT_DESTROYED \brief Opisuje stan obiektu na mapie jako zniszczony. */ int const OBJECT_DESTROYED = 2; /*! \const OBJECT_DEMAGED \brief Opisuje stan obiektu na mapie jako uszkodzony. */ int const OBJECT_DEMAGED = 1; /*! \const OBJECT_FOUND \brief Zaznacza, ¿e zosta³ zauwa¿ony dotychczas niespotkany obiekt. */ int const OBJECT_FOUND = 0; class Team; class Unit; class MapObject; class SeenSet; class Figure; class WorldView; using namespace order; /*! \class eventUnitSpotted \brief Struktura okre?lajca informacje o widzianej w przesz³oci jednostce. *Ta struktura przechowuje informacje o widzianej jednostce. Jest to moja propozycja, zobaczymy co bêdzie rzeczywi?cie *potrzebne, bardzo wa¿ny jest tu kompromis pomiêdzy ilo?ci pamiêtanych danych, a wydajno?ci operacji na strukturze. */ class EventUnitSpotted { public: Unit* unit; int time; double xPos; double yPos; int unitType; // Typ jednostki wg. tego co zwraca w unit->getType(); bool isWilhelm; Army* side; Team* team; bool alive; // Aktualizowane, przy died(), tworzeniu i merge'owani // To dla Jacka: mylê, ¿e fajnie bêdzie w przysz³oci pamiêtaæ np. klatkê animacji, czy co takiego. //void* state; static WorldView *worldView; /// Potrzebne do ewentualnego tworzenia figurki bool manageVisualization; Figure *figure; /// figurka danej jednostki. NULL jesli manageVisualization==false. /** \param manageVisualization true jesli ten obiekt ma zarzadzac wyswietlaniem zadanej jednostki */ EventUnitSpotted(Unit* u,int t, bool _manageVisualization); EventUnitSpotted(const EventUnitSpotted& eus, bool _manageVisualization); /* EventUnitSpotted(const EventUnitSpotted& eus) { unit = eus.unit;time = eus.time; xPos = eus.xPos; yPos = eus.yPos; alive = eus.alive; side = eus.side; //state = eus.state; }; */ void actualize(Unit* u,int t); void actualize(EventUnitSpotted* newData); void died(Unit* u, int t); ~EventUnitSpotted(); /// aktualizuje wyglad figurki - polozenie, przezroczystosc, itp. void updateFigure(); protected: /// Podpina figurke. void initFigure(); private: EventUnitSpotted(const EventUnitSpotted& eus); // Tej metody nie mozna uzywac (JACEK) }; /*! \class eventTeamSpotted \brief Struktura okre?lajca informacje o widzianej w przesz³oci dru¿ynie.. */ class EventTeamSpotted { public: Team* team; char *name; int time; double xPos; double yPos; int count; //int bowmen_count; //int warriot_count; //int knight_count; double morale; OrderPack* orderPack; void* state; EventTeamSpotted(Team* tm,int t) { name = tm->getName(); team = tm;time = t; xPos = tm->getPosX(); yPos = tm->getPosY(); morale = tm->getMorality(); count = tm->getCount(); orderPack = new OrderPack(*((tm->getTeamBrain())->getOrderManager())); }; EventTeamSpotted(const EventTeamSpotted& ts) { team = ts.team; time = ts.time; xPos = ts.xPos; yPos = ts.yPos; morale = ts.morale; count = ts.count; orderPack = new OrderPack(*ts.orderPack); }; void actualize(Team* tm,int t) { if (t>time) { time = t; xPos = tm->getPosX(); yPos = tm->getPosY(); morale = tm->getMorality(); count = tm->getCount(); orderPack->mergeWith((tm->getTeamBrain())->getOrderManager()); }; }; void actualize(EventTeamSpotted* newData) { time = newData->time; xPos = newData->xPos; yPos = newData->yPos; morale = newData->morale; count = newData->count; orderPack->mergeWith(newData->orderPack); }; ~EventTeamSpotted() { delete orderPack; }; }; /*! \class eventStructureSpotted \brief Struktura okreajca informacje jakie przechowujemy o widzianym zdarzeniu na mapie. *Wci¿ nie ma decyzji, co dok³adnie oddzia³ powinien pamiêtaæ odno?nie mapy, to wiêc jest jeszcze moja luna propozycja. *Jak na razie tego nie bêdzie... */ class EventStructureSpotted { public: MapObject* structure; int state; int time; int xPos; int yPos; }; /*! \class spottedUnits \brief Struktura definujca format danych o jednostkach jakie zwracaæ bêdzie InformationCollector. */ /*class SpottedUnits { public: int n; EventUnitSpotted* spotted; };*/ /*! \class spottedStructures \brief Struktura definujca format danych o budynkach i terenie jakie zwracaæ bêdzie InformationCollector. */ class SpottedStructures { public: int n; EventStructureSpotted* spotted; } ; class TeamTable { protected: friend class InformationCollector; int maxTeam; Army* army; EventTeamSpotted** teams; void newMaxTeam(int n) {if (n>maxTeam) maxTeam = n;}; // Zwraca pozycje na której jest jednostka, lub pozycjê nieu¿ywan±. int linearSearch(Team* tm); int getTeamNum(Team* tm); public: void merge(TeamTable* tt2); EventTeamSpotted* getTeamInfo(Team* tm) { int n = getTeamNum(tm); return teams[n]; }; void addTeam(Team* tm,int t); void removeTeam(Team* tm) { int n = getTeamNum(tm); if (n == maxTeam) maxTeam--; if (teams[n]) delete teams[n]; teams[n] = NULL; }; void checkData(EventTeamSpotted* newData); // Jedyny dostêpny konstruktor to konstruktor dla armii, chyba nic innego nie potrzeba? TeamTable(Army* _army); ~TeamTable(); }; class UnitTable { protected: friend class InformationCollector; static const int maxLenght = 1025; DynamicStack<Unit*> *present; EventUnitSpotted* units[maxLenght]; bool isMain; // true jesli to jest unitTable glownego InfCollectora. int hashUnit(Unit* u) { return (((((int) u)+1137)>>2)%maxLenght); }; int getUnitNum(Unit* u); public: /// juz NIE ZMIENIA parametru (modyfikacja JACKA). void merge(UnitTable* ut2); EventUnitSpotted* getUnitInfo(Unit* u) { return units[getUnitNum(u)]; }; void addUnit(Unit* u,int t) { int n = getUnitNum(u); if (units[n]) { units[n]->actualize(u,t); } else { units[n] = new EventUnitSpotted(u,t,isMain); present->push(u); }; }; EventUnitSpotted* getData(Unit* u) { int n = getUnitNum(u); return(units[n]); }; /*! \brief Sprawdza czy mamy aktualne dane o jednostce. * Sprawdza czy nasze dane przechowywane o jednostce s¹ nowsze od zadanych. \param newData nowe dane. */ void checkData(EventUnitSpotted* newData); void unitDied(Unit* u,int t); /// \param isMain true jesli to jest UnitTable glownego InfCollectora UnitTable(bool isMain); /*! \brief Ten konstruktor tworzy UnitTable w którym s¹ wszystkie inforamcje dotycz¹ce konkretnej armii. */ // UnitTable(Army* army); ~UnitTable(); }; /*! \class InformationCollector \brief Klasa odpowiedzialna za zarzdzanie wiedz oddzia³u. *InfromationCollector w naszym za³o¿eniu pamiêta o napotkanych jednostkach i uszkodzonych budynkach. Nie ma tu jeszcze *odpowiedzialnych za to struktur danych */ class InformationCollector { protected: /*! \brief Aktualnie przechowywany SeenSet * Ostatnio pobrany od Team SeenSet. */ UnitTable* unitsTable; TeamTable* teamTable; //int gameTime; static int gameTime; int shiftTime; static const int actualizeTime = 10; // Co ile czasu aktualizowaæ? /* True jesli to jest glowny InformationCollector. Glowny InfCollector ma za zadanie zarzadzac figurkami. Nie ma jednak sensu robic z tego osobnej klasy IMHO (JACEK). */ bool isMain; static InformationCollector *mainInformationCollector; static EventTeamSpotted* Team2EventTeamSpotted(Team *t); public: // InformationCollector(Team* team); /** Konstruktor. \param isMain true jesli to ma byc glowny InformationCollector zarzadzajacy widokiem calej gry */ InformationCollector(Army* army, bool isMain); ~InformationCollector(); static int getGameTime() { return gameTime;} /*! \brief Podstawowa funkcja wywo³ywana przez dru¿ynê. \param Mog³a by braæ w parametrze SeenSet, ale mo¿e lepiej bêdzie jak sama o niego poprosi. */ void tick(Team* tm); // Funkcja newEra ma byæ przez kogo¶ wywo³ywana raz na turê- aktualnie jest to GameMap static void newEra() {gameTime++;}; //void makeOlder() {gameTime++;}; /*! \brief £¹czy informacje z dwóch InformationCollector'ów * £¹czy informacje z dwóch InformationCollector'ów \param with drugi InformationCollector */ void merge(InformationCollector* with); /*! \brief Aktualizuje informacje o jednostkach. * Aktualizuje informacje o jednostkach na podstawie otrzymanego SeenSet. \param seen SeenSet oddzia³u */ void actualize(SeenSet* seen); /*! \brief Aktualizuje informacje o jednostkach. * Aktualizuje informacje o jednostkach dla dru¿yny. Wed³ug specyfikacji ko¿ystamy z innego \param seen SeenSet oddzia³u */ void actualize(Team* team); /*! \brief Zaznacza, ¿e jednostka nie ¿yje. * Ustawia w strukturach danych informnacje o ?mierci jednostki \param died zmar³y. */ void unitDies(Unit* died); /*! \brief Odbiera informacje o zmianie na mapie. * Odbiera od oddzia³u informacje o zmianie na mapie. \param object dostrze¿ony obiekt. \param newState nowy stan w którym znalaz³ siê obiekt(\sa OBJECT_DESTROYED \sa OBJECT_DEMAGED \sa OBJECT_FOUND). */ void structureSpotted(MapObject* object,int newState); /*! \brief Zwraca odnalezione zmiany na mapie. * InformationCollector zwraca w ten sposób niesione przez siebie informacje o ukszta³towaniu mapy, w formacie * \a spottedStructures */ SpottedStructures* giveStructuresSpotted(); /*! \brief Zwraca napotkane jednostki. NOTE: nalezy samemu zwolnic wynikowy wektor przy pomocy delete. (Jacek) * InformationCollector zwraca w ten sposób niesione przez siebie informacje o napotkanych jednostkach, w formacie * \a spottedUnits */ vector<EventUnitSpotted*>* giveUnitsSpotted(); vector<EventTeamSpotted*>* giveTeamsSpotted(); }; // Teraz pare definicji, z których jak na razie rezygnujê... // Uwaga! Jak na razie rezygnujê z wykorzystania tej klasy- to gdybym chcia³ segregowaæ // informacje o ludzikach wedle dru¿yn. /*class TeamInfo { friend class TeamTable; protected: EventUnitSpotted** units; int users; int lastInfo; int oldestInfo; public: TeamInfo(); void merge(TeamInfo* t2); TeamInfo(const TeamInfo&); Team* giveTeam(); };*/ #endif \ No newline at end of file --- 1 ---- ! #ifndef INFCOL_H #define INFCOL_H #define DEBUG #include <stdlib.h> #include <vector> #include "OrderManager.h" #include "../army/Army.h" #include "../map/SeenSet.h" #include "../unit/Unit.h" #include "../team/Team.h" #include "../team/TeamBrain.h" #include "../util/DynamicStack.h" /*! \const OBJECT_DESTROYED \brief Opisuje stan obiektu na mapie jako zniszczony. */ int const OBJECT_DESTROYED = 2; /*! \const OBJECT_DEMAGED \brief Opisuje stan obiektu na mapie jako uszkodzony. */ int const OBJECT_DEMAGED = 1; /*! \const OBJECT_FOUND \brief Zaznacza, ¿e zosta³ zauwa¿ony dotychczas niespotkany obiekt. */ int const OBJECT_FOUND = 0; class Team; class Unit; class MapObject; class SeenSet; class Figure; class WorldView; using namespace order; /*! \class eventUnitSpotted \brief Struktura okre?lajca informacje o widzianej w przesz³oci jednostce. *Ta struktura przechowuje informacje o widzianej jednostce. Jest to moja propozycja, zobaczymy co bêdzie rzeczywi?cie *potrzebne, bardzo wa¿ny jest tu kompromis pomiêdzy ilo?ci pamiêtanych danych, a wydajno?ci operacji na strukturze. */ class EventUnitSpotted { public: Unit* unit; int time; double xPos; double yPos; int unitType; // Typ jednostki wg. tego co zwraca w unit->getType(); bool isWilhelm; Army* side; Team* team; bool alive; // Aktualizowane, przy died(), tworzeniu i merge'owani // To dla Jacka: mylê, ¿e fajnie bêdzie w przysz³oci pamiêtaæ np. klatkê animacji, czy co takiego. //void* state; static WorldView *worldView; /// Potrzebne do ewentualnego tworzenia figurki bool manageVisualization; Figure *figure; /// figurka danej jednostki. NULL jesli manageVisualization==false. /// Przypisuje figurke (i zleca zarzadzanie nia). void setFigure(Figure * newFigure) { figure = newFigure; updateFigure(); }; /** \param manageVisualization true jesli ten obiekt ma zarzadzac wyswietlaniem zadanej jednostki */ EventUnitSpotted(Unit* u,int t, bool _manageVisualization); EventUnitSpotted(const EventUnitSpotted& eus, bool _manageVisualization); /* EventUnitSpotted(const EventUnitSpotted& eus) { unit = eus.unit;time = eus.time; xPos = eus.xPos; yPos = eus.yPos; alive = eus.alive; side = eus.side; //state = eus.state; }; */ void actualize(Unit* u,int t); void actualize(EventUnitSpotted* newData); void died(Unit* u, int t); ~EventUnitSpotted(); /// aktualizuje wyglad figurki - polozenie, przezroczystosc, itp. void updateFigure(); protected: /// Podpina figurke. //void initFigure(); private: EventUnitSpotted(const EventUnitSpotted& eus); // Tej metody nie mozna uzywac (JACEK) }; /*! \class eventTeamSpotted \brief Struktura okre?lajca informacje o widzianej w przesz³oci dru¿ynie.. */ class EventTeamSpotted { public: Team* team; char *name; int time; double xPos; double yPos; int count; //int bowmen_count; //int warriot_count; //int knight_count; double morale; OrderPack* orderPack; void* state; EventTeamSpotted(Team* tm,int t) { name = tm->getName(); team = tm;time = t; xPos = tm->getPosX(); yPos = tm->getPosY(); morale = tm->getMorality(); count = tm->getCount(); orderPack = new OrderPack(*((tm->getTeamBrain())->getOrderManager())); }; EventTeamSpotted(const EventTeamSpotted& ts) { team = ts.team; time = ts.time; xPos = ts.xPos; yPos = ts.yPos; morale = ts.morale; count = ts.count; orderPack = new OrderPack(*ts.orderPack); }; void actualize(Team* tm,int t) { if (t>time) { time = t; xPos = tm->getPosX(); yPos = tm->getPosY(); morale = tm->getMorality(); count = tm->getCount(); orderPack->mergeWith((tm->getTeamBrain())->getOrderManager()); }; }; void actualize(EventTeamSpotted* newData) { time = newData->time; xPos = newData->xPos; yPos = newData->yPos; morale = newData->morale; count = newData->count; orderPack->mergeWith(newData->orderPack); }; ~EventTeamSpotted() { delete orderPack; }; }; /*! \class eventStructureSpotted \brief Struktura okreajca informacje jakie przechowujemy o widzianym zdarzeniu na mapie. *Wci¿ nie ma decyzji, co dok³adnie oddzia³ powinien pamiêtaæ odno?nie mapy, to wiêc jest jeszcze moja luna propozycja. *Jak na razie tego nie bêdzie... */ class EventStructureSpotted { public: MapObject* structure; int state; int time; int xPos; int yPos; }; /*! \class spottedUnits \brief Struktura definujca format danych o jednostkach jakie zwracaæ bêdzie InformationCollector. */ /*class SpottedUnits { public: int n; EventUnitSpotted* spotted; };*/ /*! \class spottedStructures \brief Struktura definujca format danych o budynkach i terenie jakie zwracaæ bêdzie InformationCollector. */ class SpottedStructures { public: int n; EventStructureSpotted* spotted; } ; class TeamTable { protected: friend class InformationCollector; int maxTeam; Army* army; EventTeamSpotted** teams; void newMaxTeam(int n) {if (n>maxTeam) maxTeam = n;}; // Zwraca pozycje na której jest jednostka, lub pozycjê nieu¿ywan±. int linearSearch(Team* tm); int getTeamNum(Team* tm); public: void merge(TeamTable* tt2); EventTeamSpotted* getTeamInfo(Team* tm) { int n = getTeamNum(tm); return teams[n]; }; void addTeam(Team* tm,int t); void removeTeam(Team* tm) { int n = getTeamNum(tm); if (n == maxTeam) maxTeam--; if (teams[n]) delete teams[n]; teams[n] = NULL; }; void checkData(EventTeamSpotted* newData); // Jedyny dostêpny konstruktor to konstruktor dla armii, chyba nic innego nie potrzeba? TeamTable(Army* _army); ~TeamTable(); }; class UnitTable { protected: friend class InformationCollector; static const int maxLenght = 1025; DynamicStack<Unit*> *present; EventUnitSpotted* units[maxLenght]; bool isMain; // true jesli to jest unitTable glownego InfCollectora. int hashUnit(Unit* u) { return (((((int) u)+1137)>>2)%maxLenght); }; int getUnitNum(Unit* u); public: /// juz NIE ZMIENIA parametru (modyfikacja JACKA). void merge(UnitTable* ut2); EventUnitSpotted* getUnitInfo(Unit* u) { return units[getUnitNum(u)]; }; void addUnit(Unit* u,int t) { int n = getUnitNum(u); if (units[n]) { units[n]->actualize(u,t); } else { units[n] = new EventUnitSpotted(u,t,isMain); present->push(u); }; }; EventUnitSpotted* getData(Unit* u) { int n = getUnitNum(u); return(units[n]); }; /*! \brief Sprawdza czy mamy aktualne dane o jednostce. * Sprawdza czy nasze dane przechowywane o jednostce s¹ nowsze od zadanych. \param newData nowe dane. */ void checkData(EventUnitSpotted* newData); void unitDied(Unit* u,int t); /// \param isMain true jesli to jest UnitTable glownego InfCollectora UnitTable(bool isMain); /*! \brief Ten konstruktor tworzy UnitTable w którym s¹ wszystkie inforamcje dotycz¹ce konkretnej armii. */ // UnitTable(Army* army); ~UnitTable(); }; /*! \class InformationCollector \brief Klasa odpowiedzialna za zarzdzanie wiedz oddzia³u. *InfromationCollector w naszym za³o¿eniu pamiêta o napotkanych jednostkach i uszkodzonych budynkach. Nie ma tu jeszcze *odpowiedzialnych za to struktur danych */ class InformationCollector { protected: /*! \brief Aktualnie przechowywany SeenSet * Ostatnio pobrany od Team SeenSet. */ UnitTable* unitsTable; TeamTable* teamTable; //int gameTime; static int gameTime; int shiftTime; static const int actualizeTime = 10; // Co ile czasu aktualizowaæ? /* True jesli to jest glowny InformationCollector. Glowny InfCollector ma za zadanie zarzadzac figurkami. Nie ma jednak sensu robic z tego osobnej klasy IMHO (JACEK). */ bool isMain; static InformationCollector *mainInformationCollector; static EventTeamSpotted* Team2EventTeamSpotted(Team *t); public: // InformationCollector(Team* team); /** Konstruktor. \param isMain true jesli to ma byc glowny InformationCollector zarzadzajacy widokiem calej gry */ InformationCollector(Army* army, bool isMain); ~InformationCollector(); static int getGameTime() { return gameTime;} /*! \brief Podstawowa funkcja wywo³ywana przez dru¿ynê. \param Mog³a by braæ w parametrze SeenSet, ale mo¿e lepiej bêdzie jak sama o niego poprosi. */ void tick(Team* tm); // Funkcja newEra ma byæ przez kogo¶ wywo³ywana raz na turê- aktualnie jest to GameMap static void newEra() {gameTime++;}; //void makeOlder() {gameTime++;}; /*! \brief £¹czy informacje z dwóch InformationCollector'ów * £¹czy informacje z dwóch InformationCollector'ów \param with drugi InformationCollector */ void merge(InformationCollector* with); /*! \brief Aktualizuje informacje o jednostkach. * Aktualizuje informacje o jednostkach na podstawie otrzymanego SeenSet. \param seen SeenSet oddzia³u */ void actualize(SeenSet* seen); /*! \brief Aktualizuje informacje o jednostkach. * Aktualizuje informacje o jednostkach dla dru¿yny. Wed³ug specyfikacji ko¿ystamy z innego \param seen SeenSet oddzia³u */ void actualize(Team* team); /*! \brief Zaznacza, ¿e jednostka nie ¿yje. * Ustawia w strukturach danych informnacje o ?mierci jednostki \param died zmar³y. */ void unitDies(Unit* died); /*! \brief Odbiera informacje o zmianie na mapie. * Odbiera od oddzia³u informacje o zmianie na mapie. \param object dostrze¿ony obiekt. \param newState nowy stan w którym znalaz³ siê obiekt(\sa OBJECT_DESTROYED \sa OBJECT_DEMAGED \sa OBJECT_FOUND). */ void structureSpotted(MapObject* object,int newState); /*! \brief Zwraca odnalezione zmiany na mapie. * InformationCollector zwraca w ten sposób niesione przez siebie informacje o ukszta³towaniu mapy, w formacie * \a spottedStructures */ SpottedStructures* giveStructuresSpotted(); /*! \brief Zwraca napotkane jednostki. NOTE: nalezy samemu zwolnic wynikowy wektor przy pomocy delete. (Jacek) * InformationCollector zwraca w ten sposób niesione przez siebie informacje o napotkanych jednostkach, w formacie * \a spottedUnits */ vector<EventUnitSpotted*>* giveUnitsSpotted(); vector<EventTeamSpotted*>* giveTeamsSpotted(); }; // Teraz pare definicji, z których jak na razie rezygnujê... // Uwaga! Jak na razie rezygnujê z wykorzystania tej klasy- to gdybym chcia³ segregowaæ // informacje o ludzikach wedle dru¿yn. /*class TeamInfo { friend class TeamTable; protected: EventUnitSpotted** units; int users; int lastInfo; int oldestInfo; public: TeamInfo(); void merge(TeamInfo* t2); TeamInfo(const TeamInfo&); Team* giveTeam(); };*/ #endif \ No newline at end of file |