History

Working experimental first version.

Howard Stearns committed 11 years ago

Commit 277f5ef1 parent 8c0bf196 files · +70 −0Browse files

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

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+24−0
@@ -389,6 +389,30 @@ void ScriptEngine::registerGetterSetter(const QString& name, QScriptEngine::Func · 388 unmodified lines
389 }389 }
390}390}
391 391
392void ScriptEngine::addEntityEventHandler(const EntityItemID& entityID, const QString& eventName, QScriptValue handler) {
393 auto entities = DependencyManager::get<EntityScriptingInterface>();
394 if (!_registeredHandlers.contains(entityID)) {
395 _registeredHandlers[entityID] = RegisteredEventHandlers();
396 }
397 _registeredHandlers[entityID][eventName] = handler;
398 if (eventName == "collisionWithEntity") {
399 connect(entities.data(), &EntityScriptingInterface::collisionWithEntity, this, &ScriptEngine::collisionWithEntity);
400 }
401 // FIXME: deletingEntity, changingEntityID
402}
403void ScriptEngine::removeEntityEventHandler(const EntityItemID& entityID, const QString& eventName, QScriptValue handler) {
404 // FIXME
405}
406void ScriptEngine::collisionWithEntity(const EntityItemID& idA, const EntityItemID& idB, const Collision& collision) {
407 if (!_registeredHandlers.contains(idA)) return;
408 const RegisteredEventHandlers& handlersOnEntity = _registeredHandlers[idA];
409 if (!handlersOnEntity.contains("collisionWithEntity")) return;
410 // FIXME: Need one more level of indirection. We need to allow multiple handlers per event, registered by different scripts.
411 QScriptValue handlerForEvent = handlersOnEntity["collisionWithEntity"];
412 QScriptValueList args = QScriptValueList () << idA.toScriptValue(this) << idB.toScriptValue(this) << collisionToScriptValue(this, collision);
413 handlerForEvent.call(QScriptValue(), args);
414}
415
392void ScriptEngine::evaluate() {416void ScriptEngine::evaluate() {
393 if (_stoppingAllScripts) {417 if (_stoppingAllScripts) {
394 return; // bail early418 return; // bail early