UNPKG

framer-motion-3d

Version:

A simple and powerful React animation library for @react-three/fiber

59 lines (56 loc) 1.69 kB
import { Vector3, Color, Euler } from 'three'; const setVector = (name, defaultValue) => (i) => (instance, value) => { if (instance[name] === undefined) { instance[name] = new Vector3(defaultValue); } const vector = instance[name]; vector.setComponent(i, value); }; const setEuler = (name, defaultValue) => (axis) => (instance, value) => { if (instance[name] === undefined) { instance[name] = new Euler(defaultValue); } const euler = instance[name]; euler[axis] = value; }; const setColor = (name) => (instance, value) => { if (instance[name] === undefined) { instance[name] = new Color(value); } instance[name].set(value); }; const setScale = setVector("scale", 1); const setPosition = setVector("position", 0); const setRotation = setEuler("rotation", 0); const setters = { x: setPosition(0), y: setPosition(1), z: setPosition(2), scale: (instance, value) => { if (instance.scale === undefined) { instance.scale = new Vector3(1); } const scale = instance.scale; scale.set(value, value, value); }, scaleX: setScale(0), scaleY: setScale(1), scaleZ: setScale(2), rotateX: setRotation("x"), rotateY: setRotation("y"), rotateZ: setRotation("z"), color: setColor("color"), specular: setColor("specular"), }; function setThreeValue(instance, key, values) { if (key in setters) { setters[key](instance, values[key]); } else { if (key === "opacity" && !instance.transparent) { instance.transparent = true; } instance[key] = values[key]; } } export { setThreeValue };