mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 14:37:46 +02:00
Convert avatarPriority to trivalued (inherit, crowd, hero)
Also tweaks from original reviewer comments.
This commit is contained in:
parent
3cc932db96
commit
83c9381575
10 changed files with 69 additions and 43 deletions
|
@ -91,22 +91,26 @@ namespace {
|
||||||
struct FindPriorityZone {
|
struct FindPriorityZone {
|
||||||
glm::vec3 position;
|
glm::vec3 position;
|
||||||
bool isInPriorityZone { false };
|
bool isInPriorityZone { false };
|
||||||
|
float zoneVolume { std::numeric_limits<float>::max() };
|
||||||
|
|
||||||
static bool operation(const OctreeElementPointer& element, void* extraData) {
|
static bool operation(const OctreeElementPointer& element, void* extraData) {
|
||||||
auto findPriorityZone = static_cast<FindPriorityZone*>(extraData);
|
auto findPriorityZone = static_cast<FindPriorityZone*>(extraData);
|
||||||
if (element->getAACube().contains(findPriorityZone->position)) {
|
if (element->getAACube().contains(findPriorityZone->position)) {
|
||||||
const EntityTreeElementPointer entityTreeElement = static_pointer_cast<EntityTreeElement>(element);
|
const EntityTreeElementPointer entityTreeElement = static_pointer_cast<EntityTreeElement>(element);
|
||||||
entityTreeElement->forEachEntity([&findPriorityZone](EntityItemPointer item) {
|
entityTreeElement->forEachEntity([&findPriorityZone](EntityItemPointer item) {
|
||||||
if (item->getType() == EntityTypes::Zone
|
if (item->getType() == EntityTypes::Zone
|
||||||
&& item->contains(findPriorityZone->position)
|
&& item->contains(findPriorityZone->position)) {
|
||||||
&& static_pointer_cast<ZoneEntityItem>(item)->getAvatarPriority()) {
|
auto zoneItem = static_pointer_cast<ZoneEntityItem>(item);
|
||||||
findPriorityZone->isInPriorityZone = true;
|
if (zoneItem->getAvatarPriority() != COMPONENT_MODE_INHERIT) {
|
||||||
|
float volume = zoneItem->getVolumeEstimate();
|
||||||
|
if (volume < findPriorityZone->zoneVolume) { // Smaller volume wins
|
||||||
|
findPriorityZone->isInPriorityZone = zoneItem->getAvatarPriority() == COMPONENT_MODE_ENABLED;
|
||||||
|
findPriorityZone->zoneVolume = volume;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (findPriorityZone->isInPriorityZone) {
|
return true; // Keep recursing
|
||||||
return false; // For now, stop at first hit.
|
|
||||||
} else {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} else { // Position isn't within this subspace, so end recursion.
|
} else { // Position isn't within this subspace, so end recursion.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -144,10 +148,10 @@ int AvatarMixerClientData::parseData(ReceivedMessage& message, const SlaveShared
|
||||||
EntityTree& entityTree = *slaveSharedData.entityTree;
|
EntityTree& entityTree = *slaveSharedData.entityTree;
|
||||||
FindPriorityZone findPriorityZone { newPosition, false } ;
|
FindPriorityZone findPriorityZone { newPosition, false } ;
|
||||||
entityTree.recurseTreeWithOperation(&FindPriorityZone::operation, &findPriorityZone);
|
entityTree.recurseTreeWithOperation(&FindPriorityZone::operation, &findPriorityZone);
|
||||||
_avatar->setPriorityAvatar(findPriorityZone.isInPriorityZone);
|
_avatar->setHasPriority(findPriorityZone.isInPriorityZone);
|
||||||
if (findPriorityZone.isInPriorityZone) {
|
//if (findPriorityZone.isInPriorityZone) {
|
||||||
qCWarning(avatars) << "Avatar" << _avatar->getSessionDisplayName() << "in hero zone";
|
// qCWarning(avatars) << "Avatar" << _avatar->getSessionDisplayName() << "in hero zone";
|
||||||
}
|
//}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -460,7 +460,7 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
if (sourceAvatarNodeData->getConstAvatarData()->getPriorityAvatar() && !sendAvatar) {
|
if (sourceAvatarNodeData->getConstAvatarData()->getHasPriority() && !sendAvatar) {
|
||||||
qCWarning(avatars) << "Hero avatar dropped:" << sourceAvatarNodeData->getConstAvatarData()->getSessionDisplayName()
|
qCWarning(avatars) << "Hero avatar dropped:" << sourceAvatarNodeData->getConstAvatarData()->getSessionDisplayName()
|
||||||
<< "lastSeqToReceiver =" << destinationNodeData->getLastBroadcastSequenceNumber(sourceAvatarNode->getLocalID())
|
<< "lastSeqToReceiver =" << destinationNodeData->getLastBroadcastSequenceNumber(sourceAvatarNode->getLocalID())
|
||||||
<< "lastSeqFromSender = " << sourceAvatarNodeData->getLastReceivedSequenceNumber();
|
<< "lastSeqFromSender = " << sourceAvatarNodeData->getLastReceivedSequenceNumber();
|
||||||
|
@ -474,7 +474,7 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node)
|
||||||
const MixerAvatar* avatarNodeData = sourceAvatarNodeData->getConstAvatarData();
|
const MixerAvatar* avatarNodeData = sourceAvatarNodeData->getConstAvatarData();
|
||||||
auto lastEncodeTime = destinationNodeData->getLastOtherAvatarEncodeTime(sourceAvatarNode->getLocalID());
|
auto lastEncodeTime = destinationNodeData->getLastOtherAvatarEncodeTime(sourceAvatarNode->getLocalID());
|
||||||
|
|
||||||
avatarPriorityQueues[avatarNodeData->getPriorityAvatar() ? kHero : kNonhero].push(
|
avatarPriorityQueues[avatarNodeData->getHasPriority() ? kHero : kNonhero].push(
|
||||||
SortableAvatar(avatarNodeData, sourceAvatarNode, lastEncodeTime));
|
SortableAvatar(avatarNodeData, sourceAvatarNode, lastEncodeTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -601,7 +601,7 @@ void AvatarMixerSlave::broadcastAvatarDataToAgent(const SharedNodePointer& node)
|
||||||
|
|
||||||
if (detail != AvatarData::NoData) {
|
if (detail != AvatarData::NoData) {
|
||||||
_stats.numOthersIncluded++;
|
_stats.numOthersIncluded++;
|
||||||
if (sourceAvatar->getPriorityAvatar()) {
|
if (sourceAvatar->getHasPriority()) {
|
||||||
_stats.numHeroesIncluded++;
|
_stats.numHeroesIncluded++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,11 +19,11 @@
|
||||||
|
|
||||||
class MixerAvatar : public AvatarData {
|
class MixerAvatar : public AvatarData {
|
||||||
public:
|
public:
|
||||||
bool getPriorityAvatar() const { return _bPriorityAvatar; }
|
bool getHasPriority() const { return _bHasPriority; }
|
||||||
void setPriorityAvatar(bool bPriorityAvatar) { _bPriorityAvatar = bPriorityAvatar; }
|
void setHasPriority(bool bPriorityAvatar) { _bHasPriority = bPriorityAvatar; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool _bPriorityAvatar { false };
|
bool _bHasPriority { false };
|
||||||
};
|
};
|
||||||
|
|
||||||
using MixerAvatarSharedPointer = std::shared_ptr<MixerAvatar>;
|
using MixerAvatarSharedPointer = std::shared_ptr<MixerAvatar>;
|
||||||
|
|
|
@ -225,6 +225,15 @@ QString EntityItemProperties::getBloomModeAsString() const {
|
||||||
return getComponentModeAsString(_bloomMode);
|
return getComponentModeAsString(_bloomMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
const QStringList AVATAR_PRIORITIES_AS_STRING
|
||||||
|
{ "inherit", "crowd", "hero" };
|
||||||
|
}
|
||||||
|
|
||||||
|
QString EntityItemProperties::getAvatarPriorityAsString() const {
|
||||||
|
return AVATAR_PRIORITIES_AS_STRING.value(_avatarPriority);
|
||||||
|
}
|
||||||
|
|
||||||
std::array<ComponentPair, COMPONENT_MODE_ITEM_COUNT>::const_iterator EntityItemProperties::findComponent(const QString& mode) {
|
std::array<ComponentPair, COMPONENT_MODE_ITEM_COUNT>::const_iterator EntityItemProperties::findComponent(const QString& mode) {
|
||||||
return std::find_if(COMPONENT_MODES.begin(), COMPONENT_MODES.end(), [&](const ComponentPair& pair) {
|
return std::find_if(COMPONENT_MODES.begin(), COMPONENT_MODES.end(), [&](const ComponentPair& pair) {
|
||||||
return (pair.second == mode);
|
return (pair.second == mode);
|
||||||
|
@ -249,6 +258,15 @@ void EntityItemProperties::setBloomModeFromString(const QString& bloomMode) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EntityItemProperties::setAvatarPriorityFromString(QString const& avatarPriority) {
|
||||||
|
auto result = AVATAR_PRIORITIES_AS_STRING.indexOf(avatarPriority);
|
||||||
|
|
||||||
|
if (result != -1) {
|
||||||
|
_avatarPriority = result;
|
||||||
|
_avatarPriorityChanged = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QString EntityItemProperties::getKeyLightModeAsString() const {
|
QString EntityItemProperties::getKeyLightModeAsString() const {
|
||||||
return getComponentModeAsString(_keyLightMode);
|
return getComponentModeAsString(_keyLightMode);
|
||||||
}
|
}
|
||||||
|
@ -616,12 +634,12 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
|
||||||
CHECK_PROPERTY_CHANGE(PROP_FLYING_ALLOWED, flyingAllowed);
|
CHECK_PROPERTY_CHANGE(PROP_FLYING_ALLOWED, flyingAllowed);
|
||||||
CHECK_PROPERTY_CHANGE(PROP_GHOSTING_ALLOWED, ghostingAllowed);
|
CHECK_PROPERTY_CHANGE(PROP_GHOSTING_ALLOWED, ghostingAllowed);
|
||||||
CHECK_PROPERTY_CHANGE(PROP_FILTER_URL, filterURL);
|
CHECK_PROPERTY_CHANGE(PROP_FILTER_URL, filterURL);
|
||||||
CHECK_PROPERTY_CHANGE(PROP_AVATAR_PRIORITY, avatarPriority);
|
|
||||||
CHECK_PROPERTY_CHANGE(PROP_KEY_LIGHT_MODE, keyLightMode);
|
CHECK_PROPERTY_CHANGE(PROP_KEY_LIGHT_MODE, keyLightMode);
|
||||||
CHECK_PROPERTY_CHANGE(PROP_AMBIENT_LIGHT_MODE, ambientLightMode);
|
CHECK_PROPERTY_CHANGE(PROP_AMBIENT_LIGHT_MODE, ambientLightMode);
|
||||||
CHECK_PROPERTY_CHANGE(PROP_SKYBOX_MODE, skyboxMode);
|
CHECK_PROPERTY_CHANGE(PROP_SKYBOX_MODE, skyboxMode);
|
||||||
CHECK_PROPERTY_CHANGE(PROP_HAZE_MODE, hazeMode);
|
CHECK_PROPERTY_CHANGE(PROP_HAZE_MODE, hazeMode);
|
||||||
CHECK_PROPERTY_CHANGE(PROP_BLOOM_MODE, bloomMode);
|
CHECK_PROPERTY_CHANGE(PROP_BLOOM_MODE, bloomMode);
|
||||||
|
CHECK_PROPERTY_CHANGE(PROP_AVATAR_PRIORITY, avatarPriority);
|
||||||
|
|
||||||
// Polyvox
|
// Polyvox
|
||||||
CHECK_PROPERTY_CHANGE(PROP_VOXEL_VOLUME_SIZE, voxelVolumeSize);
|
CHECK_PROPERTY_CHANGE(PROP_VOXEL_VOLUME_SIZE, voxelVolumeSize);
|
||||||
|
@ -1422,8 +1440,10 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
|
||||||
* zone. It is periodically executed for each entity in the zone. It can, for example, be used to not allow changes to
|
* zone. It is periodically executed for each entity in the zone. It can, for example, be used to not allow changes to
|
||||||
* certain properties.<br />
|
* certain properties.<br />
|
||||||
*
|
*
|
||||||
* @property {boolean} avatarPriority=false - If <code>true</code> avatars within this zone will have their movements distributed to other
|
* @property {string} avatarPriority="inherit" - Configures the update priority of contained avatars to other clients.<br />
|
||||||
* clients with priority over other avatars. Use, for example, on a performance stage with a few presenters.
|
* <code>"inherit"</code>: Priority from enclosing zones is unchanged.<br />
|
||||||
|
* <code>"crowd"</code>: Priority in this zone is the normal priority.<br />
|
||||||
|
* <code>"hero"</code>: Avatars in this zone will have an increased update priority
|
||||||
* <pre>
|
* <pre>
|
||||||
*
|
*
|
||||||
* function filter(properties) {
|
* function filter(properties) {
|
||||||
|
@ -1753,13 +1773,13 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_FLYING_ALLOWED, flyingAllowed);
|
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_FLYING_ALLOWED, flyingAllowed);
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_GHOSTING_ALLOWED, ghostingAllowed);
|
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_GHOSTING_ALLOWED, ghostingAllowed);
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_FILTER_URL, filterURL);
|
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_FILTER_URL, filterURL);
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_AVATAR_PRIORITY, avatarPriority);
|
|
||||||
|
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_KEY_LIGHT_MODE, keyLightMode, getKeyLightModeAsString());
|
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_KEY_LIGHT_MODE, keyLightMode, getKeyLightModeAsString());
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_AMBIENT_LIGHT_MODE, ambientLightMode, getAmbientLightModeAsString());
|
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_AMBIENT_LIGHT_MODE, ambientLightMode, getAmbientLightModeAsString());
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_SKYBOX_MODE, skyboxMode, getSkyboxModeAsString());
|
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_SKYBOX_MODE, skyboxMode, getSkyboxModeAsString());
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_HAZE_MODE, hazeMode, getHazeModeAsString());
|
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_HAZE_MODE, hazeMode, getHazeModeAsString());
|
||||||
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_BLOOM_MODE, bloomMode, getBloomModeAsString());
|
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_BLOOM_MODE, bloomMode, getBloomModeAsString());
|
||||||
|
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_AVATAR_PRIORITY, avatarPriority, getAvatarPriorityAsString());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Web only
|
// Web only
|
||||||
|
@ -2114,12 +2134,12 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(flyingAllowed, bool, setFlyingAllowed);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE(flyingAllowed, bool, setFlyingAllowed);
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(ghostingAllowed, bool, setGhostingAllowed);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE(ghostingAllowed, bool, setGhostingAllowed);
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(filterURL, QString, setFilterURL);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE(filterURL, QString, setFilterURL);
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(avatarPriority, bool, setAvatarPriority);
|
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(keyLightMode, KeyLightMode);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(keyLightMode, KeyLightMode);
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(ambientLightMode, AmbientLightMode);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(ambientLightMode, AmbientLightMode);
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(skyboxMode, SkyboxMode);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(skyboxMode, SkyboxMode);
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(hazeMode, HazeMode);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(hazeMode, HazeMode);
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(bloomMode, BloomMode);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(bloomMode, BloomMode);
|
||||||
|
COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(avatarPriority, AvatarPriority);
|
||||||
|
|
||||||
// Polyvox
|
// Polyvox
|
||||||
COPY_PROPERTY_FROM_QSCRIPTVALUE(voxelVolumeSize, vec3, setVoxelVolumeSize);
|
COPY_PROPERTY_FROM_QSCRIPTVALUE(voxelVolumeSize, vec3, setVoxelVolumeSize);
|
||||||
|
@ -2393,12 +2413,12 @@ void EntityItemProperties::merge(const EntityItemProperties& other) {
|
||||||
COPY_PROPERTY_IF_CHANGED(flyingAllowed);
|
COPY_PROPERTY_IF_CHANGED(flyingAllowed);
|
||||||
COPY_PROPERTY_IF_CHANGED(ghostingAllowed);
|
COPY_PROPERTY_IF_CHANGED(ghostingAllowed);
|
||||||
COPY_PROPERTY_IF_CHANGED(filterURL);
|
COPY_PROPERTY_IF_CHANGED(filterURL);
|
||||||
COPY_PROPERTY_IF_CHANGED(avatarPriority);
|
|
||||||
COPY_PROPERTY_IF_CHANGED(keyLightMode);
|
COPY_PROPERTY_IF_CHANGED(keyLightMode);
|
||||||
COPY_PROPERTY_IF_CHANGED(ambientLightMode);
|
COPY_PROPERTY_IF_CHANGED(ambientLightMode);
|
||||||
COPY_PROPERTY_IF_CHANGED(skyboxMode);
|
COPY_PROPERTY_IF_CHANGED(skyboxMode);
|
||||||
COPY_PROPERTY_IF_CHANGED(hazeMode);
|
COPY_PROPERTY_IF_CHANGED(hazeMode);
|
||||||
COPY_PROPERTY_IF_CHANGED(bloomMode);
|
COPY_PROPERTY_IF_CHANGED(bloomMode);
|
||||||
|
COPY_PROPERTY_IF_CHANGED(avatarPriority);
|
||||||
|
|
||||||
// Polyvox
|
// Polyvox
|
||||||
COPY_PROPERTY_IF_CHANGED(voxelVolumeSize);
|
COPY_PROPERTY_IF_CHANGED(voxelVolumeSize);
|
||||||
|
@ -2778,12 +2798,12 @@ bool EntityItemProperties::getPropertyInfo(const QString& propertyName, EntityPr
|
||||||
ADD_PROPERTY_TO_MAP(PROP_FLYING_ALLOWED, FlyingAllowed, flyingAllowed, bool);
|
ADD_PROPERTY_TO_MAP(PROP_FLYING_ALLOWED, FlyingAllowed, flyingAllowed, bool);
|
||||||
ADD_PROPERTY_TO_MAP(PROP_GHOSTING_ALLOWED, GhostingAllowed, ghostingAllowed, bool);
|
ADD_PROPERTY_TO_MAP(PROP_GHOSTING_ALLOWED, GhostingAllowed, ghostingAllowed, bool);
|
||||||
ADD_PROPERTY_TO_MAP(PROP_FILTER_URL, FilterURL, filterURL, QString);
|
ADD_PROPERTY_TO_MAP(PROP_FILTER_URL, FilterURL, filterURL, QString);
|
||||||
ADD_PROPERTY_TO_MAP(PROP_AVATAR_PRIORITY, AvatarPriority, avatarPriority, bool);
|
|
||||||
ADD_PROPERTY_TO_MAP(PROP_KEY_LIGHT_MODE, KeyLightMode, keyLightMode, uint32_t);
|
ADD_PROPERTY_TO_MAP(PROP_KEY_LIGHT_MODE, KeyLightMode, keyLightMode, uint32_t);
|
||||||
ADD_PROPERTY_TO_MAP(PROP_AMBIENT_LIGHT_MODE, AmbientLightMode, ambientLightMode, uint32_t);
|
ADD_PROPERTY_TO_MAP(PROP_AMBIENT_LIGHT_MODE, AmbientLightMode, ambientLightMode, uint32_t);
|
||||||
ADD_PROPERTY_TO_MAP(PROP_SKYBOX_MODE, SkyboxMode, skyboxMode, uint32_t);
|
ADD_PROPERTY_TO_MAP(PROP_SKYBOX_MODE, SkyboxMode, skyboxMode, uint32_t);
|
||||||
ADD_PROPERTY_TO_MAP(PROP_HAZE_MODE, HazeMode, hazeMode, uint32_t);
|
ADD_PROPERTY_TO_MAP(PROP_HAZE_MODE, HazeMode, hazeMode, uint32_t);
|
||||||
ADD_PROPERTY_TO_MAP(PROP_BLOOM_MODE, BloomMode, bloomMode, uint32_t);
|
ADD_PROPERTY_TO_MAP(PROP_BLOOM_MODE, BloomMode, bloomMode, uint32_t);
|
||||||
|
ADD_PROPERTY_TO_MAP(PROP_AVATAR_PRIORITY, AvatarPriority, avatarPriority, uint32_t);
|
||||||
|
|
||||||
// Polyvox
|
// Polyvox
|
||||||
ADD_PROPERTY_TO_MAP(PROP_VOXEL_VOLUME_SIZE, VoxelVolumeSize, voxelVolumeSize, vec3);
|
ADD_PROPERTY_TO_MAP(PROP_VOXEL_VOLUME_SIZE, VoxelVolumeSize, voxelVolumeSize, vec3);
|
||||||
|
@ -3184,7 +3204,7 @@ OctreeElement::AppendState EntityItemProperties::encodeEntityEditPacket(PacketTy
|
||||||
APPEND_ENTITY_PROPERTY(PROP_SKYBOX_MODE, (uint32_t)properties.getSkyboxMode());
|
APPEND_ENTITY_PROPERTY(PROP_SKYBOX_MODE, (uint32_t)properties.getSkyboxMode());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_HAZE_MODE, (uint32_t)properties.getHazeMode());
|
APPEND_ENTITY_PROPERTY(PROP_HAZE_MODE, (uint32_t)properties.getHazeMode());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_BLOOM_MODE, (uint32_t)properties.getBloomMode());
|
APPEND_ENTITY_PROPERTY(PROP_BLOOM_MODE, (uint32_t)properties.getBloomMode());
|
||||||
APPEND_ENTITY_PROPERTY(PROP_AVATAR_PRIORITY, properties.getAvatarPriority());
|
APPEND_ENTITY_PROPERTY(PROP_AVATAR_PRIORITY, (uint32_t)properties.getAvatarPriority());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (properties.getType() == EntityTypes::PolyVox) {
|
if (properties.getType() == EntityTypes::PolyVox) {
|
||||||
|
@ -3641,13 +3661,13 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_FLYING_ALLOWED, bool, setFlyingAllowed);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_FLYING_ALLOWED, bool, setFlyingAllowed);
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_GHOSTING_ALLOWED, bool, setGhostingAllowed);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_GHOSTING_ALLOWED, bool, setGhostingAllowed);
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_FILTER_URL, QString, setFilterURL);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_FILTER_URL, QString, setFilterURL);
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_AVATAR_PRIORITY, bool, setAvatarPriority);
|
|
||||||
|
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_KEY_LIGHT_MODE, uint32_t, setKeyLightMode);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_KEY_LIGHT_MODE, uint32_t, setKeyLightMode);
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_AMBIENT_LIGHT_MODE, uint32_t, setAmbientLightMode);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_AMBIENT_LIGHT_MODE, uint32_t, setAmbientLightMode);
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SKYBOX_MODE, uint32_t, setSkyboxMode);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SKYBOX_MODE, uint32_t, setSkyboxMode);
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_HAZE_MODE, uint32_t, setHazeMode);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_HAZE_MODE, uint32_t, setHazeMode);
|
||||||
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_BLOOM_MODE, uint32_t, setBloomMode);
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_BLOOM_MODE, uint32_t, setBloomMode);
|
||||||
|
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_AVATAR_PRIORITY, uint32_t, setAvatarPriority);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (properties.getType() == EntityTypes::PolyVox) {
|
if (properties.getType() == EntityTypes::PolyVox) {
|
||||||
|
@ -4022,13 +4042,13 @@ void EntityItemProperties::markAllChanged() {
|
||||||
_bloom.markAllChanged();
|
_bloom.markAllChanged();
|
||||||
_flyingAllowedChanged = true;
|
_flyingAllowedChanged = true;
|
||||||
_ghostingAllowedChanged = true;
|
_ghostingAllowedChanged = true;
|
||||||
_avatarPriorityChanged = true;
|
|
||||||
_filterURLChanged = true;
|
_filterURLChanged = true;
|
||||||
_keyLightModeChanged = true;
|
_keyLightModeChanged = true;
|
||||||
_ambientLightModeChanged = true;
|
_ambientLightModeChanged = true;
|
||||||
_skyboxModeChanged = true;
|
_skyboxModeChanged = true;
|
||||||
_hazeModeChanged = true;
|
_hazeModeChanged = true;
|
||||||
_bloomModeChanged = true;
|
_bloomModeChanged = true;
|
||||||
|
_avatarPriorityChanged = true;
|
||||||
|
|
||||||
// Polyvox
|
// Polyvox
|
||||||
_voxelVolumeSizeChanged = true;
|
_voxelVolumeSizeChanged = true;
|
||||||
|
@ -4608,9 +4628,6 @@ QList<QString> EntityItemProperties::listChangedProperties() {
|
||||||
if (filterURLChanged()) {
|
if (filterURLChanged()) {
|
||||||
out += "filterURL";
|
out += "filterURL";
|
||||||
}
|
}
|
||||||
if (avatarPriorityChanged()) {
|
|
||||||
out += "avatarPriority";
|
|
||||||
}
|
|
||||||
if (keyLightModeChanged()) {
|
if (keyLightModeChanged()) {
|
||||||
out += "keyLightMode";
|
out += "keyLightMode";
|
||||||
}
|
}
|
||||||
|
@ -4626,6 +4643,9 @@ QList<QString> EntityItemProperties::listChangedProperties() {
|
||||||
if (bloomModeChanged()) {
|
if (bloomModeChanged()) {
|
||||||
out += "bloomMode";
|
out += "bloomMode";
|
||||||
}
|
}
|
||||||
|
if (avatarPriorityChanged()) {
|
||||||
|
out += "avatarPriority";
|
||||||
|
}
|
||||||
|
|
||||||
// Polyvox
|
// Polyvox
|
||||||
if (voxelVolumeSizeChanged()) {
|
if (voxelVolumeSizeChanged()) {
|
||||||
|
|
|
@ -315,12 +315,12 @@ public:
|
||||||
DEFINE_PROPERTY(PROP_FLYING_ALLOWED, FlyingAllowed, flyingAllowed, bool, ZoneEntityItem::DEFAULT_FLYING_ALLOWED);
|
DEFINE_PROPERTY(PROP_FLYING_ALLOWED, FlyingAllowed, flyingAllowed, bool, ZoneEntityItem::DEFAULT_FLYING_ALLOWED);
|
||||||
DEFINE_PROPERTY(PROP_GHOSTING_ALLOWED, GhostingAllowed, ghostingAllowed, bool, ZoneEntityItem::DEFAULT_GHOSTING_ALLOWED);
|
DEFINE_PROPERTY(PROP_GHOSTING_ALLOWED, GhostingAllowed, ghostingAllowed, bool, ZoneEntityItem::DEFAULT_GHOSTING_ALLOWED);
|
||||||
DEFINE_PROPERTY(PROP_FILTER_URL, FilterURL, filterURL, QString, ZoneEntityItem::DEFAULT_FILTER_URL);
|
DEFINE_PROPERTY(PROP_FILTER_URL, FilterURL, filterURL, QString, ZoneEntityItem::DEFAULT_FILTER_URL);
|
||||||
DEFINE_PROPERTY(PROP_AVATAR_PRIORITY, AvatarPriority, avatarPriority, bool, ZoneEntityItem::DEFAULT_AVATAR_PRIORITY);
|
|
||||||
DEFINE_PROPERTY_REF_ENUM(PROP_KEY_LIGHT_MODE, KeyLightMode, keyLightMode, uint32_t, (uint32_t)COMPONENT_MODE_INHERIT);
|
DEFINE_PROPERTY_REF_ENUM(PROP_KEY_LIGHT_MODE, KeyLightMode, keyLightMode, uint32_t, (uint32_t)COMPONENT_MODE_INHERIT);
|
||||||
DEFINE_PROPERTY_REF_ENUM(PROP_SKYBOX_MODE, SkyboxMode, skyboxMode, uint32_t, (uint32_t)COMPONENT_MODE_INHERIT);
|
DEFINE_PROPERTY_REF_ENUM(PROP_SKYBOX_MODE, SkyboxMode, skyboxMode, uint32_t, (uint32_t)COMPONENT_MODE_INHERIT);
|
||||||
DEFINE_PROPERTY_REF_ENUM(PROP_AMBIENT_LIGHT_MODE, AmbientLightMode, ambientLightMode, uint32_t, (uint32_t)COMPONENT_MODE_INHERIT);
|
DEFINE_PROPERTY_REF_ENUM(PROP_AMBIENT_LIGHT_MODE, AmbientLightMode, ambientLightMode, uint32_t, (uint32_t)COMPONENT_MODE_INHERIT);
|
||||||
DEFINE_PROPERTY_REF_ENUM(PROP_HAZE_MODE, HazeMode, hazeMode, uint32_t, (uint32_t)COMPONENT_MODE_INHERIT);
|
DEFINE_PROPERTY_REF_ENUM(PROP_HAZE_MODE, HazeMode, hazeMode, uint32_t, (uint32_t)COMPONENT_MODE_INHERIT);
|
||||||
DEFINE_PROPERTY_REF_ENUM(PROP_BLOOM_MODE, BloomMode, bloomMode, uint32_t, (uint32_t)COMPONENT_MODE_INHERIT);
|
DEFINE_PROPERTY_REF_ENUM(PROP_BLOOM_MODE, BloomMode, bloomMode, uint32_t, (uint32_t)COMPONENT_MODE_INHERIT);
|
||||||
|
DEFINE_PROPERTY_REF_ENUM(PROP_AVATAR_PRIORITY, AvatarPriority, avatarPriority, uint32_t, (uint32_t)COMPONENT_MODE_INHERIT);
|
||||||
|
|
||||||
// Polyvox
|
// Polyvox
|
||||||
DEFINE_PROPERTY_REF(PROP_VOXEL_VOLUME_SIZE, VoxelVolumeSize, voxelVolumeSize, glm::vec3, PolyVoxEntityItem::DEFAULT_VOXEL_VOLUME_SIZE);
|
DEFINE_PROPERTY_REF(PROP_VOXEL_VOLUME_SIZE, VoxelVolumeSize, voxelVolumeSize, glm::vec3, PolyVoxEntityItem::DEFAULT_VOXEL_VOLUME_SIZE);
|
||||||
|
|
|
@ -65,13 +65,13 @@ EntityItemProperties ZoneEntityItem::getProperties(const EntityPropertyFlags& de
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(flyingAllowed, getFlyingAllowed);
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(flyingAllowed, getFlyingAllowed);
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(ghostingAllowed, getGhostingAllowed);
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(ghostingAllowed, getGhostingAllowed);
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(filterURL, getFilterURL);
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(filterURL, getFilterURL);
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(avatarPriority, getAvatarPriority);
|
|
||||||
|
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(keyLightMode, getKeyLightMode);
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(keyLightMode, getKeyLightMode);
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(ambientLightMode, getAmbientLightMode);
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(ambientLightMode, getAmbientLightMode);
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(skyboxMode, getSkyboxMode);
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(skyboxMode, getSkyboxMode);
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(hazeMode, getHazeMode);
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(hazeMode, getHazeMode);
|
||||||
COPY_ENTITY_PROPERTY_TO_PROPERTIES(bloomMode, getBloomMode);
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(bloomMode, getBloomMode);
|
||||||
|
COPY_ENTITY_PROPERTY_TO_PROPERTIES(avatarPriority, getAvatarPriority);
|
||||||
|
|
||||||
return properties;
|
return properties;
|
||||||
}
|
}
|
||||||
|
@ -194,7 +194,7 @@ int ZoneEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data,
|
||||||
READ_ENTITY_PROPERTY(PROP_SKYBOX_MODE, uint32_t, setSkyboxMode);
|
READ_ENTITY_PROPERTY(PROP_SKYBOX_MODE, uint32_t, setSkyboxMode);
|
||||||
READ_ENTITY_PROPERTY(PROP_HAZE_MODE, uint32_t, setHazeMode);
|
READ_ENTITY_PROPERTY(PROP_HAZE_MODE, uint32_t, setHazeMode);
|
||||||
READ_ENTITY_PROPERTY(PROP_BLOOM_MODE, uint32_t, setBloomMode);
|
READ_ENTITY_PROPERTY(PROP_BLOOM_MODE, uint32_t, setBloomMode);
|
||||||
READ_ENTITY_PROPERTY(PROP_AVATAR_PRIORITY, bool, setAvatarPriority);
|
READ_ENTITY_PROPERTY(PROP_AVATAR_PRIORITY, uint32_t, setAvatarPriority);
|
||||||
|
|
||||||
return bytesRead;
|
return bytesRead;
|
||||||
}
|
}
|
||||||
|
@ -476,8 +476,10 @@ bool ZoneEntityItem::matchesJSONFilters(const QJsonObject& jsonFilters) const {
|
||||||
|
|
||||||
static const QString AVATAR_PRIORITY_PROPERTY = "avatarPriority";
|
static const QString AVATAR_PRIORITY_PROPERTY = "avatarPriority";
|
||||||
|
|
||||||
if (jsonFilters.contains(AVATAR_PRIORITY_PROPERTY)) {
|
// If set ignore only priority-inherit zones:
|
||||||
return (jsonFilters[AVATAR_PRIORITY_PROPERTY].toBool() == _avatarPriority);
|
if (jsonFilters.contains(AVATAR_PRIORITY_PROPERTY) && jsonFilters[AVATAR_PRIORITY_PROPERTY].toBool()
|
||||||
|
&& _avatarPriority != COMPONENT_MODE_INHERIT) {
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Chain to base:
|
// Chain to base:
|
||||||
|
|
|
@ -98,8 +98,8 @@ public:
|
||||||
QString getFilterURL() const;
|
QString getFilterURL() const;
|
||||||
void setFilterURL(const QString url);
|
void setFilterURL(const QString url);
|
||||||
|
|
||||||
bool getAvatarPriority() const { return _avatarPriority; }
|
uint32_t getAvatarPriority() const { return _avatarPriority; }
|
||||||
void setAvatarPriority(bool value) { _avatarPriority = value; }
|
void setAvatarPriority(uint32_t value) { _avatarPriority = value; }
|
||||||
|
|
||||||
bool keyLightPropertiesChanged() const { return _keyLightPropertiesChanged; }
|
bool keyLightPropertiesChanged() const { return _keyLightPropertiesChanged; }
|
||||||
bool ambientLightPropertiesChanged() const { return _ambientLightPropertiesChanged; }
|
bool ambientLightPropertiesChanged() const { return _ambientLightPropertiesChanged; }
|
||||||
|
@ -130,7 +130,6 @@ public:
|
||||||
static const bool DEFAULT_FLYING_ALLOWED;
|
static const bool DEFAULT_FLYING_ALLOWED;
|
||||||
static const bool DEFAULT_GHOSTING_ALLOWED;
|
static const bool DEFAULT_GHOSTING_ALLOWED;
|
||||||
static const QString DEFAULT_FILTER_URL;
|
static const QString DEFAULT_FILTER_URL;
|
||||||
static const bool DEFAULT_AVATAR_PRIORITY = false;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
KeyLightPropertyGroup _keyLightProperties;
|
KeyLightPropertyGroup _keyLightProperties;
|
||||||
|
@ -156,7 +155,7 @@ protected:
|
||||||
QString _filterURL { DEFAULT_FILTER_URL };
|
QString _filterURL { DEFAULT_FILTER_URL };
|
||||||
|
|
||||||
// Avatar-updates priority
|
// Avatar-updates priority
|
||||||
bool _avatarPriority { DEFAULT_AVATAR_PRIORITY };
|
uint32_t _avatarPriority { COMPONENT_MODE_INHERIT };
|
||||||
|
|
||||||
// Dirty flags turn true when either keylight properties is changing values.
|
// Dirty flags turn true when either keylight properties is changing values.
|
||||||
bool _keyLightPropertiesChanged { false };
|
bool _keyLightPropertiesChanged { false };
|
||||||
|
|
|
@ -135,7 +135,7 @@
|
||||||
"tooltip": "The radius of bloom. The higher the value, the larger the bloom."
|
"tooltip": "The radius of bloom. The higher the value, the larger the bloom."
|
||||||
},
|
},
|
||||||
"avatarPriority": {
|
"avatarPriority": {
|
||||||
"tooltip": "Avatars in this zone will have a higher update priority."
|
"tooltip": "Alter Avatars' update priorities."
|
||||||
},
|
},
|
||||||
"modelURL": {
|
"modelURL": {
|
||||||
"tooltip": "A mesh model from an FBX or OBJ file."
|
"tooltip": "A mesh model from an FBX or OBJ file."
|
||||||
|
|
|
@ -383,7 +383,7 @@ const DEFAULT_ENTITY_PROPERTIES = {
|
||||||
},
|
},
|
||||||
shapeType: "box",
|
shapeType: "box",
|
||||||
bloomMode: "inherit",
|
bloomMode: "inherit",
|
||||||
avatarPriority: false
|
avatarPriority: "inherit"
|
||||||
},
|
},
|
||||||
Model: {
|
Model: {
|
||||||
collisionShape: "none",
|
collisionShape: "none",
|
||||||
|
|
|
@ -430,7 +430,8 @@ const GROUPS = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: "Avatar Priority",
|
label: "Avatar Priority",
|
||||||
type: "bool",
|
type: "dropdown",
|
||||||
|
options: { inherit: "Inherit", crowd: "Crowd", hero: "Hero" },
|
||||||
propertyID: "avatarPriority",
|
propertyID: "avatarPriority",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue