mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 23:57:13 +02:00
working on removing voxels
This commit is contained in:
parent
860098585c
commit
e1d8022409
4 changed files with 5 additions and 329 deletions
|
@ -25,7 +25,7 @@
|
||||||
#include <ResourceCache.h>
|
#include <ResourceCache.h>
|
||||||
#include <SoundCache.h>
|
#include <SoundCache.h>
|
||||||
#include <UUID.h>
|
#include <UUID.h>
|
||||||
#include <VoxelConstants.h>
|
//#include <VoxelConstants.h>
|
||||||
|
|
||||||
#include <EntityScriptingInterface.h> // TODO: consider moving to scriptengine.h
|
#include <EntityScriptingInterface.h> // TODO: consider moving to scriptengine.h
|
||||||
|
|
||||||
|
@ -37,7 +37,6 @@ static const int RECEIVED_AUDIO_STREAM_CAPACITY_FRAMES = 10;
|
||||||
|
|
||||||
Agent::Agent(const QByteArray& packet) :
|
Agent::Agent(const QByteArray& packet) :
|
||||||
ThreadedAssignment(packet),
|
ThreadedAssignment(packet),
|
||||||
_voxelEditSender(),
|
|
||||||
_entityEditSender(),
|
_entityEditSender(),
|
||||||
_receivedAudioStream(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO, RECEIVED_AUDIO_STREAM_CAPACITY_FRAMES,
|
_receivedAudioStream(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO, RECEIVED_AUDIO_STREAM_CAPACITY_FRAMES,
|
||||||
InboundAudioStream::Settings(0, false, RECEIVED_AUDIO_STREAM_CAPACITY_FRAMES, false,
|
InboundAudioStream::Settings(0, false, RECEIVED_AUDIO_STREAM_CAPACITY_FRAMES, false,
|
||||||
|
@ -48,7 +47,6 @@ Agent::Agent(const QByteArray& packet) :
|
||||||
// be the parent of the script engine so it gets moved when we do
|
// be the parent of the script engine so it gets moved when we do
|
||||||
_scriptEngine.setParent(this);
|
_scriptEngine.setParent(this);
|
||||||
|
|
||||||
_scriptEngine.getVoxelsScriptingInterface()->setPacketSender(&_voxelEditSender);
|
|
||||||
_scriptEngine.getEntityScriptingInterface()->setPacketSender(&_entityEditSender);
|
_scriptEngine.getEntityScriptingInterface()->setPacketSender(&_entityEditSender);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,11 +67,6 @@ void Agent::readPendingDatagrams() {
|
||||||
if (matchedNode) {
|
if (matchedNode) {
|
||||||
// PacketType_JURISDICTION, first byte is the node type...
|
// PacketType_JURISDICTION, first byte is the node type...
|
||||||
switch (receivedPacket[headerBytes]) {
|
switch (receivedPacket[headerBytes]) {
|
||||||
case NodeType::VoxelServer:
|
|
||||||
_scriptEngine.getVoxelsScriptingInterface()->getJurisdictionListener()->
|
|
||||||
queueReceivedPacket(matchedNode,receivedPacket);
|
|
||||||
break;
|
|
||||||
break;
|
|
||||||
case NodeType::EntityServer:
|
case NodeType::EntityServer:
|
||||||
_scriptEngine.getEntityScriptingInterface()->getJurisdictionListener()->
|
_scriptEngine.getEntityScriptingInterface()->getJurisdictionListener()->
|
||||||
queueReceivedPacket(matchedNode, receivedPacket);
|
queueReceivedPacket(matchedNode, receivedPacket);
|
||||||
|
@ -93,7 +86,6 @@ void Agent::readPendingDatagrams() {
|
||||||
sourceNode->setLastHeardMicrostamp(usecTimestampNow());
|
sourceNode->setLastHeardMicrostamp(usecTimestampNow());
|
||||||
|
|
||||||
} else if (datagramPacketType == PacketTypeOctreeStats
|
} else if (datagramPacketType == PacketTypeOctreeStats
|
||||||
|| datagramPacketType == PacketTypeVoxelData
|
|
||||||
|| datagramPacketType == PacketTypeEntityData
|
|| datagramPacketType == PacketTypeEntityData
|
||||||
|| datagramPacketType == PacketTypeEntityErase
|
|| datagramPacketType == PacketTypeEntityErase
|
||||||
) {
|
) {
|
||||||
|
@ -127,10 +119,6 @@ void Agent::readPendingDatagrams() {
|
||||||
_entityViewer.processDatagram(mutablePacket, sourceNode);
|
_entityViewer.processDatagram(mutablePacket, sourceNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (datagramPacketType == PacketTypeVoxelData) {
|
|
||||||
_voxelViewer.processDatagram(mutablePacket, sourceNode);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (datagramPacketType == PacketTypeMixedAudio || datagramPacketType == PacketTypeSilentAudioFrame) {
|
} else if (datagramPacketType == PacketTypeMixedAudio || datagramPacketType == PacketTypeSilentAudioFrame) {
|
||||||
|
|
||||||
_receivedAudioStream.parseData(receivedPacket);
|
_receivedAudioStream.parseData(receivedPacket);
|
||||||
|
@ -168,7 +156,6 @@ void Agent::run() {
|
||||||
nodeList->addSetOfNodeTypesToNodeInterestSet(NodeSet()
|
nodeList->addSetOfNodeTypesToNodeInterestSet(NodeSet()
|
||||||
<< NodeType::AudioMixer
|
<< NodeType::AudioMixer
|
||||||
<< NodeType::AvatarMixer
|
<< NodeType::AvatarMixer
|
||||||
<< NodeType::VoxelServer
|
|
||||||
<< NodeType::EntityServer
|
<< NodeType::EntityServer
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -221,12 +208,6 @@ void Agent::run() {
|
||||||
|
|
||||||
_scriptEngine.registerGlobalObject("SoundCache", &SoundCache::getInstance());
|
_scriptEngine.registerGlobalObject("SoundCache", &SoundCache::getInstance());
|
||||||
|
|
||||||
_scriptEngine.registerGlobalObject("VoxelViewer", &_voxelViewer);
|
|
||||||
// connect the VoxelViewer and the VoxelScriptingInterface to each other
|
|
||||||
_voxelViewer.setJurisdictionListener(_scriptEngine.getVoxelsScriptingInterface()->getJurisdictionListener());
|
|
||||||
_voxelViewer.init();
|
|
||||||
_scriptEngine.getVoxelsScriptingInterface()->setVoxelTree(_voxelViewer.getTree());
|
|
||||||
|
|
||||||
_scriptEngine.registerGlobalObject("EntityViewer", &_entityViewer);
|
_scriptEngine.registerGlobalObject("EntityViewer", &_entityViewer);
|
||||||
_entityViewer.setJurisdictionListener(_scriptEngine.getEntityScriptingInterface()->getJurisdictionListener());
|
_entityViewer.setJurisdictionListener(_scriptEngine.getEntityScriptingInterface()->getJurisdictionListener());
|
||||||
_entityViewer.init();
|
_entityViewer.init();
|
||||||
|
|
|
@ -60,10 +60,7 @@ public slots:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ScriptEngine _scriptEngine;
|
ScriptEngine _scriptEngine;
|
||||||
VoxelEditPacketSender _voxelEditSender;
|
|
||||||
EntityEditPacketSender _entityEditSender;
|
EntityEditPacketSender _entityEditSender;
|
||||||
|
|
||||||
VoxelTreeHeadlessViewer _voxelViewer;
|
|
||||||
EntityTreeHeadlessViewer _entityViewer;
|
EntityTreeHeadlessViewer _entityViewer;
|
||||||
|
|
||||||
MixedAudioStream _receivedAudioStream;
|
MixedAudioStream _receivedAudioStream;
|
||||||
|
|
|
@ -62,7 +62,6 @@
|
||||||
#include <GlowEffect.h>
|
#include <GlowEffect.h>
|
||||||
#include <HFActionEvent.h>
|
#include <HFActionEvent.h>
|
||||||
#include <HFBackEvent.h>
|
#include <HFBackEvent.h>
|
||||||
#include <LocalVoxelsList.h>
|
|
||||||
#include <LogHandler.h>
|
#include <LogHandler.h>
|
||||||
#include <MainWindow.h>
|
#include <MainWindow.h>
|
||||||
#include <NetworkAccessManager.h>
|
#include <NetworkAccessManager.h>
|
||||||
|
@ -151,15 +150,10 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
|
||||||
_frameCount(0),
|
_frameCount(0),
|
||||||
_fps(60.0f),
|
_fps(60.0f),
|
||||||
_justStarted(true),
|
_justStarted(true),
|
||||||
_voxelImportDialog(NULL),
|
|
||||||
_voxelImporter(),
|
|
||||||
_importSucceded(false),
|
|
||||||
_sharedVoxelSystem(TREE_SCALE, DEFAULT_MAX_VOXELS_PER_SYSTEM, &_clipboard),
|
|
||||||
_entities(true, this, this),
|
_entities(true, this, this),
|
||||||
_entityCollisionSystem(),
|
_entityCollisionSystem(),
|
||||||
_entityClipboardRenderer(false, this, this),
|
_entityClipboardRenderer(false, this, this),
|
||||||
_entityClipboard(),
|
_entityClipboard(),
|
||||||
_wantToKillLocalVoxels(false),
|
|
||||||
_viewFrustum(),
|
_viewFrustum(),
|
||||||
_lastQueriedViewFrustum(),
|
_lastQueriedViewFrustum(),
|
||||||
_lastQueriedTime(usecTimestampNow()),
|
_lastQueriedTime(usecTimestampNow()),
|
||||||
|
@ -177,7 +171,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
|
||||||
_audio(),
|
_audio(),
|
||||||
_enableProcessVoxelsThread(true),
|
_enableProcessVoxelsThread(true),
|
||||||
_octreeProcessor(),
|
_octreeProcessor(),
|
||||||
_voxelHideShowThread(&_voxels),
|
|
||||||
_packetsPerSecond(0),
|
_packetsPerSecond(0),
|
||||||
_bytesPerSecond(0),
|
_bytesPerSecond(0),
|
||||||
_nodeBoundsDisplay(this),
|
_nodeBoundsDisplay(this),
|
||||||
|
@ -275,8 +268,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
|
||||||
connect(nodeList, &NodeList::nodeAdded, this, &Application::nodeAdded);
|
connect(nodeList, &NodeList::nodeAdded, this, &Application::nodeAdded);
|
||||||
connect(nodeList, &NodeList::nodeKilled, this, &Application::nodeKilled);
|
connect(nodeList, &NodeList::nodeKilled, this, &Application::nodeKilled);
|
||||||
connect(nodeList, SIGNAL(nodeKilled(SharedNodePointer)), SLOT(nodeKilled(SharedNodePointer)));
|
connect(nodeList, SIGNAL(nodeKilled(SharedNodePointer)), SLOT(nodeKilled(SharedNodePointer)));
|
||||||
connect(nodeList, SIGNAL(nodeAdded(SharedNodePointer)), &_voxels, SLOT(nodeAdded(SharedNodePointer)));
|
|
||||||
connect(nodeList, SIGNAL(nodeKilled(SharedNodePointer)), &_voxels, SLOT(nodeKilled(SharedNodePointer)));
|
|
||||||
connect(nodeList, &NodeList::uuidChanged, _myAvatar, &MyAvatar::setSessionUUID);
|
connect(nodeList, &NodeList::uuidChanged, _myAvatar, &MyAvatar::setSessionUUID);
|
||||||
connect(nodeList, &NodeList::limitOfSilentDomainCheckInsReached, nodeList, &NodeList::reset);
|
connect(nodeList, &NodeList::limitOfSilentDomainCheckInsReached, nodeList, &NodeList::reset);
|
||||||
|
|
||||||
|
@ -313,10 +304,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
|
||||||
_settings = new QSettings(this);
|
_settings = new QSettings(this);
|
||||||
_numChangedSettings = 0;
|
_numChangedSettings = 0;
|
||||||
|
|
||||||
// Check to see if the user passed in a command line option for loading a local
|
|
||||||
// Voxel File.
|
|
||||||
_voxelsFilename = getCmdOption(argc, constArgv, "-i");
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
WSADATA WsaData;
|
WSADATA WsaData;
|
||||||
int wsaresult = WSAStartup(MAKEWORD(2,2), &WsaData);
|
int wsaresult = WSAStartup(MAKEWORD(2,2), &WsaData);
|
||||||
|
@ -327,8 +314,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
|
||||||
<< NodeType::VoxelServer << NodeType::EntityServer
|
<< NodeType::VoxelServer << NodeType::EntityServer
|
||||||
<< NodeType::MetavoxelServer);
|
<< NodeType::MetavoxelServer);
|
||||||
|
|
||||||
// connect to the packet sent signal of the _voxelEditSender and the _entityEditSender
|
// connect to the packet sent signal of the _entityEditSender
|
||||||
connect(&_voxelEditSender, &VoxelEditPacketSender::packetSent, this, &Application::packetSent);
|
|
||||||
connect(&_entityEditSender, &EntityEditPacketSender::packetSent, this, &Application::packetSent);
|
connect(&_entityEditSender, &EntityEditPacketSender::packetSent, this, &Application::packetSent);
|
||||||
|
|
||||||
// move the silentNodeTimer to the _nodeThread
|
// move the silentNodeTimer to the _nodeThread
|
||||||
|
@ -373,8 +359,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
|
||||||
|
|
||||||
// initialization continues in initializeGL when OpenGL context is ready
|
// initialization continues in initializeGL when OpenGL context is ready
|
||||||
|
|
||||||
// Tell our voxel edit sender about our known jurisdictions
|
// Tell our entity edit sender about our known jurisdictions
|
||||||
_voxelEditSender.setVoxelServerJurisdictions(&_voxelServerJurisdictions);
|
|
||||||
_entityEditSender.setServerJurisdictions(&_entityServerJurisdictions);
|
_entityEditSender.setServerJurisdictions(&_entityServerJurisdictions);
|
||||||
|
|
||||||
// For now we're going to set the PPS for outbound packets to be super high, this is
|
// For now we're going to set the PPS for outbound packets to be super high, this is
|
||||||
|
@ -386,9 +371,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
|
||||||
|
|
||||||
_overlays.init(glCanvas.data()); // do this before scripts load
|
_overlays.init(glCanvas.data()); // do this before scripts load
|
||||||
|
|
||||||
LocalVoxelsList::getInstance()->addPersistantTree(DOMAIN_TREE_NAME, _voxels.getTree());
|
|
||||||
LocalVoxelsList::getInstance()->addPersistantTree(CLIPBOARD_TREE_NAME, &_clipboard);
|
|
||||||
|
|
||||||
_runningScriptsWidget->setRunningScripts(getRunningScripts());
|
_runningScriptsWidget->setRunningScripts(getRunningScripts());
|
||||||
connect(_runningScriptsWidget, &RunningScriptsWidget::stopScriptName, this, &Application::stopScript);
|
connect(_runningScriptsWidget, &RunningScriptsWidget::stopScriptName, this, &Application::stopScript);
|
||||||
|
|
||||||
|
@ -446,9 +428,6 @@ Application::~Application() {
|
||||||
// make sure we don't call the idle timer any more
|
// make sure we don't call the idle timer any more
|
||||||
delete idleTimer;
|
delete idleTimer;
|
||||||
|
|
||||||
_sharedVoxelSystem.changeTree(new VoxelTree);
|
|
||||||
delete _voxelImportDialog;
|
|
||||||
|
|
||||||
// let the avatar mixer know we're out
|
// let the avatar mixer know we're out
|
||||||
MyAvatar::sendKillAvatar();
|
MyAvatar::sendKillAvatar();
|
||||||
|
|
||||||
|
@ -467,11 +446,8 @@ Application::~Application() {
|
||||||
_audio.thread()->wait();
|
_audio.thread()->wait();
|
||||||
|
|
||||||
_octreeProcessor.terminate();
|
_octreeProcessor.terminate();
|
||||||
_voxelHideShowThread.terminate();
|
|
||||||
_voxelEditSender.terminate();
|
|
||||||
_entityEditSender.terminate();
|
_entityEditSender.terminate();
|
||||||
|
|
||||||
VoxelTreeElement::removeDeleteHook(&_voxels); // we don't need to do this processing on shutdown
|
|
||||||
Menu::getInstance()->deleteLater();
|
Menu::getInstance()->deleteLater();
|
||||||
|
|
||||||
_myAvatar = NULL;
|
_myAvatar = NULL;
|
||||||
|
@ -481,9 +457,6 @@ void Application::saveSettings() {
|
||||||
Menu::getInstance()->saveSettings();
|
Menu::getInstance()->saveSettings();
|
||||||
_rearMirrorTools->saveSettings(_settings);
|
_rearMirrorTools->saveSettings(_settings);
|
||||||
|
|
||||||
if (_voxelImportDialog) {
|
|
||||||
_voxelImportDialog->saveSettings(_settings);
|
|
||||||
}
|
|
||||||
_settings->sync();
|
_settings->sync();
|
||||||
_numChangedSettings = 0;
|
_numChangedSettings = 0;
|
||||||
}
|
}
|
||||||
|
@ -568,14 +541,8 @@ void Application::initializeGL() {
|
||||||
|
|
||||||
// create thread for parsing of voxel data independent of the main network and rendering threads
|
// create thread for parsing of voxel data independent of the main network and rendering threads
|
||||||
_octreeProcessor.initialize(_enableProcessVoxelsThread);
|
_octreeProcessor.initialize(_enableProcessVoxelsThread);
|
||||||
_voxelEditSender.initialize(_enableProcessVoxelsThread);
|
|
||||||
_voxelHideShowThread.initialize(_enableProcessVoxelsThread);
|
|
||||||
_entityEditSender.initialize(_enableProcessVoxelsThread);
|
_entityEditSender.initialize(_enableProcessVoxelsThread);
|
||||||
|
|
||||||
if (_enableProcessVoxelsThread) {
|
|
||||||
qDebug("Voxel parsing thread created.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// call our timer function every second
|
// call our timer function every second
|
||||||
QTimer* timer = new QTimer(this);
|
QTimer* timer = new QTimer(this);
|
||||||
connect(timer, SIGNAL(timeout()), SLOT(timer()));
|
connect(timer, SIGNAL(timeout()), SLOT(timer()));
|
||||||
|
@ -797,10 +764,6 @@ void Application::updateProjectionMatrix(Camera& camera, bool updateViewFrustum)
|
||||||
|
|
||||||
void Application::controlledBroadcastToNodes(const QByteArray& packet, const NodeSet& destinationNodeTypes) {
|
void Application::controlledBroadcastToNodes(const QByteArray& packet, const NodeSet& destinationNodeTypes) {
|
||||||
foreach(NodeType_t type, destinationNodeTypes) {
|
foreach(NodeType_t type, destinationNodeTypes) {
|
||||||
// Intercept data to voxel server when voxels are disabled
|
|
||||||
if (type == NodeType::VoxelServer && !Menu::getInstance()->isOptionChecked(MenuOption::Voxels)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Perform the broadcast for one type
|
// Perform the broadcast for one type
|
||||||
int nReceivingNodes = NodeList::getInstance()->broadcastToNodes(packet, NodeSet() << type);
|
int nReceivingNodes = NodeList::getInstance()->broadcastToNodes(packet, NodeSet() << type);
|
||||||
|
@ -812,7 +775,6 @@ void Application::controlledBroadcastToNodes(const QByteArray& packet, const Nod
|
||||||
case NodeType::AvatarMixer:
|
case NodeType::AvatarMixer:
|
||||||
channel = BandwidthMeter::AVATARS;
|
channel = BandwidthMeter::AVATARS;
|
||||||
break;
|
break;
|
||||||
case NodeType::VoxelServer:
|
|
||||||
case NodeType::EntityServer:
|
case NodeType::EntityServer:
|
||||||
channel = BandwidthMeter::VOXELS;
|
channel = BandwidthMeter::VOXELS;
|
||||||
break;
|
break;
|
||||||
|
@ -1093,11 +1055,6 @@ void Application::keyPressEvent(QKeyEvent* event) {
|
||||||
Menu::getInstance()->triggerOption(MenuOption::DisplayFrustum);
|
Menu::getInstance()->triggerOption(MenuOption::DisplayFrustum);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Qt::Key_V:
|
|
||||||
if (isShifted) {
|
|
||||||
Menu::getInstance()->triggerOption(MenuOption::Voxels);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Qt::Key_P:
|
case Qt::Key_P:
|
||||||
Menu::getInstance()->triggerOption(MenuOption::FirstPerson);
|
Menu::getInstance()->triggerOption(MenuOption::FirstPerson);
|
||||||
break;
|
break;
|
||||||
|
@ -1442,7 +1399,7 @@ void Application::dropEvent(QDropEvent *event) {
|
||||||
void Application::sendPingPackets() {
|
void Application::sendPingPackets() {
|
||||||
QByteArray pingPacket = NodeList::getInstance()->constructPingPacket();
|
QByteArray pingPacket = NodeList::getInstance()->constructPingPacket();
|
||||||
controlledBroadcastToNodes(pingPacket, NodeSet()
|
controlledBroadcastToNodes(pingPacket, NodeSet()
|
||||||
<< NodeType::VoxelServer << NodeType::EntityServer
|
<< NodeType::EntityServer
|
||||||
<< NodeType::AudioMixer << NodeType::AvatarMixer
|
<< NodeType::AudioMixer << NodeType::AvatarMixer
|
||||||
<< NodeType::MetavoxelServer);
|
<< NodeType::MetavoxelServer);
|
||||||
}
|
}
|
||||||
|
@ -1588,63 +1545,10 @@ void Application::setEnableVRMode(bool enableVRMode) {
|
||||||
resizeGL(glCanvas->getDeviceWidth(), glCanvas->getDeviceHeight());
|
resizeGL(glCanvas->getDeviceWidth(), glCanvas->getDeviceHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::setRenderVoxels(bool voxelRender) {
|
|
||||||
_voxelEditSender.setShouldSend(voxelRender);
|
|
||||||
if (!voxelRender) {
|
|
||||||
doKillLocalVoxels();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Application::setLowVelocityFilter(bool lowVelocityFilter) {
|
void Application::setLowVelocityFilter(bool lowVelocityFilter) {
|
||||||
SixenseManager::getInstance().setLowVelocityFilter(lowVelocityFilter);
|
SixenseManager::getInstance().setLowVelocityFilter(lowVelocityFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::doKillLocalVoxels() {
|
|
||||||
_wantToKillLocalVoxels = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Application::removeVoxel(glm::vec3 position,
|
|
||||||
float scale) {
|
|
||||||
VoxelDetail voxel;
|
|
||||||
voxel.x = position.x / TREE_SCALE;
|
|
||||||
voxel.y = position.y / TREE_SCALE;
|
|
||||||
voxel.z = position.z / TREE_SCALE;
|
|
||||||
voxel.s = scale / TREE_SCALE;
|
|
||||||
_voxelEditSender.sendVoxelEditMessage(PacketTypeVoxelErase, voxel);
|
|
||||||
|
|
||||||
// delete it locally to see the effect immediately (and in case no voxel server is present)
|
|
||||||
_voxels.getTree()->deleteVoxelAt(voxel.x, voxel.y, voxel.z, voxel.s);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Application::makeVoxel(glm::vec3 position,
|
|
||||||
float scale,
|
|
||||||
unsigned char red,
|
|
||||||
unsigned char green,
|
|
||||||
unsigned char blue,
|
|
||||||
bool isDestructive) {
|
|
||||||
VoxelDetail voxel;
|
|
||||||
voxel.x = position.x / TREE_SCALE;
|
|
||||||
voxel.y = position.y / TREE_SCALE;
|
|
||||||
voxel.z = position.z / TREE_SCALE;
|
|
||||||
voxel.s = scale / TREE_SCALE;
|
|
||||||
voxel.red = red;
|
|
||||||
voxel.green = green;
|
|
||||||
voxel.blue = blue;
|
|
||||||
PacketType message = isDestructive ? PacketTypeVoxelSetDestructive : PacketTypeVoxelSet;
|
|
||||||
_voxelEditSender.sendVoxelEditMessage(message, voxel);
|
|
||||||
|
|
||||||
// create the voxel locally so it appears immediately
|
|
||||||
_voxels.getTree()->createVoxel(voxel.x, voxel.y, voxel.z, voxel.s,
|
|
||||||
voxel.red, voxel.green, voxel.blue,
|
|
||||||
isDestructive);
|
|
||||||
}
|
|
||||||
|
|
||||||
glm::vec3 Application::getMouseVoxelWorldCoordinates(const VoxelDetail& mouseVoxel) {
|
|
||||||
return glm::vec3((mouseVoxel.x + mouseVoxel.s / 2.0f) * TREE_SCALE, (mouseVoxel.y + mouseVoxel.s / 2.0f) * TREE_SCALE,
|
|
||||||
(mouseVoxel.z + mouseVoxel.s / 2.0f) * TREE_SCALE);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Application::mouseOnScreen() const {
|
bool Application::mouseOnScreen() const {
|
||||||
if (OculusManager::isConnected()) {
|
if (OculusManager::isConnected()) {
|
||||||
GLCanvas::SharedPointer glCanvas = DependencyManager::get<GLCanvas>();
|
GLCanvas::SharedPointer glCanvas = DependencyManager::get<GLCanvas>();
|
||||||
|
@ -1728,88 +1632,6 @@ bool Application::exportEntities(const QString& filename, float x, float y, floa
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Application::sendVoxelsOperation(OctreeElement* element, void* extraData) {
|
|
||||||
VoxelTreeElement* voxel = (VoxelTreeElement*)element;
|
|
||||||
SendVoxelsOperationArgs* args = (SendVoxelsOperationArgs*)extraData;
|
|
||||||
if (voxel->isColored()) {
|
|
||||||
const unsigned char* nodeOctalCode = voxel->getOctalCode();
|
|
||||||
unsigned char* codeColorBuffer = NULL;
|
|
||||||
int codeLength = 0;
|
|
||||||
int bytesInCode = 0;
|
|
||||||
int codeAndColorLength;
|
|
||||||
|
|
||||||
// If the newBase is NULL, then don't rebase
|
|
||||||
if (args->newBaseOctCode) {
|
|
||||||
codeColorBuffer = rebaseOctalCode(nodeOctalCode, args->newBaseOctCode, true);
|
|
||||||
codeLength = numberOfThreeBitSectionsInCode(codeColorBuffer);
|
|
||||||
bytesInCode = bytesRequiredForCodeLength(codeLength);
|
|
||||||
codeAndColorLength = bytesInCode + SIZE_OF_COLOR_DATA;
|
|
||||||
} else {
|
|
||||||
codeLength = numberOfThreeBitSectionsInCode(nodeOctalCode);
|
|
||||||
bytesInCode = bytesRequiredForCodeLength(codeLength);
|
|
||||||
codeAndColorLength = bytesInCode + SIZE_OF_COLOR_DATA;
|
|
||||||
codeColorBuffer = new unsigned char[codeAndColorLength];
|
|
||||||
memcpy(codeColorBuffer, nodeOctalCode, bytesInCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
// copy the colors over
|
|
||||||
codeColorBuffer[bytesInCode + RED_INDEX] = voxel->getColor()[RED_INDEX];
|
|
||||||
codeColorBuffer[bytesInCode + GREEN_INDEX] = voxel->getColor()[GREEN_INDEX];
|
|
||||||
codeColorBuffer[bytesInCode + BLUE_INDEX] = voxel->getColor()[BLUE_INDEX];
|
|
||||||
getInstance()->_voxelEditSender.queueVoxelEditMessage(PacketTypeVoxelSetDestructive,
|
|
||||||
codeColorBuffer, codeAndColorLength);
|
|
||||||
|
|
||||||
delete[] codeColorBuffer;
|
|
||||||
}
|
|
||||||
return true; // keep going
|
|
||||||
}
|
|
||||||
|
|
||||||
void Application::exportVoxels(const VoxelDetail& sourceVoxel) {
|
|
||||||
QString desktopLocation = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
|
|
||||||
QString suggestedName = desktopLocation.append("/voxels.svo");
|
|
||||||
|
|
||||||
QString fileNameString = QFileDialog::getSaveFileName(DependencyManager::get<GLCanvas>().data(),
|
|
||||||
tr("Export Voxels"), suggestedName,
|
|
||||||
tr("Sparse Voxel Octree Files (*.svo)"));
|
|
||||||
QByteArray fileNameAscii = fileNameString.toLocal8Bit();
|
|
||||||
const char* fileName = fileNameAscii.data();
|
|
||||||
|
|
||||||
VoxelTreeElement* selectedNode = _voxels.getTree()->getVoxelAt(sourceVoxel.x, sourceVoxel.y, sourceVoxel.z, sourceVoxel.s);
|
|
||||||
if (selectedNode) {
|
|
||||||
VoxelTree exportTree;
|
|
||||||
getVoxelTree()->copySubTreeIntoNewTree(selectedNode, &exportTree, true);
|
|
||||||
exportTree.writeToSVOFile(fileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
// restore the main window's active state
|
|
||||||
_window->activateWindow();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Application::importVoxels() {
|
|
||||||
_importSucceded = false;
|
|
||||||
|
|
||||||
if (!_voxelImportDialog) {
|
|
||||||
_voxelImportDialog = new VoxelImportDialog(_window);
|
|
||||||
_voxelImportDialog->loadSettings(_settings);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_voxelImportDialog->exec()) {
|
|
||||||
qDebug() << "Import succeeded." << endl;
|
|
||||||
_importSucceded = true;
|
|
||||||
} else {
|
|
||||||
qDebug() << "Import failed." << endl;
|
|
||||||
if (_sharedVoxelSystem.getTree() == _voxelImporter.getVoxelTree()) {
|
|
||||||
_sharedVoxelSystem.killLocalVoxels();
|
|
||||||
_sharedVoxelSystem.changeTree(&_clipboard);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// restore the main window's active state
|
|
||||||
_window->activateWindow();
|
|
||||||
|
|
||||||
emit importDone();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Application::importEntities(const QString& filename) {
|
bool Application::importEntities(const QString& filename) {
|
||||||
_entityClipboard.eraseAllOctreeElements();
|
_entityClipboard.eraseAllOctreeElements();
|
||||||
bool success = _entityClipboard.readFromSVOFile(filename.toLocal8Bit().constData());
|
bool success = _entityClipboard.readFromSVOFile(filename.toLocal8Bit().constData());
|
||||||
|
@ -1823,71 +1645,6 @@ void Application::pasteEntities(float x, float y, float z) {
|
||||||
_entityClipboard.sendEntities(&_entityEditSender, _entities.getTree(), x, y, z);
|
_entityClipboard.sendEntities(&_entityEditSender, _entities.getTree(), x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::cutVoxels(const VoxelDetail& sourceVoxel) {
|
|
||||||
copyVoxels(sourceVoxel);
|
|
||||||
deleteVoxelAt(sourceVoxel);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Application::copyVoxels(const VoxelDetail& sourceVoxel) {
|
|
||||||
// switch to and clear the clipboard first...
|
|
||||||
_sharedVoxelSystem.killLocalVoxels();
|
|
||||||
if (_sharedVoxelSystem.getTree() != &_clipboard) {
|
|
||||||
_clipboard.eraseAllOctreeElements();
|
|
||||||
_sharedVoxelSystem.changeTree(&_clipboard);
|
|
||||||
}
|
|
||||||
|
|
||||||
// then copy onto it if there is something to copy
|
|
||||||
VoxelTreeElement* selectedNode = _voxels.getTree()->getVoxelAt(sourceVoxel.x, sourceVoxel.y, sourceVoxel.z, sourceVoxel.s);
|
|
||||||
if (selectedNode) {
|
|
||||||
getVoxelTree()->copySubTreeIntoNewTree(selectedNode, _sharedVoxelSystem.getTree(), true);
|
|
||||||
_sharedVoxelSystem.forceRedrawEntireTree();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Application::pasteVoxelsToOctalCode(const unsigned char* octalCodeDestination) {
|
|
||||||
// Recurse the clipboard tree, where everything is root relative, and send all the colored voxels to
|
|
||||||
// the server as an set voxel message, this will also rebase the voxels to the new location
|
|
||||||
SendVoxelsOperationArgs args;
|
|
||||||
args.newBaseOctCode = octalCodeDestination;
|
|
||||||
_sharedVoxelSystem.getTree()->recurseTreeWithOperation(sendVoxelsOperation, &args);
|
|
||||||
|
|
||||||
// Switch back to clipboard if it was an import
|
|
||||||
if (_sharedVoxelSystem.getTree() != &_clipboard) {
|
|
||||||
_sharedVoxelSystem.killLocalVoxels();
|
|
||||||
_sharedVoxelSystem.changeTree(&_clipboard);
|
|
||||||
}
|
|
||||||
|
|
||||||
_voxelEditSender.releaseQueuedMessages();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Application::pasteVoxels(const VoxelDetail& sourceVoxel) {
|
|
||||||
unsigned char* calculatedOctCode = NULL;
|
|
||||||
VoxelTreeElement* selectedNode = _voxels.getTree()->getVoxelAt(sourceVoxel.x, sourceVoxel.y, sourceVoxel.z, sourceVoxel.s);
|
|
||||||
|
|
||||||
// we only need the selected voxel to get the newBaseOctCode, which we can actually calculate from the
|
|
||||||
// voxel size/position details. If we don't have an actual selectedNode then use the mouseVoxel to create a
|
|
||||||
// target octalCode for where the user is pointing.
|
|
||||||
const unsigned char* octalCodeDestination;
|
|
||||||
if (selectedNode) {
|
|
||||||
octalCodeDestination = selectedNode->getOctalCode();
|
|
||||||
} else {
|
|
||||||
octalCodeDestination = calculatedOctCode = pointToVoxel(sourceVoxel.x, sourceVoxel.y, sourceVoxel.z, sourceVoxel.s);
|
|
||||||
}
|
|
||||||
|
|
||||||
pasteVoxelsToOctalCode(octalCodeDestination);
|
|
||||||
|
|
||||||
if (calculatedOctCode) {
|
|
||||||
delete[] calculatedOctCode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Application::nudgeVoxelsByVector(const VoxelDetail& sourceVoxel, const glm::vec3& nudgeVec) {
|
|
||||||
VoxelTreeElement* nodeToNudge = _voxels.getTree()->getVoxelAt(sourceVoxel.x, sourceVoxel.y, sourceVoxel.z, sourceVoxel.s);
|
|
||||||
if (nodeToNudge) {
|
|
||||||
_voxels.getTree()->nudgeSubTree(nodeToNudge, nudgeVec, _voxelEditSender);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Application::initDisplay() {
|
void Application::initDisplay() {
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_CONSTANT_ALPHA, GL_ONE);
|
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_CONSTANT_ALPHA, GL_ONE);
|
||||||
|
@ -1898,23 +1655,6 @@ void Application::initDisplay() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::init() {
|
void Application::init() {
|
||||||
_sharedVoxelSystemViewFrustum.setPosition(glm::vec3(TREE_SCALE / 2.0f,
|
|
||||||
TREE_SCALE / 2.0f,
|
|
||||||
3.0f * TREE_SCALE / 2.0f));
|
|
||||||
_sharedVoxelSystemViewFrustum.setNearClip(TREE_SCALE / 2.0f);
|
|
||||||
_sharedVoxelSystemViewFrustum.setFarClip(3.0f * TREE_SCALE / 2.0f);
|
|
||||||
_sharedVoxelSystemViewFrustum.setFieldOfView(90.0f);
|
|
||||||
_sharedVoxelSystemViewFrustum.setOrientation(glm::quat());
|
|
||||||
_sharedVoxelSystemViewFrustum.calculate();
|
|
||||||
_sharedVoxelSystem.setViewFrustum(&_sharedVoxelSystemViewFrustum);
|
|
||||||
|
|
||||||
VoxelTreeElement::removeUpdateHook(&_sharedVoxelSystem);
|
|
||||||
|
|
||||||
// Cleanup of the original shared tree
|
|
||||||
_sharedVoxelSystem.init();
|
|
||||||
|
|
||||||
_voxelImportDialog = new VoxelImportDialog(_window);
|
|
||||||
|
|
||||||
_environment.init();
|
_environment.init();
|
||||||
|
|
||||||
DependencyManager::get<DeferredLightingEffect>()->init(this);
|
DependencyManager::get<DeferredLightingEffect>()->init(this);
|
||||||
|
@ -1987,16 +1727,11 @@ void Application::init() {
|
||||||
// fire off an immediate domain-server check in now that settings are loaded
|
// fire off an immediate domain-server check in now that settings are loaded
|
||||||
NodeList::getInstance()->sendDomainServerCheckIn();
|
NodeList::getInstance()->sendDomainServerCheckIn();
|
||||||
|
|
||||||
// Set up VoxelSystem after loading preferences so we can get the desired max voxel count
|
|
||||||
_voxels.setMaxVoxels(Menu::getInstance()->getMaxVoxels());
|
|
||||||
_voxels.setDisableFastVoxelPipeline(false);
|
|
||||||
_voxels.init();
|
|
||||||
|
|
||||||
_entities.init();
|
_entities.init();
|
||||||
_entities.setViewFrustum(getViewFrustum());
|
_entities.setViewFrustum(getViewFrustum());
|
||||||
|
|
||||||
EntityTree* entityTree = _entities.getTree();
|
EntityTree* entityTree = _entities.getTree();
|
||||||
_entityCollisionSystem.init(&_entityEditSender, entityTree, _voxels.getTree(), &_audio, &_avatarManager);
|
_entityCollisionSystem.init(&_entityEditSender, entityTree, NULL, &_audio, &_avatarManager);
|
||||||
entityTree->setSimulation(&_entityCollisionSystem);
|
entityTree->setSimulation(&_entityCollisionSystem);
|
||||||
|
|
||||||
// connect the _entityCollisionSystem to our script engine's EntityScriptingInterface
|
// connect the _entityCollisionSystem to our script engine's EntityScriptingInterface
|
||||||
|
|
|
@ -71,10 +71,7 @@
|
||||||
#include "ui/ToolWindow.h"
|
#include "ui/ToolWindow.h"
|
||||||
#include "ui/VoxelImportDialog.h"
|
#include "ui/VoxelImportDialog.h"
|
||||||
#include "voxels/VoxelFade.h"
|
#include "voxels/VoxelFade.h"
|
||||||
#include "voxels/VoxelHideShowThread.h"
|
|
||||||
#include "voxels/VoxelImporter.h"
|
|
||||||
#include "voxels/OctreePacketProcessor.h"
|
#include "voxels/OctreePacketProcessor.h"
|
||||||
#include "voxels/VoxelSystem.h"
|
|
||||||
|
|
||||||
|
|
||||||
#include "UndoStackScriptingInterface.h"
|
#include "UndoStackScriptingInterface.h"
|
||||||
|
@ -174,7 +171,6 @@ public:
|
||||||
|
|
||||||
void removeVoxel(glm::vec3 position, float scale);
|
void removeVoxel(glm::vec3 position, float scale);
|
||||||
|
|
||||||
glm::vec3 getMouseVoxelWorldCoordinates(const VoxelDetail& mouseVoxel);
|
|
||||||
bool isThrottleRendering() const { return DependencyManager::get<GLCanvas>()->isThrottleRendering(); }
|
bool isThrottleRendering() const { return DependencyManager::get<GLCanvas>()->isThrottleRendering(); }
|
||||||
|
|
||||||
MyAvatar* getAvatar() { return _myAvatar; }
|
MyAvatar* getAvatar() { return _myAvatar; }
|
||||||
|
@ -184,22 +180,16 @@ public:
|
||||||
ViewFrustum* getViewFrustum() { return &_viewFrustum; }
|
ViewFrustum* getViewFrustum() { return &_viewFrustum; }
|
||||||
ViewFrustum* getDisplayViewFrustum() { return &_displayViewFrustum; }
|
ViewFrustum* getDisplayViewFrustum() { return &_displayViewFrustum; }
|
||||||
ViewFrustum* getShadowViewFrustum() { return &_shadowViewFrustum; }
|
ViewFrustum* getShadowViewFrustum() { return &_shadowViewFrustum; }
|
||||||
VoxelSystem* getVoxels() { return &_voxels; }
|
|
||||||
const OctreePacketProcessor& getOctreePacketProcessor() const { return _octreeProcessor; }
|
const OctreePacketProcessor& getOctreePacketProcessor() const { return _octreeProcessor; }
|
||||||
MetavoxelSystem* getMetavoxels() { return &_metavoxels; }
|
MetavoxelSystem* getMetavoxels() { return &_metavoxels; }
|
||||||
EntityTreeRenderer* getEntities() { return &_entities; }
|
EntityTreeRenderer* getEntities() { return &_entities; }
|
||||||
VoxelSystem* getSharedVoxelSystem() { return &_sharedVoxelSystem; }
|
|
||||||
Environment* getEnvironment() { return &_environment; }
|
Environment* getEnvironment() { return &_environment; }
|
||||||
PrioVR* getPrioVR() { return &_prioVR; }
|
PrioVR* getPrioVR() { return &_prioVR; }
|
||||||
QUndoStack* getUndoStack() { return &_undoStack; }
|
QUndoStack* getUndoStack() { return &_undoStack; }
|
||||||
MainWindow* getWindow() { return _window; }
|
MainWindow* getWindow() { return _window; }
|
||||||
|
|
||||||
VoxelImporter* getVoxelImporter() { return &_voxelImporter; }
|
|
||||||
VoxelTree* getClipboard() { return &_clipboard; }
|
|
||||||
EntityTree* getEntityClipboard() { return &_entityClipboard; }
|
EntityTree* getEntityClipboard() { return &_entityClipboard; }
|
||||||
EntityTreeRenderer* getEntityClipboardRenderer() { return &_entityClipboardRenderer; }
|
EntityTreeRenderer* getEntityClipboardRenderer() { return &_entityClipboardRenderer; }
|
||||||
VoxelTree* getVoxelTree() { return _voxels.getTree(); }
|
|
||||||
bool getImportSucceded() { return _importSucceded; }
|
|
||||||
|
|
||||||
bool isMousePressed() const { return _mousePressed; }
|
bool isMousePressed() const { return _mousePressed; }
|
||||||
bool isMouseHidden() const { return DependencyManager::get<GLCanvas>()->cursor().shape() == Qt::BlankCursor; }
|
bool isMouseHidden() const { return DependencyManager::get<GLCanvas>()->cursor().shape() == Qt::BlankCursor; }
|
||||||
|
@ -294,9 +284,7 @@ public:
|
||||||
|
|
||||||
glm::vec2 getViewportDimensions() const { return glm::vec2(DependencyManager::get<GLCanvas>()->getDeviceWidth(),
|
glm::vec2 getViewportDimensions() const { return glm::vec2(DependencyManager::get<GLCanvas>()->getDeviceWidth(),
|
||||||
DependencyManager::get<GLCanvas>()->getDeviceHeight()); }
|
DependencyManager::get<GLCanvas>()->getDeviceHeight()); }
|
||||||
NodeToJurisdictionMap& getVoxelServerJurisdictions() { return _voxelServerJurisdictions; }
|
|
||||||
NodeToJurisdictionMap& getEntityServerJurisdictions() { return _entityServerJurisdictions; }
|
NodeToJurisdictionMap& getEntityServerJurisdictions() { return _entityServerJurisdictions; }
|
||||||
void pasteVoxelsToOctalCode(const unsigned char* octalCodeDestination);
|
|
||||||
|
|
||||||
void skipVersion(QString latestVersion);
|
void skipVersion(QString latestVersion);
|
||||||
|
|
||||||
|
@ -346,17 +334,7 @@ public slots:
|
||||||
bool exportEntities(const QString& filename, float x, float y, float z, float scale);
|
bool exportEntities(const QString& filename, float x, float y, float z, float scale);
|
||||||
bool importEntities(const QString& filename);
|
bool importEntities(const QString& filename);
|
||||||
|
|
||||||
void importVoxels(); // doesn't include source voxel because it goes to clipboard
|
|
||||||
void cutVoxels(const VoxelDetail& sourceVoxel);
|
|
||||||
void copyVoxels(const VoxelDetail& sourceVoxel);
|
|
||||||
void pasteVoxels(const VoxelDetail& sourceVoxel);
|
|
||||||
void deleteVoxels(const VoxelDetail& sourceVoxel);
|
|
||||||
void exportVoxels(const VoxelDetail& sourceVoxel);
|
|
||||||
void nudgeVoxelsByVector(const VoxelDetail& sourceVoxel, const glm::vec3& nudgeVec);
|
|
||||||
|
|
||||||
void setRenderVoxels(bool renderVoxels);
|
|
||||||
void setLowVelocityFilter(bool lowVelocityFilter);
|
void setLowVelocityFilter(bool lowVelocityFilter);
|
||||||
void doKillLocalVoxels();
|
|
||||||
void loadDialog();
|
void loadDialog();
|
||||||
void loadScriptURLDialog();
|
void loadScriptURLDialog();
|
||||||
void toggleLogDialog();
|
void toggleLogDialog();
|
||||||
|
@ -418,7 +396,6 @@ private:
|
||||||
void updateProjectionMatrix();
|
void updateProjectionMatrix();
|
||||||
void updateProjectionMatrix(Camera& camera, bool updateViewFrustum = true);
|
void updateProjectionMatrix(Camera& camera, bool updateViewFrustum = true);
|
||||||
|
|
||||||
static bool sendVoxelsOperation(OctreeElement* node, void* extraData);
|
|
||||||
void sendPingPackets();
|
void sendPingPackets();
|
||||||
|
|
||||||
void initDisplay();
|
void initDisplay();
|
||||||
|
@ -493,22 +470,11 @@ private:
|
||||||
bool _justStarted;
|
bool _justStarted;
|
||||||
Stars _stars;
|
Stars _stars;
|
||||||
|
|
||||||
VoxelSystem _voxels;
|
|
||||||
VoxelTree _clipboard; // if I copy/paste
|
|
||||||
VoxelImportDialog* _voxelImportDialog;
|
|
||||||
VoxelImporter _voxelImporter;
|
|
||||||
bool _importSucceded;
|
|
||||||
VoxelSystem _sharedVoxelSystem;
|
|
||||||
ViewFrustum _sharedVoxelSystemViewFrustum;
|
|
||||||
|
|
||||||
EntityTreeRenderer _entities;
|
EntityTreeRenderer _entities;
|
||||||
EntityCollisionSystem _entityCollisionSystem;
|
EntityCollisionSystem _entityCollisionSystem;
|
||||||
EntityTreeRenderer _entityClipboardRenderer;
|
EntityTreeRenderer _entityClipboardRenderer;
|
||||||
EntityTree _entityClipboard;
|
EntityTree _entityClipboard;
|
||||||
|
|
||||||
QByteArray _voxelsFilename;
|
|
||||||
bool _wantToKillLocalVoxels;
|
|
||||||
|
|
||||||
MetavoxelSystem _metavoxels;
|
MetavoxelSystem _metavoxels;
|
||||||
|
|
||||||
ViewFrustum _viewFrustum; // current state of view frustum, perspective, orientation, etc.
|
ViewFrustum _viewFrustum; // current state of view frustum, perspective, orientation, etc.
|
||||||
|
@ -569,8 +535,6 @@ private:
|
||||||
|
|
||||||
bool _enableProcessVoxelsThread;
|
bool _enableProcessVoxelsThread;
|
||||||
OctreePacketProcessor _octreeProcessor;
|
OctreePacketProcessor _octreeProcessor;
|
||||||
VoxelHideShowThread _voxelHideShowThread;
|
|
||||||
VoxelEditPacketSender _voxelEditSender;
|
|
||||||
EntityEditPacketSender _entityEditSender;
|
EntityEditPacketSender _entityEditSender;
|
||||||
|
|
||||||
int _packetsPerSecond;
|
int _packetsPerSecond;
|
||||||
|
@ -582,7 +546,6 @@ private:
|
||||||
int parseOctreeStats(const QByteArray& packet, const SharedNodePointer& sendingNode);
|
int parseOctreeStats(const QByteArray& packet, const SharedNodePointer& sendingNode);
|
||||||
void trackIncomingVoxelPacket(const QByteArray& packet, const SharedNodePointer& sendingNode, bool wasStatsPacket);
|
void trackIncomingVoxelPacket(const QByteArray& packet, const SharedNodePointer& sendingNode, bool wasStatsPacket);
|
||||||
|
|
||||||
NodeToJurisdictionMap _voxelServerJurisdictions;
|
|
||||||
NodeToJurisdictionMap _entityServerJurisdictions;
|
NodeToJurisdictionMap _entityServerJurisdictions;
|
||||||
NodeToOctreeSceneStats _octreeServerSceneStats;
|
NodeToOctreeSceneStats _octreeServerSceneStats;
|
||||||
QReadWriteLock _octreeSceneStatsLock;
|
QReadWriteLock _octreeSceneStatsLock;
|
||||||
|
|
Loading…
Reference in a new issue