From a1ec44b8e0aa5640e1e660775b18bf168417dcd6 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Mon, 26 Jan 2015 12:05:57 -0800 Subject: [PATCH] add developer menu item to disable sending physics updates --- .../utilities/tools/developerMenuItems.js | 20 +++++++++++++++++++ libraries/entities/src/EntityItem.cpp | 2 ++ libraries/entities/src/EntityItem.h | 7 +++++++ .../entities/src/EntityScriptingInterface.cpp | 9 +++++++++ .../entities/src/EntityScriptingInterface.h | 3 +++ libraries/physics/src/EntityMotionState.cpp | 16 +++++++++------ libraries/physics/src/EntityMotionState.h | 1 + 7 files changed, 52 insertions(+), 6 deletions(-) diff --git a/examples/utilities/tools/developerMenuItems.js b/examples/utilities/tools/developerMenuItems.js index 3a274c7083..765e85579e 100644 --- a/examples/utilities/tools/developerMenuItems.js +++ b/examples/utilities/tools/developerMenuItems.js @@ -18,6 +18,7 @@ function setupMenus() { } if (!Menu.menuExists("Developer > Entities")) { Menu.addMenu("Developer > Entities"); + /* Menu.addMenuItem({ menuName: "Developer > Entities", menuItemName: "Display Model Bounds", isCheckable: true, isChecked: false }); Menu.addMenuItem({ menuName: "Developer > Entities", menuItemName: "Display Model Triangles", isCheckable: true, isChecked: false }); Menu.addMenuItem({ menuName: "Developer > Entities", menuItemName: "Display Model Element Bounds", isCheckable: true, isChecked: false }); @@ -26,9 +27,28 @@ function setupMenus() { Menu.addMenuItem({ menuName: "Developer > Entities", menuItemName: "Don't Attempt Render Entities as Scene", isCheckable: true, isChecked: false }); Menu.addMenuItem({ menuName: "Developer > Entities", menuItemName: "Don't Do Precision Picking", isCheckable: true, isChecked: false }); Menu.addMenuItem({ menuName: "Developer > Entities", menuItemName: "Disable Light Entities", isCheckable: true, isChecked: false }); + */ + Menu.addMenuItem({ menuName: "Developer > Entities", menuItemName: "Don't send collision updates to server", isCheckable: true, isChecked: false }); } } +Menu.menuItemEvent.connect(function (menuItem) { + print("menuItemEvent() in JS... menuItem=" + menuItem); + + if (menuItem == "Don't send collision updates to server") { + var dontSendUpdates = Menu.isOptionChecked("Don't send collision updates to server"); + print(" dontSendUpdates... checked=" + dontSendUpdates); + Entities.setSendPhysicsUpdates(!dontSendUpdates); + } +}); + +setupMenus(); + +// register our scriptEnding callback +Script.scriptEnding.connect(scriptEnding); + + + function scriptEnding() { Menu.removeMenu("Developer > Entities"); } diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 3315cdd2e7..ab859c7282 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -22,6 +22,8 @@ #include "EntityTree.h" quint64 EntityItem::lastCollisionTime = 0; +bool EntityItem::_sendPhysicsUpdates = true; + void EntityItem::initFromEntityItemID(const EntityItemID& entityItemID) { diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index ad540d1df9..1c35a0aa3d 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -289,8 +289,15 @@ public: void setPhysicsInfo(void* data) { _physicsInfo = data; } EntityTreeElement* getElement() const { return _element; } + + static void setSendPhysicsUpdates(bool value) { _sendPhysicsUpdates = value; } + static bool getSendPhysicsUpdates() { return _sendPhysicsUpdates; } + + protected: + static bool _sendPhysicsUpdates; + virtual void initFromEntityItemID(const EntityItemID& entityItemID); // maybe useful to allow subclasses to init virtual void recalculateCollisionShape(); diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 6226012052..599649aad0 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -14,6 +14,7 @@ #include "LightEntityItem.h" #include "ModelEntityItem.h" + EntityScriptingInterface::EntityScriptingInterface() : _nextCreatorTokenID(0), _entityTree(NULL) @@ -234,6 +235,14 @@ bool EntityScriptingInterface::getLightsArePickable() const { return LightEntityItem::getLightsArePickable(); } +void EntityScriptingInterface::setSendPhysicsUpdates(bool value) { + EntityItem::setSendPhysicsUpdates(value); +} + +bool EntityScriptingInterface::getSendPhysicsUpdates() const { + return EntityItem::getSendPhysicsUpdates(); +} + RayToEntityIntersectionResult::RayToEntityIntersectionResult() : intersects(false), diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index e0fc721516..3585cce946 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -99,6 +99,9 @@ public slots: Q_INVOKABLE void setLightsArePickable(bool value); Q_INVOKABLE bool getLightsArePickable() const; + Q_INVOKABLE void setSendPhysicsUpdates(bool value); + Q_INVOKABLE bool getSendPhysicsUpdates() const; + Q_INVOKABLE void dumpTree() const; signals: diff --git a/libraries/physics/src/EntityMotionState.cpp b/libraries/physics/src/EntityMotionState.cpp index 02d7b77606..c8b0133b86 100644 --- a/libraries/physics/src/EntityMotionState.cpp +++ b/libraries/physics/src/EntityMotionState.cpp @@ -232,12 +232,16 @@ void EntityMotionState::sendUpdate(OctreeEditPacketSender* packetSender, uint32_ properties.setLastEdited(_entity->getLastEdited()); } - EntityItemID id(_entity->getID()); - EntityEditPacketSender* entityPacketSender = static_cast(packetSender); - #ifdef WANT_DEBUG - qDebug() << "EntityMotionState::sendUpdate()... calling queueEditEntityMessage()..."; - #endif - entityPacketSender->queueEditEntityMessage(PacketTypeEntityAddOrEdit, id, properties); + if (EntityItem::getSendPhysicsUpdates()) { + EntityItemID id(_entity->getID()); + EntityEditPacketSender* entityPacketSender = static_cast(packetSender); + #ifdef WANT_DEBUG + qDebug() << "EntityMotionState::sendUpdate()... calling queueEditEntityMessage()..."; + #endif + entityPacketSender->queueEditEntityMessage(PacketTypeEntityAddOrEdit, id, properties); + } else { + qDebug() << "EntityMotionState::sendUpdate()... NOT sending update as requested."; + } // The outgoing flags only itemized WHAT to send, not WHETHER to send, hence we always set them // to the full set. These flags may be momentarily cleared by incoming external changes. diff --git a/libraries/physics/src/EntityMotionState.h b/libraries/physics/src/EntityMotionState.h index 5d98e545d9..5370f9ebb4 100644 --- a/libraries/physics/src/EntityMotionState.h +++ b/libraries/physics/src/EntityMotionState.h @@ -63,6 +63,7 @@ public: protected: EntityItem* _entity; + }; #endif // hifi_EntityMotionState_h