MovingPiecesState::MovingPiecesState(const ColumnsGameFSM &fsm,
                                     ColumnsGameController &controller,
                                     EventQueue & eventQueue):
    BaseColumnsGameState(fsm, controller)
    ,mEventQueueRef(eventQueue)
    ,mOnTouchEventDlg(EventListenerDelegate(std::bind(&MovingPiecesState::OnTouchEvent, this, std::placeholders::_1)))
{
    mSubFSM.RegisterState(MovingPiecesState::MovementSubStateIds::Waiting,
                          std::make_shared<WaitingInputState>(mSubFSM,
                                                              mEventQueueRef));
    
    mSubFSM.RegisterState(MovingPiecesState::MovementSubStateIds::Received_Input,
                          std::make_shared<ReceivedInputState>(mSubFSM,
                                                               mEventQueueRef,
                                                               controller));
    
    mSubFSM.RegisterState(MovingPiecesState::MovementSubStateIds::Moving_Block,
                          std::make_shared<MovingBlockPieceInputState>(mSubFSM,
                                                                       mEventQueueRef,
                                                                       controller));
    
    mSubFSM.RegisterState(MovingPiecesState::MovementSubStateIds::Droping_Block,
                          std::make_shared<DroppingBlockPieceInputState>(mSubFSM,
                                                                         mEventQueueRef,
                                                                         controller));
    
    mSubFSM.ChangeTo(MovingPiecesState::MovementSubStateIds::Waiting);
}
bool PostGameScene::init(unsigned int p_SceneID, IGraphics *p_Graphics, ResourceManager *p_ResourceManager,
	Input *p_InputQueue, GameLogic *p_GameLogic, EventManager *p_EventManager)
{
	m_SceneID = p_SceneID;

	m_Graphics = p_Graphics;
	m_EventManager = p_EventManager;
	m_ResourceManager = p_ResourceManager;

	m_EventManager->addListener(EventListenerDelegate(this, &PostGameScene::onGoalListUpdate), FinishRaceEventData::sk_EventType);

	preLoadModels();

	return true;
}