lib/keyframes.js

/**
 * @module keyframes
 */
let ksys_id = 1;
/**
 * Represents a keyframe system in GD
 * @typedef {object} keyframe_system
 * @property {keyframe} keyframe Creates a single keyframe at a specific position
 * @property {start} start Starts a keyframe system
 * @property {number} anim_id ID of animation
 */
/**
 * Creates a single keyframe at a specific position
 * @callback keyframe
 * @param {number} x X position of keyframe
 * @param {number} y Y position of keyframe
 * @param {number} duration Duration of keyframe
 * @param {boolean} curve Whether to make the keyframe curved
 * @param {boolean} close Whether to set the keyframe as the last one + loop back to first keyframe
 * @param {easing} easing How smoothly the keyframe moves
 */
/**
 * Starts a keyframe system
 * @callback start
 */
/**
 * Creates a keyframe system
 * @param {group} group Group of objects to animate
 * @returns {keyframe_system}
 */
let keyframe_system = (gr, same = false) => {
    let ksys_gr = same ? gr : unknown_g();
    let oi = 0;
    let tksys_id = ksys_id;
    let o = {
        keyframe: (x, y, duration = 0.50, curve = false, close = false, easing = NONE) => {
            let o = object({
                OBJ_ID: 3032,
                X: x,
                Y: y,
                DURATION: duration,
                CURVE: curve,
                CLOSE_LOOP: close,
                GROUPS: ksys_gr,
                ANIM_ID: tksys_id,
                EASING: easing,
                524: 1,
                ACTIVE_TRIGGER: 1,
                155: 2
            });
            if (oi > 0) o.obj_props.ORDER_INDEX = oi;
            $.add(o);
            oi++;
        },
        start: () => {
            $.add(object({
                OBJ_ID: 3033,
                ANIMATION_GID: ksys_gr,
                TARGET: gr,
                TIME_MOD: 1,
                POSITION_X_MOD: 1,
                POSITION_Y_MOD: 1,
                ROTATION_MOD: 1,
                SCALE_X_MOD: 1,
                SCALE_Y_MOD: 1
            }));
        },
        anim_id: ksys_id
    };
    ksys_id++;
    return o
};
module.exports = keyframe_system;