Simulation API
The Simulation API
provides utility methods for interacting with the simulation environment directly from your UI TypeScript code. It's available within your UI TypeScript class (SimulationComponentUI
) through:
this.simulation.api.methodName();
Below is an overview of available methods:
Methods
triggerUIRefresh()
Triggers an immediate UI update. Use this method when the UI must immediately reflect changes in state variables or internal logic.
Example:
// After updating a visual property manually
this.simulation.api.triggerUIRefresh();
getComponentRotation(): number
Returns the rotation angle (in degrees) of the current component instance. Useful when implementing orientation-dependent UI behavior.
Example:
const rotation = this.simulation.api.getComponentRotation();
console.log(`Component rotation is ${rotation} degrees`);
addDocumentEventListener(type: string, listener: EventListenerOrEventListenerObject)
Adds a global event listener on the document, enabling advanced UI interactions beyond your component's immediate DOM scope.
Example:
// Listening for global mouse movements
this.simulation.api.addDocumentEventListener('mousemove', this.onGlobalMouseMove);
removeDocumentEventListener(type: string, listener: EventListenerOrEventListenerObject)
Removes a previously added global event listener, essential for cleanup to prevent memory leaks or unwanted behaviors.
Example:
// Removing global mouse move listener when component is destroyed
this.simulation.api.removeDocumentEventListener('mousemove', this.onGlobalMouseMove);
log(message: string, level?: LogLevelEnum)
Logs messages to the simulation environment, useful for debugging or providing runtime feedback.
Log Levels:
LogLevelEnum.INFO
(default)LogLevelEnum.WARN
LogLevelEnum.ERROR
Example:
this.simulation.api.log('Button pressed', LogLevelEnum.INFO);
Usage Example
Here's a practical example demonstrating multiple methods in action:
export class SimulationComponentUI extends AbstractSimulationComponentUI {
init() {
const rotation = this.simulation.api.getComponentRotation();
this.simulation.api.log(`Component rotation: ${rotation}`, LogLevelEnum.INFO);
this.simulation.api.addDocumentEventListener('click', this.handleDocumentClick);
}
handleDocumentClick = (event: MouseEvent) => {
this.simulation.api.log('Document clicked!', LogLevelEnum.INFO);
this.simulation.api.triggerUIRefresh();
}
destroy() {
this.simulation.api.removeDocumentEventListener('click', this.handleDocumentClick);
}
}
This demonstrates logging, event listening, and manual UI refresh.