_computeSmashingForces(oEntity, aHitters) {
        const oDummy = oEntity.dummy;
        let vPos = oDummy.position;
        let x = vPos.x;
        let y = vPos.y;
        let dist = Geometry.distance;
        return aHitters.map(m => {
            const oHitDummy = m.dummy;
            let mPos = oHitDummy.position;
            let mx = mPos.x;
            let my = mPos.y;
            const d = dist(x, y, mx, my);
            return oDummy.forceField.addForce(
                vPos.sub(mPos)
                    .normalize()
                    .scale( Math.max(0, (oDummy.radius + oHitDummy.radius - d) / 2)),
                0
            );
        });
    }
/**
     * For each specified hitter, adds a force that is proportional to the distance between the hitter and the dummy subject
     * @param oEntity {SmashingEntity} the subject whose forces will be applied to
     * @param aHitters {SmashingEntity[]} a collection of dummy reputed to overlap the dummy subject
     * @returns {Vector[]} a collection of resulting forces.
     */
For each specified hitter, adds a force that is proportional to the distance between the hitter and the dummy subject
@param oEntity {SmashingEntity} the subject whose forces will be applied to
@param aHitters {SmashingEntity[]} a collection of dummy reputed to overlap the dummy subject
@returns {Vector[]} a collection of resulting forces.
For each specified hitter adds a force that is proportional to the distance between the hitter and the dummy subject @param oEntity { SmashingEntity } the subject whose forces will be applied to @param aHitters { SmashingEntity [] } a collection of dummy reputed to overlap the dummy subject @returns { Vector [] } a collection of resulting forces .
_computeSmashingForces(oEntity, aHitters) {
        const oDummy = oEntity.dummy;
        let vPos = oDummy.position;
        let x = vPos.x;
        let y = vPos.y;
        let dist = Geometry.distance;
        return aHitters.map(m => {
            const oHitDummy = m.dummy;
            let mPos = oHitDummy.position;
            let mx = mPos.x;
            let my = mPos.y;
            const d = dist(x, y, mx, my);
            return oDummy.forceField.addForce(
                vPos.sub(mPos)
                    .normalize()
                    .scale( Math.max(0, (oDummy.radius + oHitDummy.radius - d) / 2)),
                0
            );
        });
    }
_computeSmashingForces ( oEntity , aHitters ) { const oDummy = oEntity . dummy ; let vPos = oDummy . position ; let x = vPos . x ; let y = vPos . y ; let dist = Geometry . distance ; return aHitters . map ( m => { const oHitDummy = m . dummy ; let mPos = oHitDummy . position ; let mx = mPos . x ; let my = mPos . y ; const d = dist ( x , y , mx , my ) ; return oDummy . forceField . addForce ( vPos . sub ( mPos ) . normalize ( ) . scale ( Math . max ( 0 , ( oDummy . radius + oHitDummy . radius - d ) / 2 ) ) , 0 ) ; } ) ; }
For each specified hitter, adds a force that is proportional to the distance between the hitter and the dummy subject
 @param oEntity {SmashingEntity} the subject whose forces will be applied to
 @param aHitters {SmashingEntity[]} a collection of dummy reputed to overlap the dummy subject
 @returns {Vector[]} a collection of resulting forces.
For each specified hitter adds a force that is proportional to the distance between the hitter and the dummy subject @param oEntity { SmashingEntity } the subject whose forces will be applied to @param aHitters { SmashingEntity [] } a collection of dummy reputed to overlap the dummy subject @returns { Vector [] } a collection of resulting forces .