import class AIbehaviortaskStackScript extends AIBehaviorScriptBase
{

	public export virtual function GetInstanceTypeName() : CName
	{
		return '';
	}

}

struct TestStackScriptData
{
	var testVar : Int32;
	var anotherVar : CName;
}

class TestStackScript extends AIbehaviortaskStackScript
{

	public override function GetInstanceTypeName() : CName
	{
		return 'script_ref:TestStackScriptData';
	}

	public function OnActivate( context : ScriptExecutionContext, data : ref< TestStackScriptData > )
	{
		data.testVar = 1337;
		data.anotherVar = 'mySuperName';
	}

	public function OnDeactivate( context : ScriptExecutionContext, data : ref< TestStackScriptData > )
	{
		data.testVar = 0;
		data.anotherVar = '';
	}

	public function OnUpdate( context : ScriptExecutionContext, data : ref< TestStackScriptData > ) : AIbehaviorUpdateOutcome
	{
		data.testVar += 1;
		return AIbehaviorUpdateOutcome.IN_PROGRESS;
	}

	public function GetDescription( data : ref< TestStackScriptData > ) : String
	{
		return NameToString( data.anotherVar ) + ( ( String )( data.testVar ) );
	}

}

import abstract class AIbehaviorPassiveExpressionDefinition extends IScriptable
{
}

import class AIbehaviorStackScriptPassiveExpressionDefinition extends AIbehaviorPassiveExpressionDefinition
{
	public import function MarkDirty( context : ref< ScriptExecutionContext > );
	public import function AddToUpdateQueue( context : ref< ScriptExecutionContext > ) : Bool;
	public import function RemoveFromUpdateQueue( context : ref< ScriptExecutionContext > ) : Bool;
	public import function AddBehaviorCallback( context : ref< ScriptExecutionContext >, callbackName : CName ) : Uint32;
	public import function RemoveBehaviorCallback( context : ref< ScriptExecutionContext >, callbackId : Uint32 ) : Bool;
	public import function ListenToSignal( context : ref< ScriptExecutionContext >, signalName : CName ) : Uint16;
	public import function StopListeningToSignal( context : ref< ScriptExecutionContext >, signalId : Uint16 ) : Bool;
}

class TestStackPassiveExpression extends AIbehaviorStackScriptPassiveExpressionDefinition
{
	editable var SomeNameProperty : CName;

	public function CalculateValue( context : ScriptExecutionContext, data : ref< TestStackScriptData > ) : Variant
	{
		return true;
	}

}

