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
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
78void 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
77void ScriptEngine::setAvatarData(AvatarData* avatarData, const QString& objectName) {93void 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
87void ScriptEngine::setupMenuItems() {104void 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
193void ScriptEngine::sendAvatarIdentityPacket() {
194 if (_isAvatar && _avatarData) {
195 _avatarData->sendIdentityPacket();
196 }
197}
198
176void ScriptEngine::run() {199void 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();