mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-01-10 05:32:18 -06:00
make follow-rotation mode an absolute value
instead of proportional to interaction sphere of anchor node. can be overridden by a node if one so wishes.
This commit is contained in:
@@ -217,6 +217,16 @@ namespace {
|
||||
openspace::properties::Property::Visibility::AdvancedUser
|
||||
};
|
||||
|
||||
constexpr openspace::properties::Property::PropertyInfo FollowRotationDistanceInfo =
|
||||
{
|
||||
"FollowRotationDistance",
|
||||
"Follow Rotation Distance",
|
||||
"Distance within which the orbital navigator will follow along this nodes"
|
||||
"rotation. A value less than zero means that the navigator will never follow"
|
||||
"along with the nodes rotation.",
|
||||
openspace::properties::Property::Visibility::AdvancedUser
|
||||
};
|
||||
|
||||
struct [[codegen::Dictionary(SceneGraphNode)]] Parameters {
|
||||
// The identifier of this scene graph node. This name must be unique among all
|
||||
// scene graph nodes that are loaded in a specific scene. If a duplicate is
|
||||
@@ -246,6 +256,9 @@ namespace {
|
||||
// [[codegen::verbatim(SupportsDirectInteractionInfo.description)]]
|
||||
std::optional<bool> supportsDirectInteraction;
|
||||
|
||||
// [[codegen::verbatim(FollowRotationDistanceInfo.description)]]
|
||||
std::optional<double> followRotationDistance;
|
||||
|
||||
struct Transform {
|
||||
// This node describes a translation that is applied to the scene graph node
|
||||
// and all its children. Depending on the 'Type' of the translation, this can
|
||||
@@ -401,6 +414,8 @@ ghoul::mm_unique_ptr<SceneGraphNode> SceneGraphNode::createFromDictionary(
|
||||
result->_approachFactor = p.approachFactor.value_or(result->_approachFactor);
|
||||
result->_reachFactor = p.reachFactor.value_or(result->_reachFactor);
|
||||
|
||||
result->_followRotationDistance = p.followRotationDistance.value_or(result->_followRotationDistance);
|
||||
|
||||
if (p.transform.has_value()) {
|
||||
ZoneScopedN("Transform");
|
||||
|
||||
@@ -564,6 +579,7 @@ SceneGraphNode::SceneGraphNode()
|
||||
, _visibilityDistance(VisibilityDistanceInfo, 6e10f)
|
||||
, _supportsDirectInteraction(SupportsDirectInteractionInfo, false)
|
||||
, _showDebugSphere(ShowDebugSphereInfo, false)
|
||||
, _followRotationDistance(FollowRotationDistanceInfo, -1.0, -1.0)
|
||||
{
|
||||
addProperty(_computeScreenSpaceValues);
|
||||
addProperty(_screenSpacePosition);
|
||||
@@ -1293,6 +1309,11 @@ double SceneGraphNode::approachFactor() const {
|
||||
return _approachFactor;
|
||||
}
|
||||
|
||||
double SceneGraphNode::followRotationDistance() const
|
||||
{
|
||||
return _followRotationDistance;
|
||||
}
|
||||
|
||||
bool SceneGraphNode::supportsDirectInteraction() const {
|
||||
return _supportsDirectInteraction;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user