40 lines
837 B
Go
40 lines
837 B
Go
package ui
|
|
|
|
import (
|
|
"math"
|
|
"time"
|
|
)
|
|
|
|
type Tween struct {
|
|
startVal int32
|
|
startTime time.Time
|
|
dif int32
|
|
dur time.Duration
|
|
}
|
|
|
|
func NewTween(startVal, endVal int32, duration time.Duration) *Tween {
|
|
return &Tween{
|
|
startVal: startVal,
|
|
dif: endVal - startVal,
|
|
dur: duration,
|
|
startTime: time.Now().Round(time.Millisecond),
|
|
}
|
|
}
|
|
|
|
func (t *Tween) CurVal() int32 {
|
|
since := time.Now().Round(time.Millisecond).Sub(t.startTime)
|
|
if since <= 0 {
|
|
return t.startVal
|
|
}
|
|
if since >= t.dur {
|
|
return t.startVal + t.dif
|
|
}
|
|
m := float32(since.Milliseconds()) / float32(t.dur.Milliseconds())
|
|
m = -1 * float32(math.Log10(-.9*float64(m)+1))
|
|
return t.startVal + int32(math.Round(float64(float32(t.dif)*m)))
|
|
}
|
|
|
|
func (t *Tween) Ended() bool {
|
|
return time.Now().Round(time.Millisecond).Sub(t.startTime) >= t.dur
|
|
}
|