103 lines
3.5 KiB
Markdown
103 lines
3.5 KiB
Markdown
# Basalt Animations
|
|
|
|
Basalt provides a powerful animation system that allows you to create smooth transitions and effects for UI elements.
|
|
|
|
## Basic Concepts
|
|
|
|
Animations in Basalt work with:
|
|
- **Sequences**: Groups of animations that play one after another
|
|
- **Chains**: Multiple sequences that can be controlled together
|
|
- **Timing**: Control over duration and easing of animations
|
|
|
|
`element:animate()` creates a new Animation object. Each animation method accepts a duration parameter (in seconds).
|
|
|
|
### Core Animation Methods
|
|
```lua
|
|
element:animate()
|
|
:move(x, y, duration) -- Animate move
|
|
:moveOffset(x, y, duration) -- Animate offset
|
|
:resize(w, h, duration) -- Animate size
|
|
:number(property, targetNumber, duration) -- Animate number
|
|
:entries(property, entryList, duration) -- Cycles through a list of values (e.g. colors, text) for any property over the specified duration
|
|
:morphText(property, targetText, duration) -- Animate text
|
|
:typewrite(property, targetText, duration) -- Animate text
|
|
:fadeText(property, targetText, duration) -- Animate text
|
|
:scrollText(property, targetText, duration) -- Animate text
|
|
```
|
|
|
|
### Animation Control
|
|
```lua
|
|
local anim = element:animate()
|
|
:moveOffset(5, 0, 1)
|
|
:start() -- Start the animation
|
|
|
|
anim:pause() -- Pause animation
|
|
anim:resume() -- Resume animation
|
|
anim:stop() -- Stop animation
|
|
```
|
|
|
|
## Understanding Sequences
|
|
|
|
Sequences allow you to create complex animations by controlling when each animation plays. By default, all animations in a chain play simultaneously. Using `:sequence()` creates a new group that waits for the previous animations to complete.
|
|
|
|
### Basic Example
|
|
```lua
|
|
-- Without sequences (animations play at the same time):
|
|
element:animate()
|
|
:move(10, 5, 1) -- These three animations
|
|
:resize(5, 5, 1) -- all start and play
|
|
:morphText("text", "newText" 1) -- simultaneously
|
|
:start()
|
|
|
|
-- With sequences (animations play one after another):
|
|
element:animate()
|
|
:move(10, 5, 1) -- Plays first
|
|
:sequence()
|
|
:resize(5, 5, 1) -- Starts after position completes
|
|
:sequence()
|
|
:morphText("text", "newText" 1) -- starts after resizing completes
|
|
:start()
|
|
```
|
|
|
|
### Advanced Usage
|
|
```lua
|
|
-- Complex movement pattern
|
|
element:animate()
|
|
:move(10, 5, 0.5) -- Move right
|
|
:sequence()
|
|
:move(10, 10, 0.5) -- Then down
|
|
:sequence()
|
|
:move(5, 10, 0.5) -- Then left
|
|
:sequence()
|
|
:move(5, 5, 0.5) -- Then up
|
|
:onDone(function()
|
|
-- Called when entire sequence completes
|
|
end)
|
|
:start()
|
|
|
|
-- Mixing simultaneous and sequential animations
|
|
element:animate()
|
|
-- These two happen together
|
|
:move(10, 5, 1)
|
|
:morphText("text", "newText" 1) -- simultaneously
|
|
:sequence()
|
|
-- These two also happen together, but after the first group
|
|
:move(5, 5, 1)
|
|
:morphText("text", "anotherText" 1) -- simultaneously
|
|
:start()
|
|
```
|
|
|
|
### Callbacks
|
|
```lua
|
|
element:animate()
|
|
:moveOffset(5, 0, 1)
|
|
:onStart(function() end) -- When animation starts
|
|
:onDone(function() end) -- When animation completes
|
|
:onStep(function() end) -- Every animation step
|
|
:start()
|
|
```
|
|
|
|
## Tips & Best Practices
|
|
- Use sequences for complex animations
|
|
- Keep duration times reasonable (0.1-2 seconds)
|
|
- Consider using callbacks for state management |