History

re-expose an Avatar to the ScriptEngine

Stephen Birarda committed 12 years ago

Commit 417aa7a1 parent aa9f7ff4 files · +60 −2Browse files

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

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+34−1
@@ -40,7 +40,9 @@ static QScriptValue soundConstructor(QScriptContext* context, QScriptEngine* eng · 39 unmodified lines
4040
4141 ScriptEngine::ScriptEngine(const QString& scriptContents, bool wantMenuItems,
4242 const char* scriptMenuName, AbstractMenuInterface* menu,
43− AbstractControllerScriptingInterface* controllerScriptingInterface) {
43+ AbstractControllerScriptingInterface* controllerScriptingInterface) :
44+ _avatarData(NULL)
45+{
4446 _scriptContents = scriptContents;
4547 _isFinished = false;
4648 _isRunning = false;
@@ -65,6 +67,15 @@ ScriptEngine::~ScriptEngine() { · 18 unmodified lines
6567 //printf("ScriptEngine::~ScriptEngine()...\n");
6668 }
6769
70+void ScriptEngine::setAvatarData(AvatarData* avatarData) {
71+ _avatarData = avatarData;
72+
73+ // remove the old Avatar property, if it exists
74+ _engine.globalObject().setProperty("Avatar", QScriptValue());
75+
76+ // give the script engine the new Avatar script property
77+ registerGlobalObject("Avatar", _avatarData);
78+}
6879
6980 void ScriptEngine::setupMenuItems() {
7081 if (_menu && _wantMenuItems) {
@@ -178,6 +189,8 @@ void ScriptEngine::run() { · 107 unmodified lines
178189 gettimeofday(&startTime, NULL);
179190
180191 int thisFrame = 0;
192+
193+ NodeList* nodeList = NodeList::getInstance();
181194
182195 while (!_isFinished) {
183196 int usecToSleep = usecTimestamp(&startTime) + (thisFrame++ * VISUAL_DATA_CALLBACK_USECS) - usecTimestampNow();
@@ -221,6 +234,26 @@ void ScriptEngine::run() { · 37 unmodified lines
221234 _particlesScriptingInterface.getParticlePacketSender()->process();
222235 }
223236 }
237+
238+ if (_isAvatar && _avatarData) {
239+ static unsigned char avatarPacket[MAX_PACKET_SIZE];
240+ static int numAvatarHeaderBytes = 0;
241+
242+ if (numAvatarHeaderBytes == 0) {
243+ // pack the avatar header bytes the first time
244+ // unlike the _avatar.getBroadcastData these won't change
245+ numAvatarHeaderBytes = populateTypeAndVersion(avatarPacket, PACKET_TYPE_HEAD_DATA);
246+
247+ // pack the owner UUID for this script
248+ QByteArray ownerUUID = nodeList->getOwnerUUID().toRfc4122();
249+ memcpy(avatarPacket, ownerUUID.constData(), ownerUUID.size());
250+ numAvatarHeaderBytes += ownerUUID.size();
251+ }
252+
253+ int numAvatarPacketBytes = _avatarData->getBroadcastData(avatarPacket + numAvatarHeaderBytes) + numAvatarHeaderBytes;
254+
255+ nodeList->broadcastToNodes(avatarPacket, numAvatarPacketBytes, &NODE_TYPE_AVATAR_MIXER, 1);
256+ }
224257
225258 if (willSendVisualDataCallBack) {
226259 emit willSendVisualDataCallback();