/********************************************************************
*
* File: fsCBarGuiComponent.h
*
* Purpose: Bar that refills / empties
*
*********************************************************************/
#ifndef fsCBarGuiComponenthdr
#define fsCBarGuiComponenthdr
#include <fsCore/src/fsCUniqueId.h>
#include "fsIMessageListenerGuiComponent.h"
#include "fsRenderer/src/fsCSprite.h"
class fsCEntity;
class fsINode;
class fsCBarGuiComponent : public fsIMessageListenerGuiComponent
{
friend class fsCComponentFactory;
friend class fsIDebug;
public:
static const fsCUniqueId mTypeId;
void timeInit(fsS32 pFillDelay);
fsBool inputDisabled() const;
void drain();
fsBool timerActive() const;
protected:
void serialiseDo() override;
void deserialiseDo() override;
void renderDo() override;
void updateDo(fsS32 pDeltaMs) override;
void matrixApplyDo() override;
void initialiseFromVariableTableDo(const fsCVariableTable& pVars) override;
void listenersRegisterDo() override;
void listenersDeregisterDo() override;
fsBool messageProcessDo(const fsCUniqueId& pMessageType,
const fsIMessageDispatcher::sMessageParameters& pParam) override;
static fsIComponent* create(fsCEntity* pParent);
fsCBarGuiComponent(fsCEntity* pParent);
virtual ~fsCBarGuiComponent();<--- Destructor in derived class
private:
enum
{
eDIRECTION_UP = 0,
eDIRECTION_DOWN,
eDIRECTION_RIGHT,
eDIRECTION_LEFT
};
fsBool mLevelComplete;
fsITextSpriteComponent* mTimeTxt;
std::unique_ptr<fsCSprite> mDisabledSprite;
std::unique_ptr<fsCSprite> mFillSprite;
std::shared_ptr<fsCBrush> mFillBrush;
fsAffineMtx2d mLocalMtx;
fsF32 mCurrentFillPercent;
fsS32 mPrevFillLength;
fsS32 mFillDirection;
fsS32 mTimeToFillMs;
fsS32 mCurrentFillMs;
fsS32 mRecharge;
fsBool mStartsFull;
fsPoint mFillSprPos;
void spritesInitialise(const fsCVariableTable& pVars);
void fillDirectionInitialise(const fsCVariableTable& pVars);
void fillValuesInitialise(const fsCVariableTable& pVars);
void fillSpriteUpdate();
fsS32 fillLengthCalculate() const;
void fillValuesUpdate();
};
#endif