importonly abstract class gameIScriptableSystemsContainer extends IGameSystem
{
}

importonly class ScriptableSystemsContainer extends gameIScriptableSystemsContainer
{
	public import function Get( systemName : CName ) : ScriptableSystem;
	public import function QueueRequest( request : ScriptableSystemRequest );
}

importonly class ScriptableSystemRequest extends IScriptable
{
	public import function Cancel();
}

importonly class PlayerScriptableSystemRequest extends ScriptableSystemRequest
{
	import var owner : weak< GameObject >;
}

importonly class PlayerAttachRequest extends PlayerScriptableSystemRequest
{
}

importonly class PlayerDetachRequest extends PlayerScriptableSystemRequest
{
	import var ownerID : EntityID;
}

importonly abstract class IScriptableSystem extends IScriptable
{
}

import class ScriptableSystem extends IScriptableSystem
{
	public import const function QueueRequest( request : ScriptableSystemRequest );
	protected import const function GetGameInstance() : GameInstance;
	public import function WasRestored() : Bool;
	private export virtual function OnAttach();
	private export virtual function OnDetach();
	private export virtual function OnRestored( saveVersion : Int32, gameVersion : Int32 );

	private export virtual function IsSavingLocked() : Bool
	{
		return false;
	}

}

