#ifdef AVP_USE_INPUT_SIMULATOR

#ifndef __AVP_INPUTSIMULATOR_BEHAVIOUR_H__
#define __AVP_INPUTSIMULATOR_BEHAVIOUR_H__

#ifdef ASURA_USE_PRAGMA_ONCE
    #pragma once
#endif

class AVP_InputSimulator_Behaviour
{
	public:
		AVP_InputSimulator_Behaviour();
		virtual ~AVP_InputSimulator_Behaviour() {}

		const AVP_InputSimulator_Behaviour* GetChild() { return m_pxChild; };
		AVP_InputSimulator_Behaviour* GetChildWithType( const u_int uType );

		bool CreateChildWithType( const u_int uType );
		void DestroyAllChildren();

		void SetFinished( const bool bFinished = true ) { m_bIsFinished = bFinished; }
		bool IsFinished() { return m_bIsFinished; };

		void SetType( const u_int uType ) { m_uType = uType; };
		u_int GetType() const { return m_uType; };

		void SetChild( AVP_InputSimulator_Behaviour* pxChild ) { m_pxChild = pxChild; };
		void UpdateBehaviours( u_char* ucCurrentInput, float* pfAxisValue );

	protected:
		virtual void Update( u_char* ucCurrentInput, float* pfAxisValue ) {};

	private:
		AVP_InputSimulator_Behaviour* m_pxChild;
		bool m_bIsFinished;
		u_int m_uType;
};

#endif // __AVP_INPUTSIMULATOR_BEHAVIOUR_H__

#endif // AVP_USE_INPUT_SIMULATOR
