Add editor freelook navigation scheme settings
Depending on what one is trying to achieve, a different freelook mode may be more desirable. This closes #34034.
This commit is contained in:
parent
d817be92c2
commit
8a48fb3517
3 changed files with 28 additions and 2 deletions
|
@ -559,6 +559,8 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
|
|||
hints["editors/3d/navigation_feel/manipulation_translation_inertia"] = PropertyInfo(Variant::FLOAT, "editors/3d/navigation_feel/manipulation_translation_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
|
||||
|
||||
// 3D: Freelook
|
||||
_initial_set("editors/3d/freelook/freelook_navigation_scheme", false);
|
||||
hints["editors/3d/freelook/freelook_navigation_scheme"] = PropertyInfo(Variant::INT, "editors/3d/freelook/freelook_navigation_scheme", PROPERTY_HINT_ENUM, "Default,Partially Axis-Locked (id Tech),Fully Axis-Locked (Minecraft)");
|
||||
_initial_set("editors/3d/freelook/freelook_inertia", 0.1);
|
||||
hints["editors/3d/freelook/freelook_inertia"] = PropertyInfo(Variant::FLOAT, "editors/3d/freelook/freelook_inertia", PROPERTY_HINT_RANGE, "0.0, 1, 0.01");
|
||||
_initial_set("editors/3d/freelook/freelook_base_speed", 5.0);
|
||||
|
|
|
@ -2287,9 +2287,27 @@ void Node3DEditorViewport::_update_freelook(real_t delta) {
|
|||
return;
|
||||
}
|
||||
|
||||
const Vector3 forward = camera->get_transform().basis.xform(Vector3(0, 0, -1));
|
||||
const FreelookNavigationScheme navigation_scheme = (FreelookNavigationScheme)EditorSettings::get_singleton()->get("editors/3d/freelook/freelook_navigation_scheme").operator int();
|
||||
|
||||
Vector3 forward;
|
||||
if (navigation_scheme == FREELOOK_FULLY_AXIS_LOCKED) {
|
||||
// Forward/backward keys will always go straight forward/backward, never moving on the Y axis.
|
||||
forward = Vector3(0, 0, -1).rotated(Vector3(0, 1, 0), camera->get_rotation().y);
|
||||
} else {
|
||||
// Forward/backward keys will be relative to the camera pitch.
|
||||
forward = camera->get_transform().basis.xform(Vector3(0, 0, -1));
|
||||
}
|
||||
|
||||
const Vector3 right = camera->get_transform().basis.xform(Vector3(1, 0, 0));
|
||||
const Vector3 up = camera->get_transform().basis.xform(Vector3(0, 1, 0));
|
||||
|
||||
Vector3 up;
|
||||
if (navigation_scheme == FREELOOK_PARTIALLY_AXIS_LOCKED || navigation_scheme == FREELOOK_FULLY_AXIS_LOCKED) {
|
||||
// Up/down keys will always go up/down regardless of camera pitch.
|
||||
up = Vector3(0, 1, 0);
|
||||
} else {
|
||||
// Up/down keys will be relative to the camera pitch.
|
||||
up = camera->get_transform().basis.xform(Vector3(0, 1, 0));
|
||||
}
|
||||
|
||||
Vector3 direction;
|
||||
|
||||
|
|
|
@ -241,6 +241,12 @@ public:
|
|||
NAVIGATION_MODO,
|
||||
};
|
||||
|
||||
enum FreelookNavigationScheme {
|
||||
FREELOOK_DEFAULT,
|
||||
FREELOOK_PARTIALLY_AXIS_LOCKED,
|
||||
FREELOOK_FULLY_AXIS_LOCKED,
|
||||
};
|
||||
|
||||
private:
|
||||
float cpu_time_history[FRAME_TIME_HISTORY];
|
||||
int cpu_time_history_index;
|
||||
|
|
Loading…
Reference in a new issue