/********************************************************************
*
* File: gfCFlipsawMinigameComponent.h
*
* Purpose: Mini game where tiles swap places
*
*********************************************************************/
#ifndef gfCFlipsawMinigameComponenthdr
#define gfCFlipsawMinigameComponenthdr
#include <fsCore/fsSColour.h>
#include "../rotate/gfCRotateMinigameComponent.h"
class gfIStencil;
class fsINode;
class fsCBrush;
class gfCFlipsawMiniGameLogicComponent;
class gfCFlipsawMinigameComponent : public gfCRotateMinigameComponent
{
friend class fsCComponentFactory;
public:
static const fsCUniqueId mTypeId;
static const fsCUniqueId mFlipsawPieceSelectedMsg;
static const fsCUniqueId mFlipsawAnotherPieceSelectedMsg;
static const fsCUniqueId mFlipsawClearHintTintMsg;
static const fsStr mFlipsawPrefix;
void gameLogicSet(gfCFlipsawMiniGameLogicComponent* const pParentLogic);
void cut(std::shared_ptr<fsCBrush> pTexture, gfIStencil* pStencil);
void hintSwap();
fsBool selected() const;
fsBool isActiveGet() const override;
fsBool hintDo() override;
protected:
struct sFlipsawEventMsgParam : public fsIMessageDispatcher::sMessageParameters
{
sFlipsawEventMsgParam(gfCFlipsawMinigameComponent* pFlipComp) : mFlipComp(pFlipComp) {}
const gfCFlipsawMinigameComponent* mFlipComp;
};
fsBool homeGet() const override;
fsBool fullHomeLock() const override;
void resetDo() override;
void listenersDeregisterDo() override;
void listenersRegisterDo() override;
fsBool messageProcessDo(const fsCUniqueId& pMessageType,
const fsIMessageDispatcher::sMessageParameters& pParam) override;
void serialiseDo() override;
void deserialiseDo() override;
void initialiseDo(const fsCVariableTable& pVars) override;
void skipDo() override;
fsBool acceptingInputGet() const override;
static fsIComponent* create(fsCEntity* pParent);
gfCFlipsawMinigameComponent(fsCEntity* pParent);
virtual ~gfCFlipsawMinigameComponent();<--- Destructor in derived class
private:
void tintSet() const;
void flip();
void homePositionStore();
static void positionsRandomise(std::vector<gfCFlipsawMinigameComponent*>& pFlipEnts);
void positionsSwap(const gfCFlipsawMinigameComponent* pOther) const;
void initialisationFinalise();
void homeCheck(fsBool pPlayEffect);
static fsSColour4B mWrongColourTint;
static fsSColour4B mSelectedColourTint;
static fsSColour4B mHintColourTint;
static fsBool mLockHomePos;
fsPoint mHomePosition;
fsBool mInitialised;
fsBool mSelected;
fsBool mHinted;
gfCFlipsawMiniGameLogicComponent* mGameLogic;
};
#endif