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
38 return soundScriptValue;38 return soundScriptValue;
39}39}
40 40
41ScriptEngine::ScriptEngine(const QString& scriptContents, bool wantMenuItems,41
42 const char* scriptMenuName, AbstractMenuInterface* menu,42ScriptEngine::ScriptEngine(const QString& scriptContents, bool wantMenuItems, const QString& fileNameString, AbstractMenuInterface* menu,
43 AbstractControllerScriptingInterface* controllerScriptingInterface) {43 AbstractControllerScriptingInterface* controllerScriptingInterface) :
44 _avatarData(NULL)
45{
44 _scriptContents = scriptContents;46 _scriptContents = scriptContents;
45 _isFinished = false;47 _isFinished = false;
46 _isRunning = false;48 _isRunning = false;
47 _isInitialized = false;49 _isInitialized = false;
50 _fileNameString = fileNameString;
51
52 QByteArray fileNameAscii = fileNameString.toLocal8Bit();
53 const char* scriptMenuName = fileNameAscii.data();
48 54
49 // some clients will use these menu features55 // some clients will use these menu features
50 _wantMenuItems = wantMenuItems;56 _wantMenuItems = wantMenuItems;
51 if (scriptMenuName) {57 if (!fileNameString.isEmpty()) {
52 _scriptMenuName = "Stop ";58 _scriptMenuName = "Stop ";
53 _scriptMenuName.append(scriptMenuName);59 _scriptMenuName.append(scriptMenuName);
54 _scriptMenuName.append(QString(" [%1]").arg(_scriptNumber));60 _scriptMenuName.append(QString(" [%1]").arg(_scriptNumber));
@@ -65,6 +71,15 @@ ScriptEngine::~ScriptEngine() { · 10 unmodified lines
65 //printf("ScriptEngine::~ScriptEngine()...\n");71 //printf("ScriptEngine::~ScriptEngine()...\n");
66}72}
67 73
74void 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}
68 83
69void ScriptEngine::setupMenuItems() {84void ScriptEngine::setupMenuItems() {
70 if (_menu && _wantMenuItems) {85 if (_menu && _wantMenuItems) {
@@ -121,6 +136,8 @@ void ScriptEngine::init() { · 50 unmodified lines
121 136
122 QScriptValue audioScriptingInterfaceValue = _engine.newQObject(&_audioScriptingInterface);137 QScriptValue audioScriptingInterfaceValue = _engine.newQObject(&_audioScriptingInterface);
123 _engine.globalObject().setProperty("Audio", audioScriptingInterfaceValue);138 _engine.globalObject().setProperty("Audio", audioScriptingInterfaceValue);
139
140 registerGlobalObject("Data", &_dataServerScriptingInterface);
124 141
125 if (_controllerScriptingInterface) {142 if (_controllerScriptingInterface) {
126 QScriptValue controllerScripterValue = _engine.newQObject(_controllerScriptingInterface);143 QScriptValue controllerScripterValue = _engine.newQObject(_controllerScriptingInterface);
@@ -142,6 +159,10 @@ void ScriptEngine::registerGlobalObject(const QString& name, QObject* object) { · 15 unmodified lines
142 _engine.globalObject().setProperty(name, value);159 _engine.globalObject().setProperty(name, value);
143}160}
144 161
162void ScriptEngine::preEvaluateReset() {
163 _dataServerScriptingInterface.refreshUUID();
164}
165
145void ScriptEngine::evaluate() {166void ScriptEngine::evaluate() {
146 if (!_isInitialized) {167 if (!_isInitialized) {
147 init();168 init();
@@ -171,6 +192,8 @@ void ScriptEngine::run() { · 23 unmodified lines
171 gettimeofday(&startTime, NULL);192 gettimeofday(&startTime, NULL);
172 193
173 int thisFrame = 0;194 int thisFrame = 0;
195
196 NodeList* nodeList = NodeList::getInstance();
174 197
175 while (!_isFinished) {198 while (!_isFinished) {
176 int usecToSleep = usecTimestamp(&startTime) + (thisFrame++ * VISUAL_DATA_CALLBACK_USECS) - usecTimestampNow();199 int usecToSleep = usecTimestamp(&startTime) + (thisFrame++ * VISUAL_DATA_CALLBACK_USECS) - usecTimestampNow();
@@ -214,6 +237,26 @@ void ScriptEngine::run() { · 37 unmodified lines
214 _particlesScriptingInterface.getParticlePacketSender()->process();237 _particlesScriptingInterface.getParticlePacketSender()->process();
215 }238 }
216 }239 }
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 }
217 260
218 if (willSendVisualDataCallBack) {261 if (willSendVisualDataCallBack) {
219 emit willSendVisualDataCallback();262 emit willSendVisualDataCallback();
@@ -232,9 +275,11 @@ void ScriptEngine::run() { · 12 unmodified lines
232 thread()->quit();275 thread()->quit();
233 }276 }
234 277
235 emit finished();278 emit finished(_fileNameString);
279
236 _isRunning = false;280 _isRunning = false;
237}281}
282
238void ScriptEngine::stop() {283void ScriptEngine::stop() {
239 _isFinished = true;284 _isFinished = true;
240}285}