# onDraw

This event works similarly to [onUpdate](https://wiki.redmodding.org/cyber-engine-tweaks/cet-functions/events/onupdate), except that it is used for drawing custom ImGui UI. It gets triggered on every frame that the game runs, thus is framerate dependent.

{% hint style="warning" %}
Use this event with caution, as it is triggered continuously once the game is launched.
{% endhint %}

{% hint style="danger" %}
Trying to draw ImGui UI outside this callback is prohibited
{% endhint %}

## Usage Example

#### Render an ImGui window at anytime:

{% code title="init.lua" %}

```lua
registerForEvent('onDraw', function()

    if ImGui.Begin('Window Title', ImGuiWindowFlags.AlwaysAutoResize) then
        ImGui.Text('Hello World!')
    end
    
    ImGui.End()
    
end)
```

{% endcode %}

## Advanced Example

#### Render an ImGui window when the player is sprinting:

{% hint style="info" %}
This example use [observers](https://wiki.redmodding.org/cyber-engine-tweaks/cet-functions/observers). Check the [documentation](https://wiki.redmodding.org/cyber-engine-tweaks/cet-functions/observers) for further information on its usage.
{% endhint %}

{% code title="init.lua" %}

```lua
-- set initial switch
isSprinting = false

-- onInit
registerForEvent('onInit', function()
    
    -- observe Sprint OnEnter state
    Observe('SprintEvents', 'OnEnter', function(stateContext, scriptInterface)
        isSprinting = true
    end)
    
    -- observe Sprint OnExit state
    Observe('SprintEvents', 'OnExit', function(stateContext, scriptInterface)
        isSprinting = false -- reset switch
    end)

end)

-- onDraw
registerForEvent('onDraw', function()
    
    -- bail early if not sprinting
    if not isSprinting then
        return
    end
    
    -- draw window
    if ImGui.Begin('Notification', ImGuiWindowFlags.AlwaysAutoResize) then
        ImGui.Text('Nice sprint!')
    end
    
    ImGui.End()
    
end)
```

{% endcode %}
