class HandStartReplacingItemInHands extends HandStateBase
{
	void HandStartReplacingItemInHands (Man player = NULL, HandStateBase parent = NULL)
	{ }

	override void OnEntry (HandEventBase e)
	{
		super.OnEntry(e);
		
		Man player = e.m_Player;
		EntityAI itemInHands = player.GetHumanInventory().GetEntityInHands();

		InventoryLocation src = new InventoryLocation;
		if (itemInHands.GetInventory().GetCurrentInventoryLocation(src))
		{
			HandEventDestroyAndReplaceWithNew edr = HandEventDestroyAndReplaceWithNew.Cast(e);
			if (edr)
			{
				if (LogManager.IsInventoryHFSMLogEnable()) hndDebugPrint("[hndfsm] HandStartReplacingItemInHands about to execute lambda");

				HumanInventoryWithFSM inv = HumanInventoryWithFSM.Cast(player.GetInventory());
				edr.m_Lambda.Execute(inv);
				//player.GetItemAccessor().OnItemInHandsChanged();
				return;
			}
			else
				Error("[hndfsm] HandStartReplacingItemInHands - not a HandEventDestroyAndReplaceWithNew event");
		}
		else
			Error("[hndfsm] HandStartReplacingItemInHands - itemInHands has no InventoryLocation");
	}

	override void OnAbort (HandEventBase e)
	{
		super.OnAbort(e);
	}

	override void OnExit (HandEventBase e)
	{
		super.OnExit(e);
	}

	override bool IsWaitingForActionFinish () { return true; }
};


class HandReplacingItemInHands extends HandStateBase
{
	ref HandStartReplacingItemInHands m_Replacing;

	void HandReplacingItemInHands (Man player = NULL, HandStateBase parent = NULL)
	{
		// setup nested state machine
		m_Replacing = new HandStartReplacingItemInHands(player, this);

		// events:
		HandEventBase _fin_ = new HandEventHumanCommandActionFinished;

		m_FSM = new HandFSM(this); // @NOTE: set owner of the submachine fsm

		m_FSM.AddTransition(new HandTransition(   m_Replacing, _fin_,     NULL ));

		m_FSM.SetInitialState(m_Replacing);
	}

	override void OnEntry (HandEventBase e)
	{
		super.OnEntry(e);
	}

	override void OnAbort (HandEventBase e)
	{
		super.OnAbort(e);
	}

	override void OnExit (HandEventBase e)
	{
		super.OnExit(e);
	}
};


