API reference
API reference
Select your platform
No SDKs available
No versions available

IsdkSystem Class

Extends SystemBase
Modifiers: final
The IsdkSystem class is responsible for managing and executing the core interaction logic within the ISDK framework. Each frame, it will:
  • Updates the Isdk component properties from Spatial SDK toolkit equivalents
  • Execute interaction logic
  • Emit pointer events to the scene.
  • Generate input events from PointerEvents, and emit them to the scene.
It also includes methods to enable debug tools, register for pointer events, and query for additional meta data about PointerEvents.

Signature

class IsdkSystem(val api: IsdkSystemNativeApi = IsdkSystemNativeApi()) : SystemBase

Constructors

IsdkSystem ( api )
Signature
constructor(api: IsdkSystemNativeApi = IsdkSystemNativeApi())
Parameters
api: IsdkSystemNativeApi  The native API that is invoked to execute the core interaction logic.
Returns
IsdkSystem

Properties

active : Boolean
[Get][Set]
Whether this system is currently processing input. When false, execute() returns early and no pointer events are dispatched to panels. The cursor system (if present) will also be disabled.
Can be used to temporarily disable panel input, for example when overlay controls are hidden during immersive playback.
Signature
var active: Boolean
[Get]
The native API that is invoked to execute the core interaction logic.
Signature
val api: IsdkSystemNativeApi
debugToolsEnabled : Boolean
[Get][Set]
Toggles visibility of debug geometry rendering by ISDK, which shows internal state of interactions. Debug visuals have significant performance cost, so this should only be enabled when debugging.
Signature
var debugToolsEnabled: Boolean
executeCount : Long
[Get]
The number of times this system's SystemBase.execute method has been called by the system manager. Incremented automatically before each execution cycle. Useful for performance monitoring.
Signature
var executeCount: Long
gazeEnabled : Boolean
[Get][Set]
Signature
var gazeEnabled: Boolean
hmdGazeFallbackEnabled : Boolean
[Get][Set]
Signature
var hmdGazeFallbackEnabled: Boolean
systemManager : SystemManager
[Get][Set]
The SystemManager that this system is registered with. Provides access to other systems and the scene. Initialized during system registration.
Signature
lateinit var systemManager: SystemManager
transformersEnabled : Boolean
[Get][Set]
Enables or disables transformers functionality in ISDK. When enabled, grabbed objects will move according to the behavior defined on the IsdkGrabbable/IsdkGrabConstraint components. When disabled, pointer events will still be emitted; but no transform will take place.
Signature
var transformersEnabled: Boolean

Methods

addTargetedRegionListener ( listener )
Registers a listener to receive gaze-targeted region events.
Signature
fun addTargetedRegionListener(listener: TargetedRegionListener)
Parameters
listener: TargetedRegionListener  The listener to register
associateSystemManager ( systemManager )
Associates this system with a SystemManager. Called during registration. Throws RuntimeException if the system is already associated — each system instance can only belong to one manager.
Signature
fun associateSystemManager(systemManager: SystemManager)
Parameters
systemManager: SystemManager  The system manager that will own and execute this system.
clearInteractableObservers ( entity )
Removes all observers for a specific entity, effectively stopping all pointer event notifications for that entity.
Signature
fun clearInteractableObservers(entity: Entity)
Parameters
entity: Entity  The entity to clear all observers for
clearUIRegions ( panelEntityId )
Clears all UI regions for a specific interactable.
Signature
fun clearUIRegions(panelEntityId: Long)
Parameters
panelEntityId: Long  The C++ instance ID of the interactable (panel)
delete ( entity )
Called when an IsdkSystem.delete is removed from the scene. Override to clean up any per-entity state this system maintains, such as cached components, tracking maps, or native resource handles.
Signature
open override fun delete(entity: Entity)
Parameters
entity: Entity
destroy ()
Called during system shutdown to release all resources held by this system. Override to dispose of native handles, close streams, and clear any global state accumulated during the session.
Signature
open override fun destroy()
enableDebugTools ( enable )
DeprecatedThis method is deprecated and will be removed in a future release. Use debugToolsEnabled field instead.
Signature
fun enableDebugTools(enable: Boolean)
Parameters
enable: Boolean
equals ( other )
Checks if this system is equal to another object. Two systems are considered equal if they are the same instance or share the same Kotlin class, regardless of configuration state.
Signature
open operator override fun equals(other: Any?): Boolean
Parameters
other: Any?  The object to compare with.
Returns
Boolean  True if the other object is the same system instance or the same system class.
execute ()
Called each frame by the SystemManager to perform this system's per-tick logic. Override to query entities with relevant components and apply updates.
Signature
open override fun execute()
getDependencies ()
Returns the execution ordering dependencies for this system. Override to declare which other systems must run before or after this one using SystemDependencies.
Signature
open override fun getDependencies(): SystemDependencies?
Returns
SystemDependencies?  The dependency configuration, or null if this system has no ordering constraints.
getEventDecoratorId ( decoratorName )
Signature
fun getEventDecoratorId(decoratorName: String): Long
Parameters
decoratorName: String
Returns
Long
getEventDecoratorValueLong ( pointerEvent , decoratorId )
Signature
fun getEventDecoratorValueLong(pointerEvent: PointerEvent, decoratorId: Long): Long?
Parameters
pointerEvent: PointerEvent
decoratorId: Long
Returns
Long?
getHandForPointerEvent ( pointerEvent )
Signature
fun getHandForPointerEvent(pointerEvent: PointerEvent): Hand?
Parameters
pointerEvent: PointerEvent
Returns
Hand?
getInteractionEventSourceBehavior ( pointerEvent )
Signature
fun getInteractionEventSourceBehavior(pointerEvent: PointerEvent): InteractionEventSourceBehavior?
Parameters
pointerEvent: PointerEvent
getScene ()
Returns the Scene that this system operates within. Delegates to the associated SystemManager to retrieve the active scene instance.
Signature
fun getScene(): Scene
Returns
Scene  The scene containing the entities and rendering state for this system.
getScenePointerDistance ()
Gets the current maximum distance for scene pointer interactions in meters.
Signature
fun getScenePointerDistance(): Float
Returns
Float  The current maximum distance in meters
hashCode ()
Returns the hash code of this system, based on its Kotlin class identity. Consistent with the SystemBase.equals implementation — systems of the same class produce the same hash code.
Signature
open override fun hashCode(): Int
Returns
Int  The hash code derived from this system's Kotlin class.
notifyObservers ( event )
Signature
fun notifyObservers(event: PointerEvent)
Parameters
registerExternalControllerInputHandler ( handler )
Register an ExternalControllerInputHandler instance, which is used to integrate ISDK with other systems that may be using the controllers. Can be used to disable ISDK input handling if the controllers are in use by another system.
Signature
fun registerExternalControllerInputHandler(handler: ExternalControllerInputHandler)
registerInteractableObserver ( entity , observer )
Registers an observer to receive pointer events for a specific interactable entity. The observer will be called whenever a pointer event occurs on the specified entity.
Signature
fun registerInteractableObserver(entity: Entity, observer: (PointerEvent) -> Unit): IsdkSystem.InteractableObserverHandle
Parameters
entity: Entity  The entity to observe pointer events for
observer: Function1  The callback function to invoke when pointer events occur on the entity
Returns
IsdkSystem.InteractableObserverHandle  A handle that can be used to unregister this specific observer
registerObserver ( observer )
Signature
fun registerObserver(observer: (PointerEvent) -> Unit)
Parameters
observer: Function1
removeTargetedRegionListener ( listener )
Unregisters a previously registered targeted region listener.
Signature
fun removeTargetedRegionListener(listener: TargetedRegionListener)
Parameters
listener: TargetedRegionListener  The listener to remove
setPanelCollisionPriority ( entity , priority )
Sets the collision priority for a panel identified by entity.
Higher priority values will win collision resolution when panels overlap at the same depth. This should be called after setting the layer zIndex to synchronize the ISDK collision system with the rendering layer order.
Signature
fun setPanelCollisionPriority(entity: Entity, priority: Float)
Parameters
entity: Entity  The panel entity
priority: Float  The collision priority (typically the layer's zIndex value)
setScenePointerDistance ( distance )
Sets the maximum distance for scene pointer interactions in meters. This controls how far from scene objects ray-based interactions can detect collisions.
Signature
fun setScenePointerDistance(distance: Float)
Parameters
distance: Float  The maximum distance in meters (must be positive)
unregisterExternalControllerInputHandler ( handler )
Unregister a previously registered ExternalControllerInputHandler instance
Signature
fun unregisterExternalControllerInputHandler(handler: ExternalControllerInputHandler)
unregisterInteractableObserver ( handle )
Unregisters a specific observer using its handle.
Signature
fun unregisterInteractableObserver(handle: IsdkSystem.InteractableObserverHandle)
Parameters
handle: IsdkSystem.InteractableObserverHandle  The handle returned from registerInteractableObserver
unregisterObserver ( observer )
Signature
fun unregisterObserver(observer: (PointerEvent) -> Unit)
Parameters
observer: Function1
updateUIRegionsPacked ( panelEntityId , regionCount , packedFloats , regionIds , flags )
Updates UI regions using packed primitive arrays for optimal JNI performance. This method reduces JNI overhead by passing data as primitive arrays instead of object arrays.
Signature
fun updateUIRegionsPacked(panelEntityId: Long, regionCount: Int, packedFloats: FloatArray, regionIds: LongArray, flags: IntArray)
Parameters
panelEntityId: Long  The entity ID of the panel
regionCount: Int  Number of regions in the arrays
packedFloats: FloatArray  Packed floats: 9 per region posX, posY, posZ, rotX, rotY, rotZ, rotW, width, height
regionIds: LongArray  Region IDs (1-indexed to avoid conflict with kSelfId = 0)
flags: IntArray  Bit-packed flags: bit 0 = clickable, bit 1 = focusable, bit 2 = scrollable

Inner Class

InteractableObserverHandle Class

Modifiers: final
Handle for managing interactable observer registrations

Signature

data class InteractableObserverHandle(val id: Long, val entityId: Long)

Constructors

InteractableObserverHandle ( id , entityId )
Signature
constructor(id: Long, entityId: Long)
Parameters
id: Long
entityId: Long
Returns
IsdkSystem.InteractableObserverHandle

Properties

entityId : Long
[Get]
Signature
val entityId: Long
id : Long
[Get]
Signature
val id: Long