> For the complete documentation index, see [llms.txt](https://godot-essentials.gitbook.io/addons-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://godot-essentials.gitbook.io/addons-documentation/autoload/helpers.md).

# Helpers

This plugin provides a global singleton named Helpers to contain all the stuff that can be shared globally and can be useful in your game.

## Normalize vector

Normalize the vector only if it's not normalized. Returns the vector&#x20;

`GodotEssentialsHelpers.normalize_vector(Vector2(30, -40))`

## Normalize diagonal vector

A diagonal vector requires additional treatment, which can be applied using this function.

`GodotEssentialsHelpers.normalize_diagonal_vector(Vector2(-0.7444, 0.7444))`

## Is diagonal direction

Performs a basic check and returns whether the direction passed as a parameter is diagonal. This function is used internally by the `normalize_diagonal_vector` function.

`GodotEssentialsHelpers.is_diagonal_direction(Vector2(1, -1))`

## Generate random direction

Simple random Vector2 direction generator, use this function if you need a random direction in some behaviour of your game. The result **is normalized**

<pre class="language-python"><code class="lang-python"><strong>look_at(self.global_position + GodotEssentialsHelpers.generate_random_direction())
</strong></code></pre>

## Generate random angle

Generate a random angle between a range provided, the unit is on degrees

```python
# Between 90º and 120º
GodotEssentialsHelpers.generate_random_angle(90, 120) # 117º
```

## Generate random directions from an origin Vector2

This function generate a `n` random directions in a `Array[Vector2]` format from an starting vector point defining the min and max angles:

<pre class="language-python"><code class="lang-python"># 5 Random directions from Vector down (0, 1) between 90º and 180º
<strong>GodotEssentialsHelpers.generate_random_directions_on_angle_range(Vector2.DOWN, 90, 180, 5)
</strong>
# 25 random directions from the actual player global position between 0 and 360º
GodotEssentialsHelpers.generate_random_directions_on_angle_range(player.global_position, 0, 360, 25)
</code></pre>

## :ice\_cream: Frame Freeze

To achieve a slow-motion effect you can use this function that receives the **time scale** *(as time goes by frame by frame)* and **the duration of the freeze** in seconds.

```python
# Time scale 0.05
# Duration 0.5 sec
GodotEssentialsHelpers.frame_freeze(0.05, 0.5)
```

Here you can see an example that trigger a frame freeze when a character jumps:

```python
func handle_jump():
	if Input.is_action_just_pressed("jump"):
		velocity_component_2d.jump()
		GodotEssentialsHelpers.frame_freeze(0.05, 1)
```

<figure><img src="https://1059887051-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWThJkY8CZ3qBkgyzYFBw%2Fuploads%2Fl6b9rZdcnrqQwp5MpKkc%2Fframe_freeze_example.gif?alt=media&amp;token=e24a509e-1248-4d12-a2a2-cf82b6294282" alt="" width="375"><figcaption><p>Frame freeze example 1 sec</p></figcaption></figure>

## Generate random string

You can use this function to generate a random string with a specified length and character list, which is set to its default value of `"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"`

For instance, you can utilize this function to create invitation codes for your multiplayer rooms:

```python
var invitation_code: String = GodotEssentialsHelpers.generate_random_string(4, "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") # YMZ2
```

### Validate an url

As the String class from Godot lack this validation you can use the following one:

```python
GodotEssentialsHelpers.is_valid_url("https://example.com") # true
```

### Signals

**frame\_freezed** signal is emitted when the effect starts in case you want to listen to it to perform other actions such as triggering animations.

&#x20;Here you can see a basic example:

```python
func _ready():
	GodotEssentialsHelpers.frame_freezed.connect(on_frame_freezed)

func on_frame_freezed():
	animated_sprite.play("juicy_hurt")
	 ...
```
