importonly abstract class IDeviceSystem extends IGameSystem
{
}

importonly final class DeviceSystem extends IDeviceSystem
{
	public import const function GetNodePosition( entityID : EntityID, out position : Vector4 ) : Bool;
	public import const function GetAllAncestors( entityID : EntityID, out outDevices : array< DeviceComponentPS > );
	public import const function GetParents( entityID : EntityID, out outDevices : array< DeviceComponentPS > );
	public import const function GetChildren( entityID : EntityID, out outDevices : array< DeviceComponentPS > );
	public import const function GetAllDescendants( entityID : EntityID, out outDevices : array< DeviceComponentPS > );
	public import const function GetLazyAllAncestors( entityID : EntityID, out outDevices : array< LazyDevice > );
	public import const function GetLazyParents( entityID : EntityID, out outDevices : array< LazyDevice > );
	public import const function GetLazyChildren( entityID : EntityID, out outDevices : array< LazyDevice > );
	public import const function GetLazyAllDescendants( entityID : EntityID, out outDevices : array< LazyDevice > );
	public import const function HasAnyAncestor( entityID : EntityID ) : Bool;
	public import const function HasAnyParent( entityID : EntityID ) : Bool;
	public import const function HasAnyChild( entityID : EntityID ) : Bool;
	public import const function HasAnyDescendant( entityID : EntityID ) : Bool;
	public import function AddDynamicConnection( deviceEntityID : PersistentID, deviceClassName : CName, parentEntityID : PersistentID, parentClassName : CName );
	public import function RemoveDynamicConnection( deviceEntityID : PersistentID, parentEntityID : PersistentID );
	public import const function DEBUG_GetAncestorsData( entityID : EntityID, out outDevicesData : array< DeviceRef > );
	public import const function DEBUG_GetParentsData( entityID : EntityID, out outDevicesData : array< DeviceRef > );
	public import const function DEBUG_GetChildrenData( entityID : EntityID, out outDevicesData : array< DeviceRef > );
	public import const function DEBUG_GetDescendantsData( entityID : EntityID, out outDevicesData : array< DeviceRef > );
}

importonly final struct DeviceRef
{
	import const var nodeRef : NodeRef;
	import const var deviceClassName : CName;
}

importonly final class DeviceDynamicConnectionChange extends Event
{
}

importonly final class LazyDevice extends IScriptable
{
	public import const function ExtractDevice( game : GameInstance ) : DeviceComponentPS;
	public import const function GetPersistentID() : PersistentID;
}

