class ActionLightItemOnFireWithBlowtorchCB : ActionLightItemOnFireCB
{
	override void CreateActionComponent()
	{
		m_ActionData.m_ActionComponent = new CAContinuousTime(UATimeSpent.FIREPLACE_IGNITE);
	}
}

class ActionLightItemOnFireWithBlowtorch : ActionLightItemOnFire
{
	void ActionLightItemOnFireWithBlowtorch()
	{
		m_CallbackClass = ActionLightItemOnFireWithBlowtorchCB;
	}
	
	override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
	{
		Blowtorch bt = Blowtorch.Cast(item);
		if (!bt.HasEnoughEnergyForRepair(UATimeSpent.FIREPLACE_IGNITE))
		{
			return false;
		}
		
		ItemBase target_item = ItemBase.Cast(target.GetObject());	
		if (target_item && item)
		{
			// when igniting item on the ground with igniter in hands
			if (!target_item.IsIgnited() && !IsItemInCargoOfSomething(target_item) && target_item.CanBeIgnitedBy(item))
			{
				// oven stage of standard fireplace
				if (target_item.IsKindOf("Fireplace"))
				{
					if (Fireplace.Cast(target_item).IsOven())
					{
						return true;
					}
					
					if (Fireplace.CanIgniteEntityAsFireplace(target_item))
					{
						return true;
					}

					return false;
				}
				
				return true;
			}
			// when igniting item in hands from something on ground
			else if (!item.IsIgnited() && !IsItemInCargoOfSomething(item) && target_item.CanIgniteItem(item) && item.CanBeIgnitedBy(target_item))
			{
				return true;
			}
		}
		
		return false;
	}
	
	override void OnUpdateServer(ActionData action_data)
	{
		super.OnUpdate(action_data);

		if (action_data.m_State == UA_PROCESSING && !action_data.m_MainItem.GetCompEM().IsWorking())
		{
			Interrupt(action_data);
		}
	}
	
	override void OnExecuteServer(ActionData action_data)
	{
		super.OnExecuteServer(action_data);

		action_data.m_MainItem.GetCompEM().SwitchOn();
	}
	
	override void OnFinishProgressServer(ActionData action_data)
	{
		super.OnFinishProgressServer(action_data);
		
		action_data.m_MainItem.GetCompEM().SwitchOff();
	}
	
	override void OnEndServer(ActionData action_data)
	{
		super.OnEndServer(action_data);
		
		action_data.m_MainItem.GetCompEM().SwitchOff();
	}
}