public PandaMapping pm;
+ private final static int PORT = 779;
+
+ private final DatagramSocket socket;
+
// Address to send to
private final NetAddress address;
address = new NetAddress(ip, 779);
message = new OscMessage("/shady/pointbuffer");
+ try {
+ socket = new DatagramSocket();
+ } catch (Exception x) {
+ throw new RuntimeException(x);
+ }
+
// Build the array of points, initialize all to nothing
points = new int[PandaMapping.PIXELS_PER_BOARD];
for (int i = 0; i < points.length; ++i) {
case REAR_RIGHT: stripOrderIndex = 3; break;
}
+ // TODO(mcslee): clean up, ordering always consistent now
+ stripOrderIndex = 2;
+
// Iterate through all the strips on the cube and add the points
for (int stripIndex : CUBE_STRIP_ORDERINGS[stripOrderIndex]) {
// We go backwards here... in the model strips go clockwise, but
}
private int mapStrip(Strip s, int direction, int[] points, int pi) {
+ return mapStrip(s, direction, points, pi, s.points.size());
+ }
+
+ private int mapStrip(Strip s, int direction, int[] points, int pi, int len) {
if (direction == FORWARD) {
+ int i = 0;
for (LXPoint p : s.points) {
points[pi++] = p.index;
+ if (++i >= len) {
+ break;
+ }
}
} else if (direction == BACKWARD) {
- for (int i = s.points.size()-1; i >= 0; --i) {
+ for (int i = len-1; i >= 0; --i) {
points[pi++] = s.points.get(i).index;
}
} else {
setEnabled(!enabled);
}
+ private final int[] GRIZZLY_STRIP_ORDERING = new int[] { 9, 8, 11, 5, 4, 7, 6, 10, 14, 2, 1, 0, 3, 13, 12, 15 };
+
public final void send(int[] colors) {
if (!enabled) {
return;
int len = 0;
int packetNum = 0;
for (ChannelMapping channel : pm.channelList) {
- for (int j: channel.objectIndices) {
- if (j > 0) {
- Cube cube = _model.getCubeByRawIndex(j);
- for (LXPoint p : cube.points) {
- int c = (p.index < 0) ? 0 : colors[p.index];
+ for (int rawCubeIndex : channel.objectIndices) {
+ if (rawCubeIndex > 0) {
+ Cube cube = _model.getCubeByRawIndex(rawCubeIndex);
+
+ // TODO(mcslee): clean this up, precompute paths
+ for (int stripIndex : GRIZZLY_STRIP_ORDERING) {
+ Strip strip = cube.strips.get(stripIndex);
+ int stripLen = ((stripIndex == 9) || (stripIndex == 16)) ? 15 : 16;
+ for (int i = stripLen-1; i >= 0; --i) {
+ int c = colors[strip.points.get(i).index];
byte r = (byte) ((c >> 16) & 0xFF);
byte g = (byte) ((c >> 8) & 0xFF);
byte b = (byte) ((c) & 0xFF);
- packet[len++] = (byte) 0; // alpha channel, unused but makes for 4-byte alignment
- packet[len++] = (byte) r;
- packet[len++] = (byte) g;
- packet[len++] = (byte) b;
+ packet[len++] = (byte) 0; // alpha channel, unused but makes for 4-byte alignment
+ packet[len++] = (byte) r;
+ packet[len++] = (byte) g;
+ packet[len++] = (byte) b;
}
}
+
+// for (LXPoint p : cube.points) {
+// int c = (p.index < 0) ? 0 : colors[p.index];
+// byte r = (byte) ((c >> 16) & 0xFF);
+// byte g = (byte) ((c >> 8) & 0xFF);
+// byte b = (byte) ((c) & 0xFF);
+// packet[len++] = (byte) 0; // alpha channel, unused but makes for 4-byte alignment
+// packet[len++] = (byte) r;
+// packet[len++] = (byte) g;
+// packet[len++] = (byte) b;
+// }
}
+ }
// println("Packet number: " + packetNum);
sendPacket(frameNum, packetNum++);
len = 0;
message.add(0xBEFFFFEB);
try {
- OscP5.flush(message, address);
+ // OscP5.flush(message, address); // new DatagramSocket every time, no thanks
+ byte[] bytes = message.getBytes();
+ DatagramPacket packet = new DatagramPacket(bytes, bytes.length, address.inetaddress(), PORT);
+ socket.send(packet);
} catch (Exception x) {
x.printStackTrace();
}