class EmoteBase
{
	protected PlayerBase m_Player; //useful for various conditions in child classes
	protected int m_ID = -1;
	protected string m_InputActionName = "";
	protected int m_StanceMaskAdditive = 0;
	protected int m_StanceMaskFullbody = 0;
	protected int m_AdditiveCallbackUID = 0;
	protected int m_FullbodyCallbackUID = 0;
	protected bool m_HideItemInHands = false;
	
	bool EmoteCondition(int stancemask)
	{
		return true;
	}
	
	bool CanBeCanceledNormally(notnull EmoteCB callback)
	{
		return true;
	}
	
	//! Checks for valid stance mask
	bool EmoteFBStanceCheck(int stancemask)
	{
		int stanceIdx = DayZPlayerUtils.ConvertStanceMaskToStanceIdx(stancemask);
		
		if (!m_Player)
		{
			ErrorEx("No player for 'PlayerCanChangeStance'");
			return false;
		}
		
		if (stanceIdx != -1 && !DayZPlayerUtils.PlayerCanChangeStance(m_Player, stanceIdx))
			return false;
		
		return true;
	}
	
	bool DetermineOverride(out int callback_ID, out int stancemask, out bool is_fullbody)
	{
		return false;
	}
	
	void OnBeforeStandardCallbackCreated(int callback_ID, int stancemask, bool is_fullbody);
	void OnCallbackEnd();
	
	bool EmoteStartOverride(typename callbacktype, int id, int mask, bool fullbody)
	{
		return false;
	}
	
	void SetOwnerPlayer(PlayerBase player)
	{
		m_Player = player;
	}
	
///////////
//Getters//
///////////
	PlayerBase GetOwnerPlayer()
	{
		return m_Player;
	}
	
	int GetID()
	{
		return m_ID;
	}
	
	string GetInputActionName()
	{
		return m_InputActionName;
	}
	
	int GetStanceMaskAdditive()
	{
		return m_StanceMaskAdditive;
	}
	
	int GetStanceMaskFullbody()
	{
		return m_StanceMaskFullbody;
	}
	
	int GetAdditiveCallbackUID()
	{
		return m_AdditiveCallbackUID;
	}
	
	int GetFullbodyCallbackUID()
	{
		return m_FullbodyCallbackUID;
	}
	
	bool GetHideItemInHands()
	{
		return m_HideItemInHands;
	}
	/*
	protected int m_StanceMaskAdditive = 0;
	protected int m_StanceMaskFullbody = 0;
	*/
}
