math: add a new math.easing module (#13226)
parent
7c9cd855b4
commit
758d1f44ab
|
@ -0,0 +1,100 @@
|
|||
// Copyright (c) 2020-2022 Leah Lundqvist. All rights reserved.
|
||||
// Use of this source code is governed by a GPL license
|
||||
// that can be found in the LICENSE file.
|
||||
module math
|
||||
|
||||
pub type EasingFunction = fn (arg_1 f64) f64
|
||||
|
||||
pub enum EasingType {
|
||||
linear
|
||||
ease_in_quad
|
||||
ease_out_quad
|
||||
ease_in_out_quad
|
||||
ease_in_cubic
|
||||
ease_out_cubic
|
||||
ease_in_out_cubic
|
||||
ease_in_quart
|
||||
ease_out_quart
|
||||
ease_in_out_quart
|
||||
ease_in_quint
|
||||
ease_out_quint
|
||||
ease_in_out_quint
|
||||
}
|
||||
|
||||
fn linear(x f64) f64 {
|
||||
return x
|
||||
}
|
||||
|
||||
fn ease_in_quad(x f64) f64 {
|
||||
return x * x
|
||||
}
|
||||
|
||||
fn ease_out_quad(x f64) f64 {
|
||||
return x * (2.0 - x)
|
||||
}
|
||||
|
||||
fn ease_in_out_quad(x f64) f64 {
|
||||
return if x < .5 { 2.0 * x * x } else { -1.0 + (4.0 - 2.0 * x) * x }
|
||||
}
|
||||
|
||||
fn ease_in_cubic(x f64) f64 {
|
||||
return x * x * x
|
||||
}
|
||||
|
||||
fn ease_out_cubic(x f64) f64 {
|
||||
return (x - 1.0) * (x - 1.0) * (x - 1.0) + 1
|
||||
}
|
||||
|
||||
fn ease_in_out_cubic(x f64) f64 {
|
||||
return if x < .5 { 4.0 * x * x * x } else { (x - 1.0) * (2.0 * x - 2.0) * (2.0 * x - 2.0) + 1.0 }
|
||||
}
|
||||
|
||||
fn ease_in_quart(x f64) f64 {
|
||||
return x * x * x * x
|
||||
}
|
||||
|
||||
fn ease_out_quart(x f64) f64 {
|
||||
return 1.0 - (x - 1.0) * (x - 1.0) * (x - 1.0) * (x - 1.0)
|
||||
}
|
||||
|
||||
fn ease_in_out_quart(x f64) f64 {
|
||||
return if x < 0.5 {
|
||||
8.0 * x * x * x * x
|
||||
} else {
|
||||
1.0 - 8.0 * (x - 1.0) * (x - 1.0) * (x - 1.0) * (x - 1.0)
|
||||
}
|
||||
}
|
||||
|
||||
fn ease_in_quint(x f64) f64 {
|
||||
return x * x * x * x * x
|
||||
}
|
||||
|
||||
fn ease_out_quint(x f64) f64 {
|
||||
return 1.0 + (x - 1.0) * (x - 1.0) * (x - 1.0) * (x - 1.0) * (x - 1.0)
|
||||
}
|
||||
|
||||
fn ease_in_out_quint(x f64) f64 {
|
||||
return if x < 0.5 {
|
||||
16.0 * x * x * x * x * x
|
||||
} else {
|
||||
1.0 + 16.0 * (x - 1.0) * (x - 1.0) * (x - 1.0) * (x - 1.0) * (x - 1.0)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn easing(easingtype EasingType) EasingFunction {
|
||||
match easingtype {
|
||||
.linear { return linear }
|
||||
.ease_in_quad { return ease_in_quad }
|
||||
.ease_out_quad { return ease_out_quad }
|
||||
.ease_in_out_quad { return ease_in_out_quad }
|
||||
.ease_in_cubic { return ease_in_cubic }
|
||||
.ease_out_cubic { return ease_out_cubic }
|
||||
.ease_in_out_cubic { return ease_in_out_cubic }
|
||||
.ease_in_quart { return ease_in_quart }
|
||||
.ease_out_quart { return ease_out_quart }
|
||||
.ease_in_out_quart { return ease_in_out_quart }
|
||||
.ease_in_quint { return ease_in_quint }
|
||||
.ease_out_quint { return ease_out_quint }
|
||||
.ease_in_out_quint { return ease_in_out_quint }
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue