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 | 44 | AbstractMenuInterface* menu, |
| 45 | 45 | AbstractControllerScriptingInterface* controllerScriptingInterface) : |
| 46 | 46 | _isAvatar(false), |
| 47 | + _avatarIdentityTimer(NULL), | |
| 47 | 48 | _avatarData(NULL) |
| 48 | 49 | { |
| 49 | 50 | _scriptContents = scriptContents; |
| @@ -74,6 +75,21 @@ ScriptEngine::~ScriptEngine() { · 24 unmodified lines | ||
| 74 | 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 | 93 | void ScriptEngine::setAvatarData(AvatarData* avatarData, const QString& objectName) { |
| 78 | 94 | _avatarData = avatarData; |
| 79 | 95 | |
| @@ -84,6 +100,7 @@ void ScriptEngine::setAvatarData(AvatarData* avatarData, const QString& objectNa · 4 unmodified lines | ||
| 84 | 100 | registerGlobalObject(objectName, _avatarData); |
| 85 | 101 | } |
| 86 | 102 | |
| 103 | + | |
| 87 | 104 | void ScriptEngine::setupMenuItems() { |
| 88 | 105 | if (_menu && _wantMenuItems) { |
| 89 | 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 | 199 | void ScriptEngine::run() { |
| 177 | 200 | if (!_isInitialized) { |
| 178 | 201 | init(); |
| @@ -229,16 +252,7 @@ void ScriptEngine::run() { · 50 unmodified lines | ||
| 229 | 252 | } |
| 230 | 253 | |
| 231 | 254 | if (_isAvatar && _avatarData) { |
| 232 | − static QByteArray avatarPacket; | |
| 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); | |
| 255 | + QByteArray avatarPacket = byteArrayWithPopluatedHeader(PacketTypeAvatarData); | |
| 242 | 256 | avatarPacket.append(_avatarData->toByteArray()); |
| 243 | 257 | |
| 244 | 258 | nodeList->broadcastToNodes(avatarPacket, NodeSet() << NodeType::AvatarMixer); |
| @@ -253,6 +267,9 @@ void ScriptEngine::run() { · 8 unmodified lines | ||
| 253 | 267 | } |
| 254 | 268 | emit scriptEnding(); |
| 255 | 269 | |
| 270 | + // kill the avatar identity timer | |
| 271 | + delete _avatarIdentityTimer; | |
| 272 | + | |
| 256 | 273 | if (_voxelsScriptingInterface.getVoxelPacketSender()->serversExist()) { |
| 257 | 274 | // release the queue of edit voxel messages. |
| 258 | 275 | _voxelsScriptingInterface.getVoxelPacketSender()->releaseQueuedMessages(); |