import proxml.*;
/**
* XML Pulses
*
*
Elie Zananiri
* CART 253, Winter 2008
*/
// ----------------------------------------------------------------------
// GLOBAL CONSTANTS
// ----------------------------------------------------------------------
int MAX_PULSES = 500;
// ----------------------------------------------------------------------
// GLOBAL VARIABLES
// ----------------------------------------------------------------------
int numPulses = 0;
Pulse pulses[] = new Pulse[MAX_PULSES];
XMLInOut xmlIO;
XMLElement xmlPulses;
// ----------------------------------------------------------------------
// BUILT-IN FUNCTIONS
// ----------------------------------------------------------------------
void setup() {
size(400, 400);
smooth();
noStroke();
// create a new XML tree
xmlIO = new XMLInOut(this);
xmlPulses = new XMLElement("pulses");
}
void draw() {
background(0);
// draw all the pulses
for (int i=0; i < numPulses; i++) {
pulses[i].draw();
}
}
void mousePressed() {
addPulse(mouseX, mouseY);
}
void mouseDragged() {
addPulse(mouseX, mouseY);
}
void mouseReleased() {
savePulsesToDisk();
}
void keyPressed() {
if (key == ' ') {
// clear all
clearPulses();
}
}
// ----------------------------------------------------------------------
// USER FUNCTIONS
// ----------------------------------------------------------------------
/* adds a new pulse to the display and XML lists */
void addPulse(int newX, int newY) {
if (numPulses < MAX_PULSES) {
pulses[numPulses] = new Pulse(newX, newY, color(random(255), random(255), random(255)));
// create a new pulse XML node
XMLElement newPulse = new XMLElement("pulse");
// add it to the XML root
xmlPulses.addChild(newPulse);
// add a position XML node to the new pulse
XMLElement pos = new XMLElement("position");
pos.addAttribute("x", newX);
pos.addAttribute("y", newY);
newPulse.addChild(pos);
// add a color XML node to the new pulse
XMLElement col = new XMLElement("color");
col.addAttribute("rgb", pulses[numPulses].c);
newPulse.addChild(col);
numPulses++;
}
}
/* clears all pulses from the display and XML lists */
void clearPulses() {
numPulses = 0;
// create a new empty pulses XML list to overwrite the previous one
xmlPulses = new XMLElement("pulses");
// save the new empty list to disk
savePulsesToDisk();
}
/* saves the pulses XML list to disk */
void savePulsesToDisk() {
xmlIO.saveElement(xmlPulses, "pulses.xml");
}