NetObject::NetObject(ZCom_Control* control, IrrlichtDevice* dev) : m_deleteme(false) , m_sceneNode(NULL) , m_device(dev) , m_meshScale(1,1,1) { m_zcomNode.reset(new ZCom_Node()); m_zcomNode->setUserData(this); // BEGIN REPLICATION SETUP m_zcomNode->beginReplicationSetup(1); m_zcomNode -> addReplicator( new ObjectReplicator( new ZCom_ReplicatorSetup(ZCOM_REPFLAG_UNRELIABLE|ZCOM_REPFLAG_MOSTRECENT|ZCOM_REPFLAG_SETUPAUTODELETE, ZCOM_REPRULE_AUTH_2_ALL) , this) , true); m_zcomNode->endReplicationSetup(); // END REPLICATION SETUP m_zcomNode -> registerNodeDynamic(Sarona::TypeRegistry::m_objectId, control); m_zcomNode -> setEventInterceptor(this); reloadNode(); // the node is first shown after the first status update packet // which shows up pretty soon now that we've notified the endpoint of obj creation m_sceneNode->setVisible(false); }
void NodeEditorWindows::attachProject(GPNodeProject *project) { /*if(_project) disconnect(_project);*/ _project = project; _project->setNodeEditorWindow(this); connect(_project, SIGNAL(nodeChanged(ModelNode *)), this, SLOT(reloadNode())); connect(_project, SIGNAL(nodePathChanged(QString)), this, SLOT(reloadNodePath())); connect(_blocksView, SIGNAL(blockSelected(QString)), _camExplorerWidget, SLOT(selectBlock(QString))); connect(_camExplorerWidget, SIGNAL(blockSelected(QString)), _blocksView, SLOT(selectBlock(QString))); connect(_blocksView, SIGNAL(blockSelected(QString)), this, SLOT(showCamExplorer())); connect(_blocksView, SIGNAL(blockDetailsRequest(QString)), this, SLOT(showBlockDetails(QString))); // attach project to editors and viewers _camExplorerWidget->attachProject(_project); _viewerExplorerWidget->attachProject(_project); _blocksView->attachProject(_project); _compileLog->setProject(_project); _libTreeView->attachProject(_project); if(project->node()) { reloadNode(); reloadNodePath(); } }
bool NetObject::recUserEvent(ZCom_Node *_node, ZCom_ConnID _from, eZCom_NodeRole _remoterole, ZCom_BitStream &_data, zU32 _estimated_time_sent) { // Received event from remote node unsigned int Id = _data.getInt(16); if(Id == Protocol::NodeStateUpdate::Id) { Protocol::NodeStateUpdate state; state.read(_data); bool dirty = false; if(m_mesh != state.mesh) { dirty = true; m_mesh = state.mesh; } if(m_texture != state.texture) { dirty = true; m_texture = state.texture; } core::vector3df scale( state.mesh_scale.x(), state.mesh_scale.y(), state.mesh_scale.z() ); if(m_meshScale.getDistanceFromSQ(scale)>0.0001) // TODO: compare with epsilon { dirty = true; m_meshScale = scale; } // std::cout << "Updated: " << m_texture << ", " << m_mesh << ", " << m_meshScale << std::endl; if(dirty) reloadNode(); } else { std::cerr << "FATAL: Unhandled node message with id: " << Id << std::endl; } return false; }