# tweens.gd

Source: https://tweens.gd/

## New way to juice our games just dropped!

tweens.gd is a fully free and libre open source tweening system for the [Godot game engine](https://godotengine.org/).  
This addon aims for concise and consistent syntax, and more [flexible easing options](https://tweens.gd/easings/) than most.

### tweens.gd respects your time and your keycaps.

**C#:**

Godot's Tween

```csharp
var tween = sprite.CreateTween();
tween.TweenProperty(sprite, "position", new Vector2(400, 180), 0.6)
    .SetTrans(Tween.TransitionType.Cubic)
    .SetEase(Tween.EaseType.Out);

await ToSignal(tween, Tween.SignalName.Finished);
GD.Print("Arrived");
```

tweens.gd

```csharp
await sprite.TweenPosition((400, 180), 0.6, Out.Cubic).End;
GD.Print("Arrived");
```

**GDScript:**

Godot's Tween

```gdscript
var tween := sprite.create_tween()
tween.set_trans(Tween.TRANS_CUBIC)
tween.set_ease(Tween.EASE_OUT)
tween.tween_property(sprite, "position", Vector2(400, 180), 0.6)

await tween.finished
print("Arrived")
```

tweens.gd

```gdscript
var arrive := Tweens.position_2d([400, 180], 0.6, Out.CUBIC)

await Tweens.play(sprite, arrive).end
print("Arrived")
```

**C#:**

Godot's Tween

```csharp
var tween1 = sprite1.CreateTween();
tween1.TweenProperty(sprite1, "position", new Vector2(400, 180), 0.6)
    .SetTrans(Tween.TransitionType.Cubic)
    .SetEase(Tween.EaseType.Out);

var tween2 = sprite2.CreateTween();
tween2.TweenProperty(sprite2, "position", new Vector2(400, 180), 0.8)
    .SetTrans(Tween.TransitionType.Cubic)
    .SetEase(Tween.EaseType.Out);

var tween3 = sprite3.CreateTween();
tween3.TweenProperty(sprite3, "position", new Vector2(400, 180), 1.0)
    .SetTrans(Tween.TransitionType.Cubic)
    .SetEase(Tween.EaseType.Out);

await ToSignal(tween3, Tween.SignalName.Finished);
GD.Print("Arrived");
```

tweens.gd

```csharp
var arrive = new Tweens.Position2D((400, 180), 0.6, Out.Cubic);

sprite1.Tween(arrive);
sprite2.Tween(arrive with { Duration = 0.8 });
await sprite3.Tween(arrive with { Duration = 1.0 }).End;
GD.Print("Arrived");
```

**GDScript:**

Godot's Tween

```gdscript
var tween1 := sprite1.create_tween()
tween1.set_trans(Tween.TRANS_CUBIC)
tween1.set_ease(Tween.EASE_OUT)
tween1.tween_property(sprite1, "position", Vector2(400, 180), 0.6)

var tween2 := sprite2.create_tween()
tween2.set_trans(Tween.TRANS_CUBIC)
tween2.set_ease(Tween.EASE_OUT)
tween2.tween_property(sprite2, "position", Vector2(400, 180), 0.8)

var tween3 := sprite3.create_tween()
tween3.set_trans(Tween.TRANS_CUBIC)
tween3.set_ease(Tween.EASE_OUT)
tween3.tween_property(sprite3, "position", Vector2(400, 180), 1.0)

await tween3.finished
print("Arrived")
```

tweens.gd

```gdscript
var arrive := Tweens.position_2d([400, 180], 0.6, Out.CUBIC)

Tweens.play(sprite1, arrive)
Tweens.play(sprite2, arrive.with_duration(0.8))
await Tweens.play(sprite3, arrive.with_duration(1.0)).end
print("Arrived")
```

### Huh… what even is all this?

'Tweening' means...

…using code to animate nodes and resources, changing their properties like position or color over time by ~soft paws~ smooth functions called “easings.”

Whole game worlds can be animated this way, but your classic use cases are button clicks, squash and stretch effects, wiggles, hover, punches, fades, bounces, … [“juice it or lose it”.](https://www.youtube.com/watch?v=Fy0aCDmgnxg)

#### … may your ferrets be long, and your code always short!
