package org.openpixi.pixi.distributed.movement.boundary;

import org.openpixi.pixi.distributed.SharedData;
import org.openpixi.pixi.physics.particles.Particle;
import org.openpixi.pixi.physics.force.Force;
import org.openpixi.pixi.physics.movement.boundary.ParticleBoundary;
import org.openpixi.pixi.physics.solver.Solver;

/**
 *  Registers the leaving particles (particles which are crossing to neighbors).
 */
public class BoundaryGate extends ParticleBoundary {

	private SharedData sharedData;


	public BoundaryGate(double xoffset, double yoffset, SharedData sharedData) {
		super(xoffset, yoffset);
		this.sharedData = sharedData;
	}


	@Override
	public void apply(Solver solver, Force force, Particle particle, double timeStep) {
		// Translate the position of the particle to match the position at the remote node.
		particle.addX(-xoffset);
		particle.addPrevX(-xoffset);
		particle.addY(-yoffset);
		particle.addPrevY(-yoffset);
		sharedData.registerLeavingParticle(particle);
	}
}
