machine RaptorEat
{
	state EatStart
	{
		;//action SetAesPosInterp(false)
		transition HasTarget() == false
		{
			direct goto EatExitStart
		}
		transition
		{
			direct goto SeekTargetStart
		}
	}

	state SeekTargetStart
	{
		action StopLook()
		action SetRunMode(false)
		action SetSpeedModifierWalk(1.0)
		action SetFlockImpulse(false)

		transition HasTarget() == false
		{
			direct goto EatExitStart
		}
		transition SeekTargetOffset(1.0, 0.0, false, false, true) == false
		{
			;// target possibly in corner
			action SetRandomTimerBetween(2, 50.0, 55.0)
			goto CornerSeek
		}
		transition
		{
			goto SeekTarget
		}
	}

	state CornerSeek
	{
		transition HasTarget() == false
		{
			action SetStandStill()
			goto EatExitStart
		}
		transition InTargetProximityRadius(1.0, true)
		{
			action SetStandStill()
			goto SeekFacingCheck
		}
		transition SeekTargetOffset(-5.0, 0.0, false, false, true) == false
		{
			;//action SetStandStill()
			;//goto SeekFacingCheck
			goto EatExitStart
		}
		transition IsTimerUp(2)
		{
			action SetStandStill()
			goto SeekFacingCheck
		}
	}

	state SeekFacingCheck
	{
		action FaceTargetLocator("d_spine")
		transition
		{
			goto SeekFacingAlign
		}
	}

	state SeekFacingAlign
	{
		transition HasTarget() == false
		{
			action SetStandStill()
			goto EatExitStart
		}
		transition HasArrived()
		{
			goto RipInit
		}
	}

	state SeekTarget
	{
		transition HasTarget() == false
		{
			action SetStandStill()
			goto EatExitStart
		}
		transition InTargetProximityRadius(0.0, true)
		{
			action SetStandStill()
			action SetSpeedDirect(0.0)
			direct goto RipFacingAlign
		}
		transition HasArrived()
		{
			direct goto RipFacingAlign
		}
	}

	state RipFacingAlign
	{
		action FaceTargetLocator("d_spine")
		transition
		{
			goto RipFacingAlignWait
		}
	}

	state RipFacingAlignWait
	{
		transition HasTarget() == false
		{
			action SetStandStill()
			goto EatExitStart
		}
		transition HasArrived()
		{
			goto RipMinDistCheck
		}
	}

	state RipMinDistCheck
	{
		transition
		{
			action SetStandStill()
			action SetSpeedDirect(0.0)
			goto RipInit
		}
	}

	state RipMinDistCheck
	{
		;//action Print("Close Check (0.2)\n")
		transition InTargetProximityRadius(-0.2, false) == true	;// too close
		{
			goto RipStepBack
		}
		transition
		{
			action SetStandStill()
			action SetSpeedDirect(0.0)
			goto RipInit
		}
	}

	state RipStepBack
	{
		action SetSpeedModifierWalk(1.0)
		action SetWalkBackMode(true)
		transition StepBackFromTarget(10.0) == false
		{
			;// failure case, eat anyway
			action SetWalkBackMode(false)
			action SetStandStill()
			action SetSpeedDirect(0.0)
			goto RipInit			
		}
		transition
		{
			action SetRandomTimerBetween(2, 5.0, 6.0)
			goto RipStepBackLoop
		}
	}

	state RipStepBackLoop
	{
		transition HasTarget() == false
		{
			action SetStandStill()
			goto RipStepBackEnd
		}
		transition InTargetProximityRadius(-0.2, false) == false
		{
			goto RipStepBackEnd
		}
		transition IsTimerUp(2)
		{
			action SetWalkBackMode(false)
			action SetLockFacing(false)
			action SetStandStill()
			action SetSpeedDirect(0.0)
			goto RipInit
		}
		transition HasArrived()
		{
			goto RipStepBackEnd
		}
	}

	state RipStepBackEnd
	{
		action SetWalkBackMode(false)
		action SetLockFacing(false)
		action SetStandStill()
		action SetSpeedDirect(0.0)
		transition
		{
			goto RipFacingAlign
		}
	}

	state RipInit
	{
		;//action LockMachine(true)
		action StopLook()
		transition
		{
			action SetRandomTimerBetween(3, 1.0, 1.0)
			goto WaitLookEnd
		}
	}

	state WaitLookEnd
	{
		transition IsTimerUp(3)
		{
			goto RipStart
		}
	}

	state RipStart
	{
		action SendEnclosureEvent("feeding_meat")
		action StopLook()
		action SetAutoMovementBlend(false)
		action PlayAnim("eat", "md_lp", false)
		action SetRandomTimerBetween(3, 0.8, 0.8)
		action SetStandStill()
		transition
		{
			goto RipWait
		}
	}

	state RipWait
	{
		transition IsTimerUp(3)
		{
			goto RipChewWait
		}
	}

	state RipChewWait
	{
		transition IsAnimPlaying("eat", "md_lp", false) == false
		{
			action PlayAnim("idle", "chew_lp", false)
			goto ChewWait
		}
	}

	state ChewWait
	{
		;//action UpdateDeltaVariable("FoodEnergy", 0.03)
		action CarnEatTarget(false)
		action UpdateDeltaVariable("Stress", -0.1)
		transition IsAnimPlaying("idle", "chew_lp", false) == false
		{
			action DestroyActionUnit()

			action SetAutoMovementBlend(true)
			action SetRandomTimerBetween(3, 4.0, 6.0)
			action StartLook("LookProximity", 0.5)
			goto ChewLook
		}
	}

	state ChewLook
	{
		transition IsTimerUp(3)
		{
			direct goto ReacquireTarget
		}
	}
	state ReacquireTarget
	{
		;//action LockMachine(false)
/*		transition AcquireTarget("food")
		{
			direct goto ReacquireDeadCheck
		}
		transition
		{
			goto EatExitStart
		}
	}

	state ReacquireDeadCheck
	{
		transition IsTargetDead()
*/
		transition GetVariable("foodenergy") > 0.9
		{
			goto EatExitStart
		}
		transition IsTargetEdible()
		{
			goto SeekTargetStart
		}
		transition
		{
			goto EatExitStart
		}
	}

;//------------------------ Exit States Begin ----------------------
	exitstart state EatExitStart
	{
		transition IsAnimPlaying("eat", "md_lp", false)
		{
			goto EatExitLoop
		}
		transition IsAnimPlaying("idle", "chew_lp", false)
		{
			goto EatExitLoop
		}
		transition
		{
			goto EatExitEnd
		}
	}

	state EatExitLoop
	{
		transition IsAnimPlaying("eat", "md_lp", false) == false
		{
			goto EatExitLoop2
		}
	}
	state EatExitLoop2
	{
		transition IsAnimPlaying("idle", "chew_lp", false) == false
		{
			goto EatExitEnd
		}
	}
	
	exitend state EatExitEnd
	{
		;//action LockMachine(false)
		action SetLockFacing(false)
		action SetWalkBackMode(false)
		action DestroyActionUnit()

		action SetAutoMovementBlend(true)
		action SetFlockImpulse(true)
		;//action SetAesPosInterp(true)
	}
}