History

Merge branch 'master' of git://github.com/worklist/hifi into new_particle_scripting_interface

Brad Hefta-Gaub committed 12 years ago

Commit fe5a8d92 parents cefac50 7fb062c44 files · +5159 −426Browse files

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

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+50−5
@@ -38,17 +38,23 @@ static QScriptValue soundConstructor(QScriptContext* context, QScriptEngine* eng · 37 unmodified lines
3838 return soundScriptValue;
3939 }
4040
41−ScriptEngine::ScriptEngine(const QString& scriptContents, bool wantMenuItems,
42− const char* scriptMenuName, AbstractMenuInterface* menu,
43− AbstractControllerScriptingInterface* controllerScriptingInterface) {
41+
42+ScriptEngine::ScriptEngine(const QString& scriptContents, bool wantMenuItems, const QString& fileNameString, AbstractMenuInterface* menu,
43+ AbstractControllerScriptingInterface* controllerScriptingInterface) :
44+ _avatarData(NULL)
45+{
4446 _scriptContents = scriptContents;
4547 _isFinished = false;
4648 _isRunning = false;
4749 _isInitialized = false;
50+ _fileNameString = fileNameString;
51+
52+ QByteArray fileNameAscii = fileNameString.toLocal8Bit();
53+ const char* scriptMenuName = fileNameAscii.data();
4854
4955 // some clients will use these menu features
5056 _wantMenuItems = wantMenuItems;
51− if (scriptMenuName) {
57+ if (!fileNameString.isEmpty()) {
5258 _scriptMenuName = "Stop ";
5359 _scriptMenuName.append(scriptMenuName);
5460 _scriptMenuName.append(QString(" [%1]").arg(_scriptNumber));
@@ -65,6 +71,15 @@ ScriptEngine::~ScriptEngine() { · 10 unmodified lines
6571 //printf("ScriptEngine::~ScriptEngine()...\n");
6672 }
6773
74+void ScriptEngine::setAvatarData(AvatarData* avatarData) {
75+ _avatarData = avatarData;
76+
77+ // remove the old Avatar property, if it exists
78+ _engine.globalObject().setProperty("Avatar", QScriptValue());
79+
80+ // give the script engine the new Avatar script property
81+ registerGlobalObject("Avatar", _avatarData);
82+}
6883
6984 void ScriptEngine::setupMenuItems() {
7085 if (_menu && _wantMenuItems) {
@@ -121,6 +136,8 @@ void ScriptEngine::init() { · 50 unmodified lines
121136
122137 QScriptValue audioScriptingInterfaceValue = _engine.newQObject(&_audioScriptingInterface);
123138 _engine.globalObject().setProperty("Audio", audioScriptingInterfaceValue);
139+
140+ registerGlobalObject("Data", &_dataServerScriptingInterface);
124141
125142 if (_controllerScriptingInterface) {
126143 QScriptValue controllerScripterValue = _engine.newQObject(_controllerScriptingInterface);
@@ -142,6 +159,10 @@ void ScriptEngine::registerGlobalObject(const QString& name, QObject* object) { · 15 unmodified lines
142159 _engine.globalObject().setProperty(name, value);
143160 }
144161
162+void ScriptEngine::preEvaluateReset() {
163+ _dataServerScriptingInterface.refreshUUID();
164+}
165+
145166 void ScriptEngine::evaluate() {
146167 if (!_isInitialized) {
147168 init();
@@ -171,6 +192,8 @@ void ScriptEngine::run() { · 23 unmodified lines
171192 gettimeofday(&startTime, NULL);
172193
173194 int thisFrame = 0;
195+
196+ NodeList* nodeList = NodeList::getInstance();
174197
175198 while (!_isFinished) {
176199 int usecToSleep = usecTimestamp(&startTime) + (thisFrame++ * VISUAL_DATA_CALLBACK_USECS) - usecTimestampNow();
@@ -214,6 +237,26 @@ void ScriptEngine::run() { · 37 unmodified lines
214237 _particlesScriptingInterface.getParticlePacketSender()->process();
215238 }
216239 }
240+
241+ if (_isAvatar && _avatarData) {
242+ static unsigned char avatarPacket[MAX_PACKET_SIZE];
243+ static int numAvatarHeaderBytes = 0;
244+
245+ if (numAvatarHeaderBytes == 0) {
246+ // pack the avatar header bytes the first time
247+ // unlike the _avatar.getBroadcastData these won't change
248+ numAvatarHeaderBytes = populateTypeAndVersion(avatarPacket, PACKET_TYPE_HEAD_DATA);
249+
250+ // pack the owner UUID for this script
251+ QByteArray ownerUUID = nodeList->getOwnerUUID().toRfc4122();
252+ memcpy(avatarPacket + numAvatarHeaderBytes, ownerUUID.constData(), ownerUUID.size());
253+ numAvatarHeaderBytes += ownerUUID.size();
254+ }
255+
256+ int numAvatarPacketBytes = _avatarData->getBroadcastData(avatarPacket + numAvatarHeaderBytes) + numAvatarHeaderBytes;
257+
258+ nodeList->broadcastToNodes(avatarPacket, numAvatarPacketBytes, &NODE_TYPE_AVATAR_MIXER, 1);
259+ }
217260
218261 if (willSendVisualDataCallBack) {
219262 emit willSendVisualDataCallback();
@@ -232,9 +275,11 @@ void ScriptEngine::run() { · 12 unmodified lines
232275 thread()->quit();
233276 }
234277
235− emit finished();
278+ emit finished(_fileNameString);
279+
236280 _isRunning = false;
237281 }
282+
238283 void ScriptEngine::stop() {
239284 _isFinished = true;
240285 }