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
389389 }
390390 }
391391
392+void 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+}
403+void ScriptEngine::removeEntityEventHandler(const EntityItemID& entityID, const QString& eventName, QScriptValue handler) {
404+ // FIXME
405+}
406+void 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+
392416 void ScriptEngine::evaluate() {
393417 if (_stoppingAllScripts) {
394418 return; // bail early