Skip to content

# Circle Movement

A circle movement makes a circular trajectory around a center point.

The center can either be some fixed coordinates or a possibly moving map entity.

## Methods Inherited from `movement`

Circle movements are particular movement objects. Therefore, they inherit all methods from the type movement.

See movement to know these methods.

## Methods of the type `circle_movement`

The following methods are specific to circle movements.

### `circle_movement:get_center()`

Returns the center point of this movement.

Return value 1 (number)
  X coordinate of the center.
Return value 2 (number)
  Y coordinate of the center.

### `circle_movement:set_center(x, y)`

Sets the center of this movement as a fixed point.

`x` (number)
  X coordinate of the center.
`y` (number)
  Y coordinate of the center.

### `circle_movement:set_center(entity, [dx, dy])`

Sets the center of this movement as a map entity (only during a game).

`entity` (entity)
  The center entity.
`dx` (number, optional)
  X offset to add to the center entity's coordinates (default `0`).
`dy` (number, optional)
  Y offset to add to the center entity's coordinates (default `0`).

### `circle_movement:get_radius()`

Returns the radius of circles to make.

If `circle_movement:get_radius_speed()` is not `0`, radius changes are made gradually.

Return value (number)
  The wanted radius in pixels.

### `circle_movement:set_radius(radius)`

Sets the radius of circles to make.

If `circle_movement:get_radius_speed()` is not `0`, the radius will be updated gradually.

`radius` (number)
  The new wanted radius in pixels.

### `circle_movement:get_radius_speed()`

Returns the speed of radius changes.

Return value (number)
  The speed in pixels per second, or `0` if radius changes are immediate.

### `circle_movement:set_radius_speed(radius_speed)`

Sets the radius to be updated immediately of gradually (at the specified speed) towards its wanted value.

`radius_speed` (number)
  The speed of radius changes in pixels per second, or `0` to make radius changes immediate.

### `circle_movement:is_clockwise()`

Returns whether circles are made clockwise or counter-clockwise.

Return value (boolean)
  `true` if circles are clockwise.

### `circle_movement:set_clockwise([clockwise])`

Sets whether circles are made clockwise or counter-clockwise.

`clockwise` (boolean, optional)
  `true` to make circles clockwise. No value means `true`.

### `circle_movement:get_angle_from_center()`

Returns the angle indicating the current position on the circle.

This is the angle of the vector between the center and the current position.

Return value (number)
  The angle in radians.

### `circle_movement:set_angle_from_center(angle_from_center)`

Sets the position on the circle as an angle from its center.

This is the angle of the vector between the center and the new position to set.

`initial_angle` (number)
  The angle in radians.

### `circle_movement:get_angular_speed()`

Returns the speed of the angle variation.

Return value (number)
  The angle speed in radians per second.

### `circle_movement:set_angular_speed(angular_speed)`

Sets the speed of the angle variation.

`angular_speed` (number)
  The new angle speed in radians per second.

### `circle_movement:get_max_rotations()`

Returns the maximum number of rotations of this movement.

When this number of rotations is reached, the movement stops.

Return value (number)
  The maximum number of rotations to make (`0` means ∞).

### `circle_movement:set_max_rotations(max_rotations)`

Sets the maximum number of rotations of this movement.

When this number of rotations is reached, the movement stops.

`max_rotations` (number)
  The maximum number of rotations to make (`0` means ∞).

Note

The movement stops itself by setting its radius to 0.

Therefore, if the radius is set to change gradually (see `circle_movement:get_radius_speed()`), the movement will continue for a while until the radius reaches 0.

Note

When the movement has stopped, it restarts later if it was set to loop (see `circle_movement:get_loop_delay()`), and again, possibly gradually.

### `circle_movement:get_duration()`

Returns the maximum duration of this movement.

When this delay is reached, the movement stops.

Return value (number)
  The duration of the movement in milliseconds (`0` means infinite).

### `circle_movement:set_duration(duration)`

Sets the maximum duration of this movement.

When this delay is reached, the movement stops.

`duration` (number)
  The duration of the movement in milliseconds (`0` means infinite).

Note

The movement is stopped by automatically setting its radius to `0`.

Therefore, if the radius is set to change gradually (see `circle_movement:get_radius_speed()`), the movement will continue for a while until the radius reaches `0`.

Note

When the movement has stopped, it will then restart if it was set to loop (see `circle_movement:set_loop_delay()`), and again, possibly gradually.

### `circle_movement:get_loop_delay()`

Returns the delay after which this movement restarts.

Return value (number)
  The restart delay in milliseconds (`0` means no restart).

### `circle_movement:set_loop_delay(loop_delay)`

Sets the delay after which this movement restarts.

`loop_delay` (number)
  The restart delay in milliseconds (`0` means no restart).

Note

This delay is applied if the movement get stopped by reaching the maximum number of rotations or the maximum duration.

Note

When the movement restarts, the radius starts from 0 and gets back to its previous value, possibly gradually (see `circle_movement:set_radius_speed()`).

## Events Inherited from `movement`

Circle movements are particular movement objects. Therefore, they inherit all events from the type movement.

See movement to know these events.

## Deprecated methods of the type circle movement

The following methods are deprecated and may be removed it future releases.

### `circle_movement:get_initial_angle()`

Returns the angle from where the first circle starts.

Return value (number)
  The initial angle in degrees.

Deprecated

This method is deprecated since Solarus 1.6 because angle functions now all use radians for consistency.

Use `circle_movement:get_angle_from_center()` instead.

### `circle_movement:set_initial_angle(initial_angle)`

Sets the angle from where the first circle should start.

`initial_angle` (number)
  The initial angle in degrees.

Deprecated

This method is deprecated since Solarus 1.6 because angle functions now all use radians for consistency.

Use `circle_movement:set_angle_from_center()` instead.

### `circle_movement:get_angle_speed()`

Returns the speed of the angle variation.

Return value (number)
  The angle speed in degrees per second.

Deprecated

This method is deprecated since Solarus 1.6 because angle functions now all use radians for consistency.

Use `circle_movement:get_angular_speed()` instead.

### `circle_movement:set_angle_speed(angle_speed)`

Sets the speed of the angle variation.

`angle_speed` (number)
  The new angle speed in degrees per second.

Deprecated

This method is deprecated since Solarus 1.6 because angle functions now all use radians for consistency.

Use `circle_movement:set_angular_speed()` instead.

April 1, 2025