// Ryzom - MMORPG Framework // Copyright (C) 2010 Winch Gate Property Limited // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . #ifndef CL_IG_ENUM_H #define CL_IG_ENUM_H #include "game_share/time_weather_season/time_and_season.h" namespace NL3D { class UInstanceGroup; } /** This serves as a callback to enumerate ig in various places . * (loaded igs of the landscape, igs of villages */ struct IIGEnum { /** Called by the enumerator for each ig of interest * \return true if the enumeration must continue */ virtual bool enumIG(NL3D::UInstanceGroup *ig) = 0; }; /** Tool fct : this enum all instanciated (added to the main scene) igs of the following categories : * - Zone igs * - ZC igs * - continents igs (villages) * \return false if the enumeration has been stopped */ bool enumAllIGs(IIGEnum *callaback); /** A callback to know when an ig has been added. * (such callbacks are managed bu UInstanceGroup, but it doesn't tells which ig has been instanciated */ struct IIGObserver { virtual void instanceGroupLoaded(NL3D::UInstanceGroup *ig) = 0; virtual void instanceGroupAdded(NL3D::UInstanceGroup *ig) = 0; virtual void instanceGroupRemoved(NL3D::UInstanceGroup *ig) = 0; }; /** An helper class to register 'IIGAdded' observers */ class CIGNotifier { public: void registerObserver(IIGObserver *obs); void removeObserver(IIGObserver *obs); bool isObserver(IIGObserver *obs) const; // void notifyIGLoaded(NL3D::UInstanceGroup *ig); void notifyIGAdded(NL3D::UInstanceGroup *ig); void notifyIGRemoved(NL3D::UInstanceGroup *ig); /////////////////// private: typedef std::vector TObservers; TObservers _Observers; }; #endif