void ramNodeArray::updateWithOscMessage(const ofxOscMessage &m) { const int nNodes = m.getArgAsInt32(1); for (int i = 0; i < nNodes; i++) { const string name = m.getArgAsString(i * 8 + 0 + 2); const float vx = m.getArgAsFloat(i * 8 + 1 + 2); const float vy = m.getArgAsFloat(i * 8 + 2 + 2); const float vz = m.getArgAsFloat(i * 8 + 3 + 2); const float angle = m.getArgAsFloat(i * 8 + 4 + 2); const float ax = m.getArgAsFloat(i * 8 + 5 + 2); const float ay = m.getArgAsFloat(i * 8 + 6 + 2); const float az = m.getArgAsFloat(i * 8 + 7 + 2); const ofVec3f axis(ax, ay, az); const ofVec3f vec(vx, vy, vz); const ofQuaternion quat(angle, axis); ramNode &node = getNode(i); node.node_id = i; node.name = isActor() ? getJointName(i) : "Node " + ofToString(i); node.setGlobalPosition(vec); node.setGlobalOrientation(quat); node.accelerometer.update(vec, quat); } last_timestamp = current_timestamp; current_timestamp = m.getArgAsFloat(2 + nNodes * 8); last_update_client_time = ofGetElapsedTimef(); }
/*----------------------------------------------------------------------*/ static void showInstanceLocation(int ins, char *prefix) { char buffer[1000]; if (admin[ins].location == 0) return; else { output(prefix); if (isALocation(admin[ins].location)) { output("at"); say(admin[ins].location); sprintf(buffer, "[%d]", admin[ins].location); output(buffer); } else if (isContainer(admin[ins].location)) { if (isObject(admin[ins].location)) output("in"); else if (isActor(admin[ins].location)) output("carried by"); say(admin[ins].location); sprintf(buffer, "[%d]", admin[ins].location); output(buffer); } else output("Illegal location!"); } }