/********************************************************************
*
* Created: 30/4/2014 16:11
*
* File: gfCRotateMinigameComponent.h
*
* Author: Mick Waites
*
* Purpose: Rotating tiles mini game
*
*********************************************************************/
#ifndef gfCRotateMinigameComponenthdr
#define gfCRotateMinigameComponenthdr
#include "../gfIMinigameComponent.h"
#include "../gfIMinigameHintable.h"
class gfIStencil;
class fsCBrush;
class gfCRotateMinigameComponent : public gfIMinigameComponent, public gfIMinigameHintable
{
friend class fsCComponentFactory;
public:
static const fsCUniqueId mTypeId;
static const fsStr mEntityPrefix;
void cut(std::shared_ptr<fsCBrush> pTexture, gfIStencil* pStencil);
fsBool isHintableGet() const override;
protected:
virtual fsBool homeGet() const;
virtual fsBool fullHomeLock() const;
void spriteRotate(fsBool pForwards, fsBool pInstant, fsBool pChainedCall = false);
void updateDo(fsS32 pDeltaMs) 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);
gfCRotateMinigameComponent(fsCEntity* pParent);
virtual ~gfCRotateMinigameComponent();<--- Destructor in derived class
gfCRotateMinigameComponent* mLinkedRotComp;
fsS32 mRunningTime;
fsS32 mMouseDownTime;
fsS32 mNumRotSteps;
fsS32 mCurrRotStep;
fsBool mLockHomeRot;
fsBool mClockwise;
fsBool mLinkedClockwise;
void rotate();
private:
std::vector<fsCEntity*> rotateEntitiesGet();
void linkedCompFind();
void randomRotationSet();
void angleSet(fsBool pInstant) const;
};
#endif