History

fixes for scripted avatars, closes #2033

Stephen Birarda committed 12 years ago

Commit 4ee416b1 parent 3f572769 files · +50 −22Browse files

Showing the changes to libraries/script-engine/src/ScriptEngine.cpp (1 of 9 files). Show all

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+27−10
@@ -44,6 +44,7 @@ ScriptEngine::ScriptEngine(const QString& scriptContents, bool wantMenuItems, co · 43 unmodified lines
4444 AbstractMenuInterface* menu,
4545 AbstractControllerScriptingInterface* controllerScriptingInterface) :
4646 _isAvatar(false),
47+ _avatarIdentityTimer(NULL),
4748 _avatarData(NULL)
4849 {
4950 _scriptContents = scriptContents;
@@ -74,6 +75,21 @@ ScriptEngine::~ScriptEngine() { · 24 unmodified lines
7475 //printf("ScriptEngine::~ScriptEngine()...\n");
7576 }
7677
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+
7793 void ScriptEngine::setAvatarData(AvatarData* avatarData, const QString& objectName) {
7894 _avatarData = avatarData;
7995
@@ -84,6 +100,7 @@ void ScriptEngine::setAvatarData(AvatarData* avatarData, const QString& objectNa · 4 unmodified lines
84100 registerGlobalObject(objectName, _avatarData);
85101 }
86102
103+
87104 void ScriptEngine::setupMenuItems() {
88105 if (_menu && _wantMenuItems) {
89106 _menu->addActionToQMenuAndActionHash(_menu->getActiveScriptsMenu(), _scriptMenuName, 0, this, SLOT(stop()));
@@ -173,6 +190,12 @@ void ScriptEngine::evaluate() { · 83 unmodified lines
173190 }
174191 }
175192
193+void ScriptEngine::sendAvatarIdentityPacket() {
194+ if (_isAvatar && _avatarData) {
195+ _avatarData->sendIdentityPacket();
196+ }
197+}
198+
176199 void ScriptEngine::run() {
177200 if (!_isInitialized) {
178201 init();
@@ -229,16 +252,7 @@ void ScriptEngine::run() { · 50 unmodified lines
229252 }
230253
231254 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);
242256 avatarPacket.append(_avatarData->toByteArray());
243257
244258 nodeList->broadcastToNodes(avatarPacket, NodeSet() << NodeType::AvatarMixer);
@@ -253,6 +267,9 @@ void ScriptEngine::run() { · 8 unmodified lines
253267 }
254268 emit scriptEnding();
255269
270+ // kill the avatar identity timer
271+ delete _avatarIdentityTimer;
272+
256273 if (_voxelsScriptingInterface.getVoxelPacketSender()->serversExist()) {
257274 // release the queue of edit voxel messages.
258275 _voxelsScriptingInterface.getVoxelPacketSender()->releaseQueuedMessages();