mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 13:58:51 +02:00
first cut, not working yet
This commit is contained in:
parent
a159e08850
commit
95639c7ce7
7 changed files with 53 additions and 70 deletions
|
@ -8,12 +8,25 @@ set(MACRO_DIR ${ROOT_DIR}/cmake/macros)
|
||||||
# setup for find modules
|
# setup for find modules
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/modules/")
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/modules/")
|
||||||
|
|
||||||
|
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} $ENV{QT_CMAKE_PREFIX_PATH})
|
||||||
|
|
||||||
|
find_package(Qt5Core REQUIRED)
|
||||||
|
find_package(Qt5Gui REQUIRED)
|
||||||
find_package(Qt5Network REQUIRED)
|
find_package(Qt5Network REQUIRED)
|
||||||
|
|
||||||
|
#find_package(Qt5Multimedia REQUIRED)
|
||||||
|
#find_package(Qt5Network REQUIRED)
|
||||||
|
#find_package(Qt5OpenGL REQUIRED)
|
||||||
|
#find_package(Qt5Svg REQUIRED)
|
||||||
|
#find_package(Qt5WebKit REQUIRED)
|
||||||
|
#find_package(Qt5WebKitWidgets REQUIRED)
|
||||||
|
|
||||||
|
|
||||||
include(${MACRO_DIR}/SetupHifiProject.cmake)
|
include(${MACRO_DIR}/SetupHifiProject.cmake)
|
||||||
setup_hifi_project(${TARGET_NAME} TRUE)
|
setup_hifi_project(${TARGET_NAME} TRUE)
|
||||||
|
|
||||||
qt5_use_modules(${TARGET_NAME} Network)
|
qt5_use_modules(${TARGET_NAME} Network)
|
||||||
|
qt5_use_modules(${TARGET_NAME} Gui)
|
||||||
|
|
||||||
# include glm
|
# include glm
|
||||||
include(${MACRO_DIR}/IncludeGLM.cmake)
|
include(${MACRO_DIR}/IncludeGLM.cmake)
|
||||||
|
@ -30,6 +43,7 @@ link_hifi_library(particles ${TARGET_NAME} ${ROOT_DIR})
|
||||||
link_hifi_library(octree-server ${TARGET_NAME} ${ROOT_DIR})
|
link_hifi_library(octree-server ${TARGET_NAME} ${ROOT_DIR})
|
||||||
link_hifi_library(particle-server ${TARGET_NAME} ${ROOT_DIR})
|
link_hifi_library(particle-server ${TARGET_NAME} ${ROOT_DIR})
|
||||||
link_hifi_library(voxel-server ${TARGET_NAME} ${ROOT_DIR})
|
link_hifi_library(voxel-server ${TARGET_NAME} ${ROOT_DIR})
|
||||||
|
link_hifi_library(scriptengine ${TARGET_NAME} ${ROOT_DIR})
|
||||||
#testing
|
#testing
|
||||||
|
|
||||||
include_directories(${ROOT_DIR}/externals/civetweb/include)
|
include_directories(${ROOT_DIR}/externals/civetweb/include)
|
||||||
|
|
|
@ -76,28 +76,6 @@ void Agent::run() {
|
||||||
loop.exec();
|
loop.exec();
|
||||||
|
|
||||||
QString scriptContents(reply->readAll());
|
QString scriptContents(reply->readAll());
|
||||||
QScriptEngine engine;
|
|
||||||
|
|
||||||
// register meta-type for glm::vec3 conversions
|
|
||||||
registerMetaTypes(&engine);
|
|
||||||
|
|
||||||
QScriptValue agentValue = engine.newQObject(this);
|
|
||||||
engine.globalObject().setProperty("Agent", agentValue);
|
|
||||||
|
|
||||||
QScriptValue voxelScripterValue = engine.newQObject(&_voxelScriptingInterface);
|
|
||||||
engine.globalObject().setProperty("Voxels", voxelScripterValue);
|
|
||||||
|
|
||||||
QScriptValue particleScripterValue = engine.newQObject(&_particleScriptingInterface);
|
|
||||||
engine.globalObject().setProperty("Particles", particleScripterValue);
|
|
||||||
|
|
||||||
QScriptValue treeScaleValue = engine.newVariant(QVariant(TREE_SCALE));
|
|
||||||
engine.globalObject().setProperty("TREE_SCALE", treeScaleValue);
|
|
||||||
|
|
||||||
const unsigned int VISUAL_DATA_CALLBACK_USECS = (1.0 / 60.0) * 1000 * 1000;
|
|
||||||
|
|
||||||
// let the VoxelPacketSender know how frequently we plan to call it
|
|
||||||
_voxelScriptingInterface.getVoxelPacketSender()->setProcessCallIntervalHint(VISUAL_DATA_CALLBACK_USECS);
|
|
||||||
_particleScriptingInterface.getParticlePacketSender()->setProcessCallIntervalHint(VISUAL_DATA_CALLBACK_USECS);
|
|
||||||
|
|
||||||
qDebug() << "Downloaded script:" << scriptContents << "\n";
|
qDebug() << "Downloaded script:" << scriptContents << "\n";
|
||||||
QScriptValue result = engine.evaluate(scriptContents);
|
QScriptValue result = engine.evaluate(scriptContents);
|
||||||
|
@ -125,49 +103,12 @@ void Agent::run() {
|
||||||
connect(pingNodesTimer, SIGNAL(timeout()), nodeList, SLOT(pingInactiveNodes()));
|
connect(pingNodesTimer, SIGNAL(timeout()), nodeList, SLOT(pingInactiveNodes()));
|
||||||
pingNodesTimer->start(PING_INACTIVE_NODE_INTERVAL_USECS / 1000);
|
pingNodesTimer->start(PING_INACTIVE_NODE_INTERVAL_USECS / 1000);
|
||||||
|
|
||||||
while (!_isFinished) {
|
const unsigned int VISUAL_DATA_CALLBACK_USECS = (1.0 / 60.0) * 1000 * 1000;
|
||||||
|
// let the VoxelPacketSender know how frequently we plan to call it
|
||||||
|
_voxelScriptingInterface.getVoxelPacketSender()->setProcessCallIntervalHint(VISUAL_DATA_CALLBACK_USECS);
|
||||||
|
_particleScriptingInterface.getParticlePacketSender()->setProcessCallIntervalHint(VISUAL_DATA_CALLBACK_USECS);
|
||||||
|
|
||||||
int usecToSleep = usecTimestamp(&startTime) + (thisFrame++ * VISUAL_DATA_CALLBACK_USECS) - usecTimestampNow();
|
_scriptEngine.setScriptContents(scriptContents);
|
||||||
if (usecToSleep > 0) {
|
|
||||||
usleep(usecToSleep);
|
_scriptEngine.run();
|
||||||
}
|
|
||||||
|
|
||||||
QCoreApplication::processEvents();
|
|
||||||
|
|
||||||
bool willSendVisualDataCallBack = false;
|
|
||||||
|
|
||||||
if (_voxelScriptingInterface.getVoxelPacketSender()->voxelServersExist()) {
|
|
||||||
// allow the scripter's call back to setup visual data
|
|
||||||
willSendVisualDataCallBack = true;
|
|
||||||
|
|
||||||
// release the queue of edit voxel messages.
|
|
||||||
_voxelScriptingInterface.getVoxelPacketSender()->releaseQueuedMessages();
|
|
||||||
|
|
||||||
// since we're in non-threaded mode, call process so that the packets are sent
|
|
||||||
_voxelScriptingInterface.getVoxelPacketSender()->process();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_particleScriptingInterface.getParticlePacketSender()->serversExist()) {
|
|
||||||
// allow the scripter's call back to setup visual data
|
|
||||||
willSendVisualDataCallBack = true;
|
|
||||||
|
|
||||||
// release the queue of edit voxel messages.
|
|
||||||
_particleScriptingInterface.getParticlePacketSender()->releaseQueuedMessages();
|
|
||||||
|
|
||||||
// since we're in non-threaded mode, call process so that the packets are sent
|
|
||||||
_particleScriptingInterface.getParticlePacketSender()->process();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (willSendVisualDataCallBack) {
|
|
||||||
emit willSendVisualDataCallback();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (engine.hasUncaughtException()) {
|
|
||||||
int line = engine.uncaughtExceptionLineNumber();
|
|
||||||
qDebug() << "Uncaught exception at line" << line << ":" << engine.uncaughtException().toString() << "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include <QtCore/QObject>
|
#include <QtCore/QObject>
|
||||||
#include <QtCore/QUrl>
|
#include <QtCore/QUrl>
|
||||||
|
|
||||||
|
#include <ScriptEngine.h>
|
||||||
#include <ThreadedAssignment.h>
|
#include <ThreadedAssignment.h>
|
||||||
|
|
||||||
#include <VoxelScriptingInterface.h>
|
#include <VoxelScriptingInterface.h>
|
||||||
|
@ -35,6 +36,7 @@ signals:
|
||||||
private:
|
private:
|
||||||
VoxelScriptingInterface _voxelScriptingInterface;
|
VoxelScriptingInterface _voxelScriptingInterface;
|
||||||
ParticleScriptingInterface _particleScriptingInterface;
|
ParticleScriptingInterface _particleScriptingInterface;
|
||||||
|
ScriptEngine _scriptEngine;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* defined(__hifi__Agent__) */
|
#endif /* defined(__hifi__Agent__) */
|
||||||
|
|
|
@ -28,6 +28,9 @@ ScriptEngine::ScriptEngine(QString scriptContents, bool wantMenuItems,
|
||||||
const char* scriptMenuName, AbstractMenuInterface* menu) {
|
const char* scriptMenuName, AbstractMenuInterface* menu) {
|
||||||
_scriptContents = scriptContents;
|
_scriptContents = scriptContents;
|
||||||
_isFinished = false;
|
_isFinished = false;
|
||||||
|
_isRunning = false;
|
||||||
|
|
||||||
|
// some clients will use these menu features
|
||||||
_wantMenuItems = wantMenuItems;
|
_wantMenuItems = wantMenuItems;
|
||||||
if (scriptMenuName) {
|
if (scriptMenuName) {
|
||||||
_scriptMenuName = "Stop ";
|
_scriptMenuName = "Stop ";
|
||||||
|
@ -57,10 +60,16 @@ void ScriptEngine::cleanMenuItems() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ScriptEngine::setScriptContents(QString scriptContents) {
|
||||||
|
if (_isRunning) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
_scriptContents = scriptContents;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void ScriptEngine::run() {
|
void ScriptEngine::run() {
|
||||||
|
_isRunning = true;
|
||||||
//setupMenuItems();
|
|
||||||
|
|
||||||
QScriptEngine engine;
|
QScriptEngine engine;
|
||||||
|
|
||||||
_voxelScriptingInterface.init();
|
_voxelScriptingInterface.init();
|
||||||
|
@ -161,6 +170,7 @@ void ScriptEngine::run() {
|
||||||
}
|
}
|
||||||
|
|
||||||
emit finished();
|
emit finished();
|
||||||
|
_isRunning = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptEngine::stop() {
|
void ScriptEngine::stop() {
|
||||||
|
|
|
@ -19,10 +19,12 @@
|
||||||
#include <ParticleScriptingInterface.h>
|
#include <ParticleScriptingInterface.h>
|
||||||
#include <VoxelScriptingInterface.h>
|
#include <VoxelScriptingInterface.h>
|
||||||
|
|
||||||
|
const QString NO_SCRIPT("");
|
||||||
|
|
||||||
class ScriptEngine : public QObject {
|
class ScriptEngine : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
ScriptEngine(QString scriptContents, bool wantMenuItems = false,
|
ScriptEngine(QString scriptContents = NO_SCRIPT, bool wantMenuItems = false,
|
||||||
const char* scriptMenuName = NULL, AbstractMenuInterface* menu = NULL);
|
const char* scriptMenuName = NULL, AbstractMenuInterface* menu = NULL);
|
||||||
|
|
||||||
~ScriptEngine();
|
~ScriptEngine();
|
||||||
|
@ -33,6 +35,9 @@ public:
|
||||||
/// Access the ParticleScriptingInterface in order to initialize it with a custom packet sender and jurisdiction listener
|
/// Access the ParticleScriptingInterface in order to initialize it with a custom packet sender and jurisdiction listener
|
||||||
ParticleScriptingInterface* getParticleScriptingInterface() { return &_particleScriptingInterface; }
|
ParticleScriptingInterface* getParticleScriptingInterface() { return &_particleScriptingInterface; }
|
||||||
|
|
||||||
|
/// sets the script contents, will return false if failed, will fail if script is already running
|
||||||
|
bool setScriptContents(QString scriptContents);
|
||||||
|
|
||||||
void setupMenuItems();
|
void setupMenuItems();
|
||||||
void cleanMenuItems();
|
void cleanMenuItems();
|
||||||
|
|
||||||
|
@ -47,6 +52,7 @@ signals:
|
||||||
protected:
|
protected:
|
||||||
QString _scriptContents;
|
QString _scriptContents;
|
||||||
bool _isFinished;
|
bool _isFinished;
|
||||||
|
bool _isRunning;
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -6,12 +6,15 @@ set(MACRO_DIR ${ROOT_DIR}/cmake/macros)
|
||||||
set(TARGET_NAME shared)
|
set(TARGET_NAME shared)
|
||||||
project(${TARGET_NAME})
|
project(${TARGET_NAME})
|
||||||
|
|
||||||
|
find_package(Qt5Core REQUIRED)
|
||||||
|
find_package(Qt5Gui REQUIRED)
|
||||||
find_package(Qt5Network REQUIRED)
|
find_package(Qt5Network REQUIRED)
|
||||||
|
|
||||||
include(${MACRO_DIR}/SetupHifiLibrary.cmake)
|
include(${MACRO_DIR}/SetupHifiLibrary.cmake)
|
||||||
setup_hifi_library(${TARGET_NAME})
|
setup_hifi_library(${TARGET_NAME})
|
||||||
|
|
||||||
qt5_use_modules(${TARGET_NAME} Network)
|
qt5_use_modules(${TARGET_NAME} Network)
|
||||||
|
qt5_use_modules(${TARGET_NAME} Gui)
|
||||||
|
|
||||||
# include GLM
|
# include GLM
|
||||||
include(${MACRO_DIR}/IncludeGLM.cmake)
|
include(${MACRO_DIR}/IncludeGLM.cmake)
|
||||||
|
|
|
@ -14,6 +14,13 @@
|
||||||
//#include <QHash>
|
//#include <QHash>
|
||||||
//#include <QKeySequence>
|
//#include <QKeySequence>
|
||||||
|
|
||||||
|
//class QMenu;
|
||||||
|
//class QString;
|
||||||
|
//class QObject;
|
||||||
|
//class QKeySequence;
|
||||||
|
//class QAction;
|
||||||
|
//extern enum QAction::MenuRole;
|
||||||
|
|
||||||
class AbstractMenuInterface {
|
class AbstractMenuInterface {
|
||||||
public:
|
public:
|
||||||
virtual QMenu* getActiveScriptsMenu() = 0;
|
virtual QMenu* getActiveScriptsMenu() = 0;
|
||||||
|
|
Loading…
Reference in a new issue