Skip to content

Commit

Permalink
feat: damp2,3,4,E,C
Browse files Browse the repository at this point in the history
  • Loading branch information
drcmda committed Sep 23, 2022
1 parent fecfdc4 commit 3f4b6d2
Showing 1 changed file with 102 additions and 0 deletions.
102 changes: 102 additions & 0 deletions packages/maath/src/easing.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
import {
Vector2,
Vector3,
Vector4,
Euler,
Color,
ColorRepresentation,
} from "three";
import { deltaAngle } from "./misc";

/**
Expand Down Expand Up @@ -79,3 +87,97 @@ export function dampAngle(
eps
);
}

let a, b, c;
const v2d = /*@__PURE__*/ new Vector2();
export function damp2(
current: Vector2,
target: number | [x: number, y: number] | Vector2,
smoothTime: number,
delta: number,
maxSpeed: number,
easing?: (t: number) => number,
eps?: number
) {
if (typeof target === "number") v2d.setScalar(target);
else if (Array.isArray(target)) v2d.set(target[0], target[1]);
else v2d.copy(target);
a = damp(current, "x", v2d.x, smoothTime, delta, maxSpeed, easing, eps);
b = damp(current, "y", v2d.y, smoothTime, delta, maxSpeed, easing, eps);
return a || b;
}

const v3d = /*@__PURE__*/ new Vector3();
export function damp3(
current: Vector3,
target: number | [x: number, y: number, z: number] | Vector3,
smoothTime: number,
delta: number,
maxSpeed: number,
easing?: (t: number) => number,
eps?: number
) {
if (typeof target === "number") v3d.setScalar(target);
else if (Array.isArray(target)) v3d.set(target[0], target[1], target[2]);
else v3d.copy(target);
a = damp(current, "x", v3d.x, smoothTime, delta, maxSpeed, easing, eps);
b = damp(current, "y", v3d.y, smoothTime, delta, maxSpeed, easing, eps);
c = damp(current, "z", v3d.z, smoothTime, delta, maxSpeed, easing, eps);
return a || b || c;
}

const v4d = /*@__PURE__*/ new Vector4();
export function damp4(
current: Vector4,
target: number | [x: number, y: number, z: number, w: number] | Vector4,
smoothTime: number,
delta: number,
maxSpeed: number,
easing?: (t: number) => number,
eps?: number
) {
if (typeof target === "number") v4d.setScalar(target);
else if (Array.isArray(target))
v4d.set(target[0], target[1], target[2], target[3]);
else v4d.copy(target);
a = damp(current, "x", v3d.x, smoothTime, delta, maxSpeed, easing, eps);
b = damp(current, "y", v3d.y, smoothTime, delta, maxSpeed, easing, eps);
c = damp(current, "z", v3d.z, smoothTime, delta, maxSpeed, easing, eps);
return a || b || c;
}

const rot = /*@__PURE__*/ new Euler();
export function dampE(
current: Euler,
target: [x: number, y: number, z: number, order?: string] | Euler,
smoothTime: number,
delta: number,
maxSpeed: number,
easing?: (t: number) => number,
eps?: number
) {
if (Array.isArray(target))
rot.set(target[0], target[1], target[2], target[3]);
else rot.copy(target);
a = dampAngle(current, "x", rot.x, smoothTime, delta, maxSpeed, easing, eps);
b = dampAngle(current, "y", rot.y, smoothTime, delta, maxSpeed, easing, eps);
c = dampAngle(current, "z", rot.z, smoothTime, delta, maxSpeed, easing, eps);
return a || b || c;
}

const col = /*@__PURE__*/ new Color();
export function dampC(
current: Color,
target: ColorRepresentation,
smoothTime: number,
delta: number,
maxSpeed: number,
easing?: (t: number) => number,
eps?: number
) {
col.set(target);
a = damp(current, "r", col.r, smoothTime, delta, maxSpeed, easing, eps);
b = damp(current, "g", col.g, smoothTime, delta, maxSpeed, easing, eps);
c = damp(current, "b", col.b, smoothTime, delta, maxSpeed, easing, eps);
return a || b || c;
}

0 comments on commit 3f4b6d2

Please sign in to comment.