balance_wheel/IrrExtensions/gui/Animators/IAnimGUIElement.h

90 lines
1.7 KiB
C++

/*
(c) 2013 Nicolaus Anderson
*/
#include <IGUIElement.h>
#include "IAnimGUIAnimator.h"
#ifndef _IANIMATED_GUI_ELEMENT_
#define _IANIMATED_GUI_ELEMENT_
namespace irr
{
namespace gui
{
//! Class Animated GUI Element
/* Allows GUI elements to be animated. */
class IAnimGUIElement : public IGUIElement
{
protected:
irr::core::list<IAnimGUIAnimator*> Animators;
public:
//! Constructor
/* Merely a callback for the IGUIElement constructor. */
IAnimGUIElement(
EGUI_ELEMENT_TYPE type,
IGUIEnvironment* environment,
IGUIElement* parent,
s32 id,
const core::recti& rectangle
)
: IGUIElement( type, environment, parent, id, rectangle )
{}
//! Add animator
void addAnimator( IAnimGUIAnimator* animator )
{
if ( animator )
{
animator->grab();
Animators.push_back( animator );
}
}
//! Remove animator
void removeAnimator( IAnimGUIAnimator* animator )
{
irr::core::list<IAnimGUIAnimator*>::Iterator it = Animators.begin();
for ( ; it != Animators.end(); ++it )
{
if ( *it == animator )
{
(*it)->drop();
Animators.erase(it);
return;
}
}
}
//! Remove all animators
void clearAnimators()
{
irr::core::list<IAnimGUIAnimator*>::Iterator it = Animators.begin();
while ( it != Animators.end() )
{
(*it)->drop();
Animators.erase(it);
it = Animators.begin();
}
}
//! On Post Render
/* Applies the animators */
virtual void OnPostRender( irr::u32 timeMs )
{
irr::core::list<IAnimGUIAnimator*>::Iterator it;
for ( ; it != Animators.end(); ++it )
{
(*it)->OnPostRender( timeMs, this );
}
IGUIElement::OnPostRender(timeMs);
}
};
}} // end namespaces gui and irr
#endif // #ifndef _IANIMATED_GUI_ELEMENT_