90 lines
1.7 KiB
C++
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_
|