import processing.core.PApplet; import java.util.ArrayDeque; class ProjectorApplet extends PApplet { final int projectorScreenNumber = 2; final static int centerX = 860; final static int centerY = 540; int bgColor = color(0, 0, 0); EuglenaApplet parent; Calibrator calibrator; ArrayDeque commandQueue; ProjectorApplet(EuglenaApplet parent) { this.parent = parent; calibrator = new Calibrator(this); commandQueue = new ArrayDeque<>(); } public void settings() { fullScreen(P2D, this.projectorScreenNumber); } @Override public void setup() { clear(); smooth(); // calibrator.activate(); //for testing } @Override public void draw() { calibrator.draw(parent); while (!commandQueue.isEmpty()) { ProjectorCommand command = commandQueue.getFirst(); if (command.run(this)) { commandQueue.removeFirst(); } else { break; } } } public void clear() { fill(bgColor); noStroke(); rectMode(CORNER); rect(0, 0, width * 4, height * 4); } public void setBgColor(int c) { bgColor = c; } public void setBgColor(int r, int b, int g) { bgColor = color(r, g, b); } public int getBgColor() { return bgColor; } public float convertXCoord(float x) { return (x / calibrator.magx + width * calibrator.offsetx); } public float convertYCoord(float y) { return (y / calibrator.magy + height * calibrator.offsety); } public float convertXDistance(float dx) { return (dx / calibrator.magx); } public float convertYDistance(float dy) { return (dy / calibrator.magy); } }