mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 18:50:00 +02:00
pass args to object scripts for mouse events
This commit is contained in:
parent
a5088eece6
commit
e7722dc692
5 changed files with 37 additions and 19 deletions
|
@ -537,33 +537,30 @@ void EntityTreeRenderer::mouseReleaseEvent(QMouseEvent* event, unsigned int devi
|
||||||
_currentClickingOnEntityID = EntityItemID::createInvalidEntityID();
|
_currentClickingOnEntityID = EntityItemID::createInvalidEntityID();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QScriptValueList EntityTreeRenderer::createMouseEventArgs(const EntityItemID& entityID, QMouseEvent* event, unsigned int deviceID) {
|
||||||
|
QScriptValueList args;
|
||||||
|
args << entityID.toScriptValue(_entitiesScriptEngine);
|
||||||
|
args << MouseEvent(*event, deviceID).toScriptValue(_entitiesScriptEngine);
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
|
||||||
void EntityTreeRenderer::mouseMoveEvent(QMouseEvent* event, unsigned int deviceID) {
|
void EntityTreeRenderer::mouseMoveEvent(QMouseEvent* event, unsigned int deviceID) {
|
||||||
|
|
||||||
// experimental...
|
|
||||||
/*
|
|
||||||
qDebug() << "TESTING - ";
|
|
||||||
qDebug() << " _experimentalScriptValue.isValid():" << _experimentalScriptValue.isValid();
|
|
||||||
qDebug() << " _experimentalConstructed.isValid():" << _experimentalConstructed.isValid();
|
|
||||||
qDebug() << " _experimentalConstructed.property(MethodA).isValid():" << _experimentalConstructed.property("MethodA").isValid();
|
|
||||||
_experimentalConstructed.property("MethodA").call();
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
PerformanceTimer perfTimer("EntityTreeRenderer::mouseMoveEvent");
|
PerformanceTimer perfTimer("EntityTreeRenderer::mouseMoveEvent");
|
||||||
PickRay ray = computePickRay(event->x(), event->y());
|
PickRay ray = computePickRay(event->x(), event->y());
|
||||||
RayToEntityIntersectionResult rayPickResult = findRayIntersectionWorker(ray, Octree::TryLock);
|
RayToEntityIntersectionResult rayPickResult = findRayIntersectionWorker(ray, Octree::TryLock);
|
||||||
if (rayPickResult.intersects) {
|
if (rayPickResult.intersects) {
|
||||||
|
QScriptValueList entityScriptArgs = createMouseEventArgs(rayPickResult.entityID, event, deviceID);
|
||||||
|
|
||||||
// load the entity script if needed...
|
// load the entity script if needed...
|
||||||
QScriptValue entityScript = loadEntityScript(rayPickResult.entity);
|
QScriptValue entityScript = loadEntityScript(rayPickResult.entity);
|
||||||
if (entityScript.property("mouseMoveEvent").isValid()) {
|
if (entityScript.property("mouseMoveEvent").isValid()) {
|
||||||
entityScript.property("mouseMoveEvent").call();
|
entityScript.property("mouseMoveEvent").call(entityScript, entityScriptArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
//qDebug() << "mouseMoveEvent over entity:" << rayPickResult.entityID;
|
//qDebug() << "mouseMoveEvent over entity:" << rayPickResult.entityID;
|
||||||
emit mouseMoveOnEntity(rayPickResult.entityID, MouseEvent(*event, deviceID));
|
emit mouseMoveOnEntity(rayPickResult.entityID, MouseEvent(*event, deviceID));
|
||||||
if (entityScript.property("mouseMoveOnEntity").isValid()) {
|
if (entityScript.property("mouseMoveOnEntity").isValid()) {
|
||||||
entityScript.property("mouseMoveOnEntity").call();
|
entityScript.property("mouseMoveOnEntity").call(entityScript, entityScriptArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle the hover logic...
|
// handle the hover logic...
|
||||||
|
@ -573,9 +570,11 @@ void EntityTreeRenderer::mouseMoveEvent(QMouseEvent* event, unsigned int deviceI
|
||||||
if (!_currentHoverOverEntityID.isInvalidID() && rayPickResult.entityID != _currentHoverOverEntityID) {
|
if (!_currentHoverOverEntityID.isInvalidID() && rayPickResult.entityID != _currentHoverOverEntityID) {
|
||||||
emit hoverLeaveEntity(_currentHoverOverEntityID, MouseEvent(*event, deviceID));
|
emit hoverLeaveEntity(_currentHoverOverEntityID, MouseEvent(*event, deviceID));
|
||||||
|
|
||||||
|
QScriptValueList currentHoverEntityArgs = createMouseEventArgs(_currentHoverOverEntityID, event, deviceID);
|
||||||
|
|
||||||
QScriptValue currentHoverEntity = loadEntityScript(_currentHoverOverEntityID);
|
QScriptValue currentHoverEntity = loadEntityScript(_currentHoverOverEntityID);
|
||||||
if (currentHoverEntity.property("hoverLeaveEntity").isValid()) {
|
if (currentHoverEntity.property("hoverLeaveEntity").isValid()) {
|
||||||
currentHoverEntity.property("hoverLeaveEntity").call();
|
currentHoverEntity.property("hoverLeaveEntity").call(currentHoverEntity, currentHoverEntityArgs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -584,7 +583,7 @@ void EntityTreeRenderer::mouseMoveEvent(QMouseEvent* event, unsigned int deviceI
|
||||||
if (rayPickResult.entityID != _currentHoverOverEntityID) {
|
if (rayPickResult.entityID != _currentHoverOverEntityID) {
|
||||||
emit hoverEnterEntity(rayPickResult.entityID, MouseEvent(*event, deviceID));
|
emit hoverEnterEntity(rayPickResult.entityID, MouseEvent(*event, deviceID));
|
||||||
if (entityScript.property("hoverEnterEntity").isValid()) {
|
if (entityScript.property("hoverEnterEntity").isValid()) {
|
||||||
entityScript.property("hoverEnterEntity").call();
|
entityScript.property("hoverEnterEntity").call(entityScript, entityScriptArgs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -592,7 +591,7 @@ void EntityTreeRenderer::mouseMoveEvent(QMouseEvent* event, unsigned int deviceI
|
||||||
// we should send our hover over event
|
// we should send our hover over event
|
||||||
emit hoverOverEntity(rayPickResult.entityID, MouseEvent(*event, deviceID));
|
emit hoverOverEntity(rayPickResult.entityID, MouseEvent(*event, deviceID));
|
||||||
if (entityScript.property("hoverOverEntity").isValid()) {
|
if (entityScript.property("hoverOverEntity").isValid()) {
|
||||||
entityScript.property("hoverOverEntity").call();
|
entityScript.property("hoverOverEntity").call(entityScript, entityScriptArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
// remember what we're hovering over
|
// remember what we're hovering over
|
||||||
|
@ -605,9 +604,11 @@ void EntityTreeRenderer::mouseMoveEvent(QMouseEvent* event, unsigned int deviceI
|
||||||
if (!_currentHoverOverEntityID.isInvalidID()) {
|
if (!_currentHoverOverEntityID.isInvalidID()) {
|
||||||
emit hoverLeaveEntity(_currentHoverOverEntityID, MouseEvent(*event, deviceID));
|
emit hoverLeaveEntity(_currentHoverOverEntityID, MouseEvent(*event, deviceID));
|
||||||
|
|
||||||
|
QScriptValueList currentHoverEntityArgs = createMouseEventArgs(_currentHoverOverEntityID, event, deviceID);
|
||||||
|
|
||||||
QScriptValue currentHoverEntity = loadEntityScript(_currentHoverOverEntityID);
|
QScriptValue currentHoverEntity = loadEntityScript(_currentHoverOverEntityID);
|
||||||
if (currentHoverEntity.property("hoverLeaveEntity").isValid()) {
|
if (currentHoverEntity.property("hoverLeaveEntity").isValid()) {
|
||||||
currentHoverEntity.property("hoverLeaveEntity").call();
|
currentHoverEntity.property("hoverLeaveEntity").call(currentHoverEntity, currentHoverEntityArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
_currentHoverOverEntityID = EntityItemID::createInvalidEntityID(); // makes it the unknown ID
|
_currentHoverOverEntityID = EntityItemID::createInvalidEntityID(); // makes it the unknown ID
|
||||||
|
@ -618,9 +619,12 @@ void EntityTreeRenderer::mouseMoveEvent(QMouseEvent* event, unsigned int deviceI
|
||||||
// not yet released the hold then this is still considered a holdingClickOnEntity event
|
// not yet released the hold then this is still considered a holdingClickOnEntity event
|
||||||
if (!_currentClickingOnEntityID.isInvalidID()) {
|
if (!_currentClickingOnEntityID.isInvalidID()) {
|
||||||
emit holdingClickOnEntity(_currentClickingOnEntityID, MouseEvent(*event, deviceID));
|
emit holdingClickOnEntity(_currentClickingOnEntityID, MouseEvent(*event, deviceID));
|
||||||
|
|
||||||
|
QScriptValueList currentClickingEntityArgs = createMouseEventArgs(_currentClickingOnEntityID, event, deviceID);
|
||||||
|
|
||||||
QScriptValue currentClickingEntity = loadEntityScript(_currentClickingOnEntityID);
|
QScriptValue currentClickingEntity = loadEntityScript(_currentClickingOnEntityID);
|
||||||
if (currentClickingEntity.property("holdingClickOnEntity").isValid()) {
|
if (currentClickingEntity.property("holdingClickOnEntity").isValid()) {
|
||||||
currentClickingEntity.property("holdingClickOnEntity").call();
|
currentClickingEntity.property("holdingClickOnEntity").call(currentClickingEntity, currentClickingEntityArgs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,6 +113,7 @@ private:
|
||||||
|
|
||||||
QScriptValue loadEntityScript(EntityItem* entity);
|
QScriptValue loadEntityScript(EntityItem* entity);
|
||||||
QScriptValue loadEntityScript(const EntityItemID& entityItemID);
|
QScriptValue loadEntityScript(const EntityItemID& entityItemID);
|
||||||
|
QScriptValueList createMouseEventArgs(const EntityItemID& entityID, QMouseEvent* event, unsigned int deviceID);
|
||||||
|
|
||||||
QHash<EntityItemID, QScriptValue> _entityScripts;
|
QHash<EntityItemID, QScriptValue> _entityScripts;
|
||||||
};
|
};
|
||||||
|
|
|
@ -124,6 +124,10 @@ void EntityItemID::handleAddEntityResponse(const QByteArray& packet) {
|
||||||
_tokenIDsToIDs[creatorTokenID] = entityID;
|
_tokenIDsToIDs[creatorTokenID] = entityID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QScriptValue EntityItemID::toScriptValue(QScriptEngine* engine) const {
|
||||||
|
return EntityItemIDtoScriptValue(engine, *this);
|
||||||
|
}
|
||||||
|
|
||||||
QScriptValue EntityItemIDtoScriptValue(QScriptEngine* engine, const EntityItemID& id) {
|
QScriptValue EntityItemIDtoScriptValue(QScriptEngine* engine, const EntityItemID& id) {
|
||||||
QScriptValue obj = engine->newObject();
|
QScriptValue obj = engine->newObject();
|
||||||
obj.setProperty("id", id.id.toString());
|
obj.setProperty("id", id.id.toString());
|
||||||
|
|
|
@ -57,6 +57,8 @@ public:
|
||||||
static uint32_t getNextCreatorTokenID();
|
static uint32_t getNextCreatorTokenID();
|
||||||
static void handleAddEntityResponse(const QByteArray& packet);
|
static void handleAddEntityResponse(const QByteArray& packet);
|
||||||
static EntityItemID readEntityItemIDFromBuffer(const unsigned char* data, int bytesLeftToRead);
|
static EntityItemID readEntityItemIDFromBuffer(const unsigned char* data, int bytesLeftToRead);
|
||||||
|
|
||||||
|
QScriptValue toScriptValue(QScriptEngine* engine) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class EntityTree;
|
friend class EntityTree;
|
||||||
|
@ -71,6 +73,12 @@ inline bool operator<(const EntityItemID& a, const EntityItemID& b) {
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool operator==(const EntityItemID& a, const EntityItemID& b) {
|
inline bool operator==(const EntityItemID& a, const EntityItemID& b) {
|
||||||
|
if (a.isInvalidID() && b.isInvalidID()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (a.isInvalidID() != b.isInvalidID()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (a.id == UNKNOWN_ENTITY_ID || b.id == UNKNOWN_ENTITY_ID) {
|
if (a.id == UNKNOWN_ENTITY_ID || b.id == UNKNOWN_ENTITY_ID) {
|
||||||
return a.creatorTokenID == b.creatorTokenID;
|
return a.creatorTokenID == b.creatorTokenID;
|
||||||
}
|
}
|
||||||
|
@ -101,5 +109,4 @@ Q_DECLARE_METATYPE(QVector<EntityItemID>);
|
||||||
QScriptValue EntityItemIDtoScriptValue(QScriptEngine* engine, const EntityItemID& properties);
|
QScriptValue EntityItemIDtoScriptValue(QScriptEngine* engine, const EntityItemID& properties);
|
||||||
void EntityItemIDfromScriptValue(const QScriptValue &object, EntityItemID& properties);
|
void EntityItemIDfromScriptValue(const QScriptValue &object, EntityItemID& properties);
|
||||||
|
|
||||||
|
|
||||||
#endif // hifi_EntityItemID_h
|
#endif // hifi_EntityItemID_h
|
||||||
|
|
|
@ -21,6 +21,8 @@ public:
|
||||||
|
|
||||||
static QScriptValue toScriptValue(QScriptEngine* engine, const MouseEvent& event);
|
static QScriptValue toScriptValue(QScriptEngine* engine, const MouseEvent& event);
|
||||||
static void fromScriptValue(const QScriptValue& object, MouseEvent& event);
|
static void fromScriptValue(const QScriptValue& object, MouseEvent& event);
|
||||||
|
|
||||||
|
QScriptValue toScriptValue(QScriptEngine* engine) const { return MouseEvent::toScriptValue(engine, *this); }
|
||||||
|
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
|
|
Loading…
Reference in a new issue