History

Merge branch master

Mohammed Nafees committed 12 years ago

Commit 29d64372 parents dd74ea6 d441e6a645 files · +22419 −7869Browse files

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

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+52−9
@@ -1,9 +1,12 @@
11 //
22 // ScriptEngine.cpp
3−// hifi
3+// libraries/script-engine/src
44 //
55 // Created by Brad Hefta-Gaub on 12/14/13.
6−// Copyright (c) 2013 HighFidelity, Inc. All rights reserved.
6+// Copyright 2013 High Fidelity, Inc.
7+//
8+// Distributed under the Apache License, Version 2.0.
9+// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
710 //
811
912 #include <QtCore/QCoreApplication>
@@ -25,6 +28,7 @@ · 15 unmodified lines
2528
2629 #include <Sound.h>
2730
31+#include "AnimationObject.h"
2832 #include "MenuItemProperties.h"
2933 #include "LocalVoxels.h"
3034 #include "ScriptEngine.h"
@@ -39,6 +43,11 @@ static QScriptValue soundConstructor(QScriptContext* context, QScriptEngine* eng · 8 unmodified lines
3943 return soundScriptValue;
4044 }
4145
46+static QScriptValue debugPrint(QScriptContext* context, QScriptEngine* engine){
47+ qDebug() << "script:print()<<" << context->argument(0).toString();
48+ engine->evaluate("Script.print('" + context->argument(0).toString() + "')");
49+ return QScriptValue();
50+}
4251
4352 ScriptEngine::ScriptEngine(const QString& scriptContents, const QString& fileNameString,
4453 AbstractControllerScriptingInterface* controllerScriptingInterface) :
@@ -60,7 +69,9 @@ ScriptEngine::ScriptEngine(const QString& scriptContents, const QString& fileNam · 15 unmodified lines
6069 _scriptName(),
6170 _fileNameString(fileNameString),
6271 _quatLibrary(),
63− _vec3Library()
72+ _vec3Library(),
73+ _uuidLibrary(),
74+ _animationCache(this)
6475 {
6576 }
6677
@@ -83,15 +94,18 @@ ScriptEngine::ScriptEngine(const QUrl& scriptURL, · 16 unmodified lines
8394 _scriptName(),
8495 _fileNameString(),
8596 _quatLibrary(),
86− _vec3Library()
97+ _vec3Library(),
98+ _uuidLibrary(),
99+ _animationCache(this)
87100 {
88101 QString scriptURLString = scriptURL.toString();
89102 _fileNameString = scriptURLString;
90103
91104 QUrl url(scriptURL);
92105
93− // if the scheme is empty, maybe they typed in a file, let's try
94− if (url.scheme().isEmpty()) {
106+ // if the scheme length is one or lower, maybe they typed in a file, let's try
107+ const int WINDOWS_DRIVE_LETTER_SIZE = 1;
108+ if (url.scheme().size() <= WINDOWS_DRIVE_LETTER_SIZE) {
95109 url = QUrl::fromLocalFile(scriptURLString);
96110 }
97111
@@ -106,6 +120,7 @@ ScriptEngine::ScriptEngine(const QUrl& scriptURL, · 8 unmodified lines
106120 _scriptContents = in.readAll();
107121 } else {
108122 qDebug() << "ERROR Loading file:" << fileName;
123+ emit errorMessage("ERROR Loading file:" + fileName);
109124 }
110125 } else {
111126 QNetworkAccessManager* networkManager = new QNetworkAccessManager(this);
@@ -147,6 +162,14 @@ void ScriptEngine::setAvatarData(AvatarData* avatarData, const QString& objectNa · 35 unmodified lines
147162 registerGlobalObject(objectName, _avatarData);
148163 }
149164
165+void ScriptEngine::setAvatarHashMap(AvatarHashMap* avatarHashMap, const QString& objectName) {
166+ // remove the old Avatar property, if it exists
167+ _engine.globalObject().setProperty(objectName, QScriptValue());
168+
169+ // give the script engine the new avatar hash map
170+ registerGlobalObject(objectName, avatarHashMap);
171+}
172+
150173 bool ScriptEngine::setScriptContents(const QString& scriptContents, const QString& fileNameString) {
151174 if (_isRunning) {
152175 return false;
@@ -174,13 +197,18 @@ void ScriptEngine::init() { · 21 unmodified lines
174197 registerVoxelMetaTypes(&_engine);
175198 registerEventTypes(&_engine);
176199 registerMenuItemProperties(&_engine);
200+ registerAnimationTypes(&_engine);
177201
178202 qScriptRegisterMetaType(&_engine, ParticlePropertiesToScriptValue, ParticlePropertiesFromScriptValue);
179203 qScriptRegisterMetaType(&_engine, ParticleIDtoScriptValue, ParticleIDfromScriptValue);
180204 qScriptRegisterSequenceMetaType<QVector<ParticleID> >(&_engine);
181205 qScriptRegisterSequenceMetaType<QVector<glm::vec2> >(&_engine);
206+ qScriptRegisterSequenceMetaType<QVector<glm::quat> >(&_engine);
182207 qScriptRegisterSequenceMetaType<QVector<QString> >(&_engine);
183208
209+ QScriptValue printConstructorValue = _engine.newFunction(debugPrint);
210+ _engine.globalObject().setProperty("print", printConstructorValue);
211+
184212 QScriptValue soundConstructorValue = _engine.newFunction(soundConstructor);
185213 QScriptValue soundMetaObject = _engine.newQMetaObject(&Sound::staticMetaObject, soundConstructorValue);
186214 _engine.globalObject().setProperty("Sound", soundMetaObject);
@@ -197,6 +225,8 @@ void ScriptEngine::init() { · 10 unmodified lines
197225 registerGlobalObject("Particles", &_particlesScriptingInterface);
198226 registerGlobalObject("Quat", &_quatLibrary);
199227 registerGlobalObject("Vec3", &_vec3Library);
228+ registerGlobalObject("Uuid", &_uuidLibrary);
229+ registerGlobalObject("AnimationCache", &_animationCache);
200230
201231 registerGlobalObject("Voxels", &_voxelsScriptingInterface);
202232
@@ -225,6 +255,7 @@ void ScriptEngine::evaluate() { · 22 unmodified lines
225255 if (_engine.hasUncaughtException()) {
226256 int line = _engine.uncaughtExceptionLineNumber();
227257 qDebug() << "Uncaught exception at line" << line << ":" << result.toString();
258+ emit errorMessage("Uncaught exception at line" + QString::number(line) + ":" + result.toString());
228259 }
229260 }
230261
@@ -245,15 +276,18 @@ void ScriptEngine::run() { · 14 unmodified lines
245276 init();
246277 }
247278 _isRunning = true;
279+ emit runningStateChanged();
248280
249281 QScriptValue result = _engine.evaluate(_scriptContents);
250282 if (_engine.hasUncaughtException()) {
251283 int line = _engine.uncaughtExceptionLineNumber();
284+
252285 qDebug() << "Uncaught exception at line" << line << ":" << result.toString();
286+ emit errorMessage("Uncaught exception at line" + QString::number(line) + ":" + result.toString());
253287 }
254288
255− timeval startTime;
256− gettimeofday(&startTime, NULL);
289+ QElapsedTimer startTime;
290+ startTime.start();
257291
258292 int thisFrame = 0;
259293
@@ -262,7 +296,7 @@ void ScriptEngine::run() { · 2 unmodified lines
262296 qint64 lastUpdate = usecTimestampNow();
263297
264298 while (!_isFinished) {
265− int usecToSleep = usecTimestamp(&startTime) + (thisFrame++ * SCRIPT_DATA_CALLBACK_USECS) - usecTimestampNow();
299+ int usecToSleep = (thisFrame++ * SCRIPT_DATA_CALLBACK_USECS) - startTime.nsecsElapsed() / 1000; // nsec to usec
266300 if (usecToSleep > 0) {
267301 usleep(usecToSleep);
268302 }
@@ -380,6 +414,7 @@ void ScriptEngine::run() { · 111 unmodified lines
380414 if (_engine.hasUncaughtException()) {
381415 int line = _engine.uncaughtExceptionLineNumber();
382416 qDebug() << "Uncaught exception at line" << line << ":" << _engine.uncaughtException().toString();
417+ emit errorMessage("Uncaught exception at line" + QString::number(line) + ":" + _engine.uncaughtException().toString());
383418 }
384419 }
385420 emit scriptEnding();
@@ -415,10 +450,12 @@ void ScriptEngine::run() { · 29 unmodified lines
415450 emit finished(_fileNameString);
416451
417452 _isRunning = false;
453+ emit runningStateChanged();
418454 }
419455
420456 void ScriptEngine::stop() {
421457 _isFinished = true;
458+ emit runningStateChanged();
422459 }
423460
424461 void ScriptEngine::timerFired() {
@@ -489,6 +526,10 @@ QUrl ScriptEngine::resolveInclude(const QString& include) const { · 64 unmodified lines
489526 return url;
490527 }
491528
529+void ScriptEngine::print(const QString& message) {
530+ emit printedMessage(message);
531+}
532+
492533 void ScriptEngine::include(const QString& includeFile) {
493534 QUrl url = resolveInclude(includeFile);
494535 QString includeContents;
@@ -502,6 +543,7 @@ void ScriptEngine::include(const QString& includeFile) { · 7 unmodified lines
502543 includeContents = in.readAll();
503544 } else {
504545 qDebug() << "ERROR Loading file:" << fileName;
546+ emit errorMessage("ERROR Loading file:" + fileName);
505547 }
506548 } else {
507549 QNetworkAccessManager* networkManager = new QNetworkAccessManager(this);
@@ -517,5 +559,6 @@ void ScriptEngine::include(const QString& includeFile) { · 9 unmodified lines
517559 if (_engine.hasUncaughtException()) {
518560 int line = _engine.uncaughtExceptionLineNumber();
519561 qDebug() << "Uncaught exception at (" << includeFile << ") line" << line << ":" << result.toString();
562+ emit errorMessage("Uncaught exception at (" + includeFile + ") line" + QString::number(line) + ":" + result.toString());
520563 }
521564 }