behaviors_PositionLock.js

const Vector2D = require("../utils/Vector2D");
const SelfBehavior = require("./SelfBehavior");

/**
 * `PositionLock` is a `SelfBehavior` that constraints the position of a particle to a given point in space. 
 * It ignores any any energy loss and is a direct positional correction.
 * @extends {SelfBehavior}
 */
class PositionLock extends SelfBehavior {
    /**
     * Instantiates new `PositionLock`
     * @param {Vector2D} position locked position
     * @constructor
     */
    constructor(position) {
        super();
        this.position = position;
    }

    /**
     * @override
     * @param {Particle} particle 
     * @param {Number} timeStep 
     */    
    applyBehavior(particle, timeStep) {
        return;
    }

     /**
     * @override
     * @param {Particle} particle 
     */
    applyCorrection(particle) {
        particle.vel = new Vector2D(0,0);
        particle.pos = this.position;
    }
}

module.exports = PositionLock;