Showing the changes to libraries/script-engine/src/ScriptEngine.cpp (1 of 9 files). Show all
Unified · Split
| @@ -44,6 +44,7 @@ ScriptEngine::ScriptEngine(const QString& scriptContents, bool wantMenuItems, co · 43 unmodified lines | |||
| 44 | AbstractMenuInterface* menu, | 44 | AbstractMenuInterface* menu, |
| 45 | AbstractControllerScriptingInterface* controllerScriptingInterface) : | 45 | AbstractControllerScriptingInterface* controllerScriptingInterface) : |
| 46 | _isAvatar(false), | 46 | _isAvatar(false), |
| 47 | _avatarIdentityTimer(NULL), | ||
| 47 | _avatarData(NULL) | 48 | _avatarData(NULL) |
| 48 | { | 49 | { |
| 49 | _scriptContents = scriptContents; | 50 | _scriptContents = scriptContents; |
| @@ -74,6 +75,21 @@ ScriptEngine::~ScriptEngine() { · 24 unmodified lines | |||
| 74 | //printf("ScriptEngine::~ScriptEngine()...\n"); | 75 | //printf("ScriptEngine::~ScriptEngine()...\n"); |
| 75 | } | 76 | } |
| 76 | 77 | ||
| 78 | void ScriptEngine::setIsAvatar(bool isAvatar) { | ||
| 79 | _isAvatar = isAvatar; | ||
| 80 | |||
| 81 | if (_isAvatar && !_avatarIdentityTimer) { | ||
| 82 | // set up the avatar identity timer | ||
| 83 | _avatarIdentityTimer = new QTimer(this); | ||
| 84 | |||
| 85 | // connect our slot | ||
| 86 | connect(_avatarIdentityTimer, &QTimer::timeout, this, &ScriptEngine::sendAvatarIdentityPacket); | ||
| 87 | |||
| 88 | // start the timer | ||
| 89 | _avatarIdentityTimer->start(AVATAR_IDENTITY_PACKET_SEND_INTERVAL_MSECS); | ||
| 90 | } | ||
| 91 | } | ||
| 92 | |||
| 77 | void ScriptEngine::setAvatarData(AvatarData* avatarData, const QString& objectName) { | 93 | void ScriptEngine::setAvatarData(AvatarData* avatarData, const QString& objectName) { |
| 78 | _avatarData = avatarData; | 94 | _avatarData = avatarData; |
| 79 | 95 | ||
| @@ -84,6 +100,7 @@ void ScriptEngine::setAvatarData(AvatarData* avatarData, const QString& objectNa · 4 unmodified lines | |||
| 84 | registerGlobalObject(objectName, _avatarData); | 100 | registerGlobalObject(objectName, _avatarData); |
| 85 | } | 101 | } |
| 86 | 102 | ||
| 103 | |||
| 87 | void ScriptEngine::setupMenuItems() { | 104 | void ScriptEngine::setupMenuItems() { |
| 88 | if (_menu && _wantMenuItems) { | 105 | if (_menu && _wantMenuItems) { |
| 89 | _menu->addActionToQMenuAndActionHash(_menu->getActiveScriptsMenu(), _scriptMenuName, 0, this, SLOT(stop())); | 106 | _menu->addActionToQMenuAndActionHash(_menu->getActiveScriptsMenu(), _scriptMenuName, 0, this, SLOT(stop())); |
| @@ -173,6 +190,12 @@ void ScriptEngine::evaluate() { · 83 unmodified lines | |||
| 173 | } | 190 | } |
| 174 | } | 191 | } |
| 175 | 192 | ||
| 193 | void ScriptEngine::sendAvatarIdentityPacket() { | ||
| 194 | if (_isAvatar && _avatarData) { | ||
| 195 | _avatarData->sendIdentityPacket(); | ||
| 196 | } | ||
| 197 | } | ||
| 198 | |||
| 176 | void ScriptEngine::run() { | 199 | void ScriptEngine::run() { |
| 177 | if (!_isInitialized) { | 200 | if (!_isInitialized) { |
| 178 | init(); | 201 | init(); |
| @@ -229,16 +252,7 @@ void ScriptEngine::run() { · 50 unmodified lines | |||
| 229 | } | 252 | } |
| 230 | 253 | ||
| 231 | if (_isAvatar && _avatarData) { | 254 | if (_isAvatar && _avatarData) { |
| 232 | static QByteArray avatarPacket; | 255 | QByteArray avatarPacket = byteArrayWithPopluatedHeader(PacketTypeAvatarData); |
| 233 | int numAvatarHeaderBytes = 0; | ||
| 234 | |||
| 235 | if (avatarPacket.size() == 0) { | ||
| 236 | // pack the avatar header bytes the first time | ||
| 237 | // unlike the _avatar.getBroadcastData these won't change | ||
| 238 | numAvatarHeaderBytes = populatePacketHeader(avatarPacket, PacketTypeAvatarData); | ||
| 239 | } | ||
| 240 | |||
| 241 | avatarPacket.resize(numAvatarHeaderBytes); | ||
| 242 | avatarPacket.append(_avatarData->toByteArray()); | 256 | avatarPacket.append(_avatarData->toByteArray()); |
| 243 | 257 | ||
| 244 | nodeList->broadcastToNodes(avatarPacket, NodeSet() << NodeType::AvatarMixer); | 258 | nodeList->broadcastToNodes(avatarPacket, NodeSet() << NodeType::AvatarMixer); |
| @@ -253,6 +267,9 @@ void ScriptEngine::run() { · 8 unmodified lines | |||
| 253 | } | 267 | } |
| 254 | emit scriptEnding(); | 268 | emit scriptEnding(); |
| 255 | 269 | ||
| 270 | // kill the avatar identity timer | ||
| 271 | delete _avatarIdentityTimer; | ||
| 272 | |||
| 256 | if (_voxelsScriptingInterface.getVoxelPacketSender()->serversExist()) { | 273 | if (_voxelsScriptingInterface.getVoxelPacketSender()->serversExist()) { |
| 257 | // release the queue of edit voxel messages. | 274 | // release the queue of edit voxel messages. |
| 258 | _voxelsScriptingInterface.getVoxelPacketSender()->releaseQueuedMessages(); | 275 | _voxelsScriptingInterface.getVoxelPacketSender()->releaseQueuedMessages(); |