mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 10:37:35 +02:00
pack terse update parameters near each other
also don't constantly resend ownership data
This commit is contained in:
parent
ff67b54f87
commit
d6c69e8fe6
3 changed files with 69 additions and 57 deletions
|
@ -102,12 +102,14 @@ EntityPropertyFlags EntityItem::getEntityProperties(EncodeBitstreamParams& param
|
||||||
|
|
||||||
requestedProperties += PROP_SIMULATION_OWNER;
|
requestedProperties += PROP_SIMULATION_OWNER;
|
||||||
requestedProperties += PROP_POSITION;
|
requestedProperties += PROP_POSITION;
|
||||||
requestedProperties += PROP_DIMENSIONS; // NOTE: PROP_RADIUS obsolete
|
|
||||||
requestedProperties += PROP_ROTATION;
|
requestedProperties += PROP_ROTATION;
|
||||||
requestedProperties += PROP_DENSITY;
|
|
||||||
requestedProperties += PROP_VELOCITY;
|
requestedProperties += PROP_VELOCITY;
|
||||||
requestedProperties += PROP_GRAVITY;
|
requestedProperties += PROP_ANGULAR_VELOCITY;
|
||||||
requestedProperties += PROP_ACCELERATION;
|
requestedProperties += PROP_ACCELERATION;
|
||||||
|
|
||||||
|
requestedProperties += PROP_DIMENSIONS; // NOTE: PROP_RADIUS obsolete
|
||||||
|
requestedProperties += PROP_DENSITY;
|
||||||
|
requestedProperties += PROP_GRAVITY;
|
||||||
requestedProperties += PROP_DAMPING;
|
requestedProperties += PROP_DAMPING;
|
||||||
requestedProperties += PROP_RESTITUTION;
|
requestedProperties += PROP_RESTITUTION;
|
||||||
requestedProperties += PROP_FRICTION;
|
requestedProperties += PROP_FRICTION;
|
||||||
|
@ -116,7 +118,6 @@ EntityPropertyFlags EntityItem::getEntityProperties(EncodeBitstreamParams& param
|
||||||
requestedProperties += PROP_SCRIPT_TIMESTAMP;
|
requestedProperties += PROP_SCRIPT_TIMESTAMP;
|
||||||
requestedProperties += PROP_COLLISION_SOUND_URL;
|
requestedProperties += PROP_COLLISION_SOUND_URL;
|
||||||
requestedProperties += PROP_REGISTRATION_POINT;
|
requestedProperties += PROP_REGISTRATION_POINT;
|
||||||
requestedProperties += PROP_ANGULAR_VELOCITY;
|
|
||||||
requestedProperties += PROP_ANGULAR_DAMPING;
|
requestedProperties += PROP_ANGULAR_DAMPING;
|
||||||
requestedProperties += PROP_VISIBLE;
|
requestedProperties += PROP_VISIBLE;
|
||||||
requestedProperties += PROP_IGNORE_FOR_COLLISIONS;
|
requestedProperties += PROP_IGNORE_FOR_COLLISIONS;
|
||||||
|
@ -234,12 +235,14 @@ OctreeElement::AppendState EntityItem::appendEntityData(OctreePacketData* packet
|
||||||
|
|
||||||
APPEND_ENTITY_PROPERTY(PROP_SIMULATION_OWNER, _simulationOwner.toByteArray());
|
APPEND_ENTITY_PROPERTY(PROP_SIMULATION_OWNER, _simulationOwner.toByteArray());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_POSITION, getPosition());
|
APPEND_ENTITY_PROPERTY(PROP_POSITION, getPosition());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_DIMENSIONS, getDimensions()); // NOTE: PROP_RADIUS obsolete
|
|
||||||
APPEND_ENTITY_PROPERTY(PROP_ROTATION, getRotation());
|
APPEND_ENTITY_PROPERTY(PROP_ROTATION, getRotation());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_DENSITY, getDensity());
|
|
||||||
APPEND_ENTITY_PROPERTY(PROP_VELOCITY, getVelocity());
|
APPEND_ENTITY_PROPERTY(PROP_VELOCITY, getVelocity());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_GRAVITY, getGravity());
|
APPEND_ENTITY_PROPERTY(PROP_ANGULAR_VELOCITY, getAngularVelocity());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_ACCELERATION, getAcceleration());
|
APPEND_ENTITY_PROPERTY(PROP_ACCELERATION, getAcceleration());
|
||||||
|
|
||||||
|
APPEND_ENTITY_PROPERTY(PROP_DIMENSIONS, getDimensions()); // NOTE: PROP_RADIUS obsolete
|
||||||
|
APPEND_ENTITY_PROPERTY(PROP_DENSITY, getDensity());
|
||||||
|
APPEND_ENTITY_PROPERTY(PROP_GRAVITY, getGravity());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_DAMPING, getDamping());
|
APPEND_ENTITY_PROPERTY(PROP_DAMPING, getDamping());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_RESTITUTION, getRestitution());
|
APPEND_ENTITY_PROPERTY(PROP_RESTITUTION, getRestitution());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_FRICTION, getFriction());
|
APPEND_ENTITY_PROPERTY(PROP_FRICTION, getFriction());
|
||||||
|
@ -247,7 +250,6 @@ OctreeElement::AppendState EntityItem::appendEntityData(OctreePacketData* packet
|
||||||
APPEND_ENTITY_PROPERTY(PROP_SCRIPT, getScript());
|
APPEND_ENTITY_PROPERTY(PROP_SCRIPT, getScript());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_SCRIPT_TIMESTAMP, getScriptTimestamp());
|
APPEND_ENTITY_PROPERTY(PROP_SCRIPT_TIMESTAMP, getScriptTimestamp());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_REGISTRATION_POINT, getRegistrationPoint());
|
APPEND_ENTITY_PROPERTY(PROP_REGISTRATION_POINT, getRegistrationPoint());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_ANGULAR_VELOCITY, getAngularVelocity());
|
|
||||||
APPEND_ENTITY_PROPERTY(PROP_ANGULAR_DAMPING, getAngularDamping());
|
APPEND_ENTITY_PROPERTY(PROP_ANGULAR_DAMPING, getAngularDamping());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_VISIBLE, getVisible());
|
APPEND_ENTITY_PROPERTY(PROP_VISIBLE, getVisible());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_IGNORE_FOR_COLLISIONS, getIgnoreForCollisions());
|
APPEND_ENTITY_PROPERTY(PROP_IGNORE_FOR_COLLISIONS, getIgnoreForCollisions());
|
||||||
|
@ -534,12 +536,11 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef
|
||||||
dataAt += propertyFlags.getEncodedLength();
|
dataAt += propertyFlags.getEncodedLength();
|
||||||
bytesRead += propertyFlags.getEncodedLength();
|
bytesRead += propertyFlags.getEncodedLength();
|
||||||
|
|
||||||
bool weOwnIt = false;
|
|
||||||
if (args.bitstreamVersion >= VERSION_ENTITIES_HAVE_SIMULATION_OWNER) {
|
if (args.bitstreamVersion >= VERSION_ENTITIES_HAVE_SIMULATION_OWNER) {
|
||||||
// NOTE: the server is authoritative for changes to simOwnerID so we always unpack this data,
|
// pack SimulationOwner and terse update properties near each other
|
||||||
// even when we would otherwise ignore the rest of the packet. That said, we assert the priority
|
|
||||||
// rules that we expect the server to be using, so it is possible that we'll sometimes ignore
|
// NOTE: the server is authoritative for changes to simOwnerID so we always unpack ownership data
|
||||||
// the incoming _simulatorID data (e.g. we might know something that the server does not... yet).
|
// even when we would otherwise ignore the rest of the packet.
|
||||||
|
|
||||||
if (propertyFlags.getHasProperty(PROP_SIMULATION_OWNER)) {
|
if (propertyFlags.getHasProperty(PROP_SIMULATION_OWNER)) {
|
||||||
QByteArray simOwnerData;
|
QByteArray simOwnerData;
|
||||||
|
@ -549,48 +550,58 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef
|
||||||
dataAt += bytes;
|
dataAt += bytes;
|
||||||
bytesRead += bytes;
|
bytesRead += bytes;
|
||||||
|
|
||||||
if (_simulationOwner.set(newSimOwner)) {
|
if (overwriteLocalData) {
|
||||||
_dirtyFlags |= EntityItem::DIRTY_SIMULATOR_ID;
|
if (_simulationOwner.set(newSimOwner)) {
|
||||||
|
_dirtyFlags |= EntityItem::DIRTY_SIMULATOR_ID;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
auto nodeList = DependencyManager::get<NodeList>();
|
{
|
||||||
weOwnIt = _simulationOwner.matchesValidID(nodeList->getSessionUUID());
|
auto nodeList = DependencyManager::get<NodeList>();
|
||||||
}
|
bool weOwnIt = _simulationOwner.matchesValidID(nodeList->getSessionUUID());
|
||||||
|
// When we own the simulation we don't accept updates to the entity's transform/velocities
|
||||||
|
// but since we're using macros below we have to temporarily modify overwriteLocalData.
|
||||||
|
bool oldOverwrite = overwriteLocalData;
|
||||||
|
overwriteLocalData = overwriteLocalData && !weOwnIt;
|
||||||
|
READ_ENTITY_PROPERTY(PROP_POSITION, glm::vec3, updatePosition);
|
||||||
|
READ_ENTITY_PROPERTY(PROP_ROTATION, glm::quat, updateRotation);
|
||||||
|
READ_ENTITY_PROPERTY(PROP_VELOCITY, glm::vec3, updateVelocity);
|
||||||
|
READ_ENTITY_PROPERTY(PROP_ANGULAR_VELOCITY, glm::vec3, updateAngularVelocity);
|
||||||
|
READ_ENTITY_PROPERTY(PROP_ACCELERATION, glm::vec3, setAcceleration);
|
||||||
|
overwriteLocalData = oldOverwrite;
|
||||||
|
}
|
||||||
|
|
||||||
bool oldOverwrite = overwriteLocalData;
|
READ_ENTITY_PROPERTY(PROP_DIMENSIONS, glm::vec3, updateDimensions);
|
||||||
overwriteLocalData = overwriteLocalData && !weOwnIt;
|
READ_ENTITY_PROPERTY(PROP_DENSITY, float, updateDensity);
|
||||||
READ_ENTITY_PROPERTY(PROP_POSITION, glm::vec3, updatePosition);
|
READ_ENTITY_PROPERTY(PROP_GRAVITY, glm::vec3, updateGravity);
|
||||||
overwriteLocalData = oldOverwrite;
|
|
||||||
|
READ_ENTITY_PROPERTY(PROP_DAMPING, float, updateDamping);
|
||||||
READ_ENTITY_PROPERTY(PROP_DIMENSIONS, glm::vec3, updateDimensions);
|
READ_ENTITY_PROPERTY(PROP_RESTITUTION, float, updateRestitution);
|
||||||
|
READ_ENTITY_PROPERTY(PROP_FRICTION, float, updateFriction);
|
||||||
overwriteLocalData = overwriteLocalData && !weOwnIt;
|
READ_ENTITY_PROPERTY(PROP_LIFETIME, float, updateLifetime);
|
||||||
READ_ENTITY_PROPERTY(PROP_ROTATION, glm::quat, updateRotation);
|
READ_ENTITY_PROPERTY(PROP_SCRIPT, QString, setScript);
|
||||||
overwriteLocalData = oldOverwrite;
|
READ_ENTITY_PROPERTY(PROP_SCRIPT_TIMESTAMP, quint64, setScriptTimestamp);
|
||||||
|
READ_ENTITY_PROPERTY(PROP_REGISTRATION_POINT, glm::vec3, setRegistrationPoint);
|
||||||
READ_ENTITY_PROPERTY(PROP_DENSITY, float, updateDensity);
|
} else {
|
||||||
|
// legacy order of packing here
|
||||||
overwriteLocalData = overwriteLocalData && !weOwnIt;
|
READ_ENTITY_PROPERTY(PROP_POSITION, glm::vec3, updatePosition);
|
||||||
READ_ENTITY_PROPERTY(PROP_VELOCITY, glm::vec3, updateVelocity);
|
READ_ENTITY_PROPERTY(PROP_DIMENSIONS, glm::vec3, updateDimensions);
|
||||||
overwriteLocalData = oldOverwrite;
|
READ_ENTITY_PROPERTY(PROP_ROTATION, glm::quat, updateRotation);
|
||||||
|
READ_ENTITY_PROPERTY(PROP_DENSITY, float, updateDensity);
|
||||||
READ_ENTITY_PROPERTY(PROP_GRAVITY, glm::vec3, updateGravity);
|
READ_ENTITY_PROPERTY(PROP_VELOCITY, glm::vec3, updateVelocity);
|
||||||
if (args.bitstreamVersion >= VERSION_ENTITIES_HAVE_ACCELERATION) {
|
READ_ENTITY_PROPERTY(PROP_GRAVITY, glm::vec3, updateGravity);
|
||||||
READ_ENTITY_PROPERTY(PROP_ACCELERATION, glm::vec3, setAcceleration);
|
READ_ENTITY_PROPERTY(PROP_ACCELERATION, glm::vec3, setAcceleration);
|
||||||
|
|
||||||
|
READ_ENTITY_PROPERTY(PROP_DAMPING, float, updateDamping);
|
||||||
|
READ_ENTITY_PROPERTY(PROP_RESTITUTION, float, updateRestitution);
|
||||||
|
READ_ENTITY_PROPERTY(PROP_FRICTION, float, updateFriction);
|
||||||
|
READ_ENTITY_PROPERTY(PROP_LIFETIME, float, updateLifetime);
|
||||||
|
READ_ENTITY_PROPERTY(PROP_SCRIPT, QString, setScript);
|
||||||
|
READ_ENTITY_PROPERTY(PROP_SCRIPT_TIMESTAMP, quint64, setScriptTimestamp);
|
||||||
|
READ_ENTITY_PROPERTY(PROP_REGISTRATION_POINT, glm::vec3, setRegistrationPoint);
|
||||||
|
READ_ENTITY_PROPERTY(PROP_ANGULAR_VELOCITY, glm::vec3, updateAngularVelocity);
|
||||||
}
|
}
|
||||||
|
|
||||||
READ_ENTITY_PROPERTY(PROP_DAMPING, float, updateDamping);
|
|
||||||
READ_ENTITY_PROPERTY(PROP_RESTITUTION, float, updateRestitution);
|
|
||||||
READ_ENTITY_PROPERTY(PROP_FRICTION, float, updateFriction);
|
|
||||||
READ_ENTITY_PROPERTY(PROP_LIFETIME, float, updateLifetime);
|
|
||||||
READ_ENTITY_PROPERTY(PROP_SCRIPT, QString, setScript);
|
|
||||||
READ_ENTITY_PROPERTY(PROP_SCRIPT_TIMESTAMP, quint64, setScriptTimestamp);
|
|
||||||
READ_ENTITY_PROPERTY(PROP_REGISTRATION_POINT, glm::vec3, setRegistrationPoint);
|
|
||||||
|
|
||||||
overwriteLocalData = overwriteLocalData && !weOwnIt;
|
|
||||||
READ_ENTITY_PROPERTY(PROP_ANGULAR_VELOCITY, glm::vec3, updateAngularVelocity);
|
|
||||||
overwriteLocalData = oldOverwrite;
|
|
||||||
|
|
||||||
READ_ENTITY_PROPERTY(PROP_ANGULAR_DAMPING, float, updateAngularDamping);
|
READ_ENTITY_PROPERTY(PROP_ANGULAR_DAMPING, float, updateAngularDamping);
|
||||||
READ_ENTITY_PROPERTY(PROP_VISIBLE, bool, setVisible);
|
READ_ENTITY_PROPERTY(PROP_VISIBLE, bool, setVisible);
|
||||||
READ_ENTITY_PROPERTY(PROP_IGNORE_FOR_COLLISIONS, bool, updateIgnoreForCollisions);
|
READ_ENTITY_PROPERTY(PROP_IGNORE_FOR_COLLISIONS, bool, updateIgnoreForCollisions);
|
||||||
|
@ -598,8 +609,9 @@ int EntityItem::readEntityDataFromBuffer(const unsigned char* data, int bytesLef
|
||||||
READ_ENTITY_PROPERTY(PROP_LOCKED, bool, setLocked);
|
READ_ENTITY_PROPERTY(PROP_LOCKED, bool, setLocked);
|
||||||
READ_ENTITY_PROPERTY(PROP_USER_DATA, QString, setUserData);
|
READ_ENTITY_PROPERTY(PROP_USER_DATA, QString, setUserData);
|
||||||
|
|
||||||
if (args.bitstreamVersion >= VERSION_ENTITIES_HAVE_ACCELERATION &&
|
if (args.bitstreamVersion < VERSION_ENTITIES_HAVE_SIMULATION_OWNER) {
|
||||||
args.bitstreamVersion < VERSION_ENTITIES_HAVE_SIMULATION_OWNER) {
|
// this code for when there is only simulatorID and no simulation priority
|
||||||
|
|
||||||
// we always accept the server's notion of simulatorID, so we fake overwriteLocalData as true
|
// we always accept the server's notion of simulatorID, so we fake overwriteLocalData as true
|
||||||
// before we try to READ_ENTITY_PROPERTY it
|
// before we try to READ_ENTITY_PROPERTY it
|
||||||
bool temp = overwriteLocalData;
|
bool temp = overwriteLocalData;
|
||||||
|
|
|
@ -1268,6 +1268,8 @@ void EntityItemProperties::clearSimulationOwner() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void EntityItemProperties::setSimulationOwner(const QUuid& id, uint8_t priority) {
|
void EntityItemProperties::setSimulationOwner(const QUuid& id, uint8_t priority) {
|
||||||
_simulationOwner.set(id, priority);
|
if (!_simulationOwner.matchesValidID(id) || _simulationOwner.getPriority() != priority) {
|
||||||
_simulationOwnerChanged = true;
|
_simulationOwner.set(id, priority);
|
||||||
|
_simulationOwnerChanged = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -422,7 +422,7 @@ void EntityMotionState::sendUpdate(OctreeEditPacketSender* packetSender, const Q
|
||||||
_serverAcceleration = _entity->getAcceleration();
|
_serverAcceleration = _entity->getAcceleration();
|
||||||
_serverAngularVelocity = _entity->getAngularVelocity();
|
_serverAngularVelocity = _entity->getAngularVelocity();
|
||||||
|
|
||||||
EntityItemProperties properties = _entity->getProperties();
|
EntityItemProperties properties;
|
||||||
|
|
||||||
// explicitly set the properties that changed so that they will be packed
|
// explicitly set the properties that changed so that they will be packed
|
||||||
properties.setPosition(_serverPosition);
|
properties.setPosition(_serverPosition);
|
||||||
|
@ -449,10 +449,8 @@ void EntityMotionState::sendUpdate(OctreeEditPacketSender* packetSender, const Q
|
||||||
// we own the simulation but the entity has stopped, so we tell the server that we're clearing simulatorID
|
// we own the simulation but the entity has stopped, so we tell the server that we're clearing simulatorID
|
||||||
// but we remember that we do still own it... and rely on the server to tell us that we don't
|
// but we remember that we do still own it... and rely on the server to tell us that we don't
|
||||||
properties.clearSimulationOwner();
|
properties.clearSimulationOwner();
|
||||||
} else {
|
|
||||||
// re-assert the simulation info
|
|
||||||
properties.setSimulationOwner(sessionID, _entity->getSimulatorPriority());
|
|
||||||
}
|
}
|
||||||
|
// else the ownership is not changing so we don't bother to pack it
|
||||||
} else {
|
} else {
|
||||||
// we don't own the simulation for this entity yet, but we're sending a bid for it
|
// we don't own the simulation for this entity yet, but we're sending a bid for it
|
||||||
properties.setSimulationOwner(sessionID, glm::max<uint8_t>(_outgoingPriority, VOLUNTEER_SIMULATION_PRIORITY));
|
properties.setSimulationOwner(sessionID, glm::max<uint8_t>(_outgoingPriority, VOLUNTEER_SIMULATION_PRIORITY));
|
||||||
|
|
Loading…
Reference in a new issue