Breathing boxes: Unterschied zwischen den Versionen
Aus hyperdramatik
Zeile 1: | Zeile 1: | ||
+ | Example Picture | ||
[[Datei:Boxes.png]] | [[Datei:Boxes.png]] | ||
Version vom 11. Mai 2020, 13:06 Uhr
For the sketch to work you need to install this Libary Control P5.
import mqtt.*; import controlP5.*; import processing.serial.*; Serial myPort; MQTTClient client; ControlP5 cp5; String inputPlayerName = "noplayerinput"; String otherplayername; ArrayList<PlayerBox> playerBoxes = new ArrayList<PlayerBox>(); int offSetX = 60; int offSetY = 100; boolean nameCheck = true; float myBreath = 0; float boxSize = 30; void setup() { size(700, 700, P3D); //MQTT_Stuff///////////// client = new MQTTClient(this); client.connect("YOUR MQTT BROKER", "CLIENT_ID"); //GUI_Stuff/////////// cp5 = new ControlP5(this); cp5.addTextfield("playername").setPosition(10, 10).setSize(100, 20).setAutoClear(false); cp5.addBang("Send_Name").setPosition(110, 10).setSize(80, 20); ///Arduino //// String portName = Serial.list()[0]; myPort = new Serial(this,portName, 9600); myPort.bufferUntil('\n'); } void draw() { background(0); boxSize = map(myBreath, 0, 1023, 0, 60); client.publish(inputPlayerName, str(int(boxSize))); for (int i = 0; i < playerBoxes.size(); i++) { PlayerBox pB = playerBoxes.get(i); if (pB.playername.equals(inputPlayerName)){ pB.setSize(int(boxSize)); } pB.update(); } delay(100); } /////this is happens of you press the Button /////// void Send_Name() { nameCheck = true; inputPlayerName = cp5.get(Textfield.class, "playername").getText(); client.publish("/control/", "init"); initPlayer(inputPlayerName); } /////MQTT Connect and subscribe//////// void clientConnected() { println("client connected"); client.subscribe("/player/"); client.subscribe("/control/"); } void messageReceived(String topic, byte[] payload) { println("new message: " + topic + " - " + new String(payload)); String pl = new String(payload); ///when topic is /control do something///// if (topic.equals("/control")) { if (pl.equals("init")) { for (int i = 0; i < playerBoxes.size(); i++) { PlayerBox pB = playerBoxes.get(i); client.publish("/player/", pB.playername); } } } ///when topic is /player do something///// else if (topic.equals("/player")) { println("init non local"); nameCheck = true; initPlayer(new String(payload)); }else{ for (int i = 0; i < playerBoxes.size(); i++) { PlayerBox pB = playerBoxes.get(i); if ((topic.equals("/" + pB.playername) == true) && topic.equals(pB.playername)== false){ int bs = int(pl); pB.setSize(bs); } } } } void connectionLost() { println("connection lost"); } void serialEvent (Serial myPort) { // get the ASCII string: String inString = myPort.readStringUntil('\n'); if (inString != null) { // trim off any whitespace: inString = trim(inString); //println("inString (raw): " + inString); myBreath = float(inString); //println("myBreath (raw): " + myBreath); } } void initPlayer(String name) { for (int i = 0; i < playerBoxes.size(); i++) { PlayerBox pB = playerBoxes.get(i); if (name.equals(pB.playername)) { nameCheck = false; } } if (nameCheck) { client.subscribe("/" + name); playerBoxes.add(new PlayerBox(20)); PlayerBox pb = playerBoxes.get(playerBoxes.size() - 1); ///should be last element in List pb.setPlayerName(name); pb.setPosition(offSetX, offSetY); offSetX = offSetX + 120; if (offSetX > width - 110) { offSetX = 60; offSetY = offSetY + 150; } } } /////class for box player objects ////// class PlayerBox { int rc, gc, bc, size; float spin = 0; int xscreen, yscreen; String playername; PlayerBox(int s) { rc = int(random(255)); gc = int(random(255)); bc = int(random(255)); size = s; } void setPlayerName(String playerN) { playername = playerN; } void setPosition(int x, int y) { xscreen = x; yscreen = y; } void setSize(int newSize){ size = newSize; } void update() { push(); translate(xscreen, yscreen); textSize(30); textAlign(CENTER); fill(255, 255, 255); text(playername, 0, 80, 0); rotateX(0.3); rotateY(spin); fill(rc, gc, bc); box(size); pop(); spin = spin - 0.05; } }