diff --git a/Editor/GeneralWindow.cpp b/Editor/GeneralWindow.cpp index ec176438a..138fcbd8c 100644 --- a/Editor/GeneralWindow.cpp +++ b/Editor/GeneralWindow.cpp @@ -270,6 +270,20 @@ void GeneralWindow::Create(EditorComponent* _editor) }); AddWidget(&transformToolOpacitySlider); + transformToolDarkenSlider.Create(0, 1, 1, 100, "Darken Negative Axes: "); + transformToolDarkenSlider.SetTooltip("You can control the darkening of the object placement tool's negative axes"); + transformToolDarkenSlider.SetSize(XMFLOAT2(100, 18)); + if (editor->main->config.GetSection("options").Has("transform_tool_darken_negative_axes")) + { + transformToolDarkenSlider.SetValue(editor->main->config.GetSection("options").GetFloat("transform_tool_darken_negative_axes")); + editor->translator.darken_negative_axes = transformToolDarkenSlider.GetValue(); + } + transformToolDarkenSlider.OnSlide([=](wi::gui::EventArgs args) { + editor->translator.darken_negative_axes = args.fValue; + editor->main->config.GetSection("options").Set("transform_tool_darken_negative_axes", args.fValue); + }); + AddWidget(&transformToolDarkenSlider); + bonePickerOpacitySlider.Create(0, 1, 1, 100, "Bone Picker Opacity: "); bonePickerOpacitySlider.SetTooltip("You can control the transparency of the bone selector tool"); bonePickerOpacitySlider.SetSize(XMFLOAT2(100, 18)); @@ -1042,6 +1056,7 @@ void GeneralWindow::ResizeLayout() float prev_width = width; width -= padding * 6; add(transformToolOpacitySlider); + add(transformToolDarkenSlider); add(bonePickerOpacitySlider); add_right(skeletonsVisibleCheckBox); diff --git a/Editor/GeneralWindow.h b/Editor/GeneralWindow.h index a7b03016f..24c2b572b 100644 --- a/Editor/GeneralWindow.h +++ b/Editor/GeneralWindow.h @@ -35,6 +35,7 @@ public: wi::gui::CheckBox focusModeCheckBox; wi::gui::Slider transformToolOpacitySlider; + wi::gui::Slider transformToolDarkenSlider; wi::gui::Slider bonePickerOpacitySlider; wi::gui::CheckBox skeletonsVisibleCheckBox; diff --git a/Editor/Translator.cpp b/Editor/Translator.cpp index d34ee4a67..0a4f5b2ae 100644 --- a/Editor/Translator.cpp +++ b/Editor/Translator.cpp @@ -707,23 +707,28 @@ void Translator::Draw(const CameraComponent& camera, const XMFLOAT4& currentMous }; device->BindVertexBuffers(vbs, 0, arraysize(vbs), strides, offsets, cmd); + float darken = 1; + // x XMStoreFloat4x4(&sb.g_xTransform, matX * GetMirrorMatrix(TRANSLATOR_X, camera) * mat); - sb.g_xColor = state == TRANSLATOR_X ? highlight_color : XMFLOAT4(1, channel_min, channel_min, 1); + darken = camera.Eye.x < transform.translation_local.x ? darken_negative_axes : 1; + sb.g_xColor = state == TRANSLATOR_X ? highlight_color : XMFLOAT4(darken, channel_min * darken, channel_min * darken, 1); sb.g_xColor.w *= opacity; device->BindDynamicConstantBuffer(sb, CBSLOT_RENDERER_MISC, cmd); device->Draw(vertexCount, 0, cmd); // y XMStoreFloat4x4(&sb.g_xTransform, matY * GetMirrorMatrix(TRANSLATOR_Y, camera)* mat); - sb.g_xColor = state == TRANSLATOR_Y ? highlight_color : XMFLOAT4(channel_min, 1, channel_min, 1); + darken = camera.Eye.y < transform.translation_local.y ? darken_negative_axes : 1; + sb.g_xColor = state == TRANSLATOR_Y ? highlight_color : XMFLOAT4(channel_min * darken, darken, channel_min * darken, 1); sb.g_xColor.w *= opacity; device->BindDynamicConstantBuffer(sb, CBSLOT_RENDERER_MISC, cmd); device->Draw(vertexCount, 0, cmd); // z XMStoreFloat4x4(&sb.g_xTransform, matZ * GetMirrorMatrix(TRANSLATOR_Z, camera)* mat); - sb.g_xColor = state == TRANSLATOR_Z ? highlight_color : XMFLOAT4(channel_min, channel_min, 1, 1); + darken = camera.Eye.z < transform.translation_local.z ? darken_negative_axes : 1; + sb.g_xColor = state == TRANSLATOR_Z ? highlight_color : XMFLOAT4(channel_min * darken, channel_min * darken, darken, 1); sb.g_xColor.w *= opacity; device->BindDynamicConstantBuffer(sb, CBSLOT_RENDERER_MISC, cmd); device->Draw(vertexCount, 0, cmd); @@ -926,19 +931,23 @@ void Translator::Draw(const CameraComponent& camera, const XMFLOAT4& currentMous params.shadow_softness = 0.8f; XMVECTOR pos = transform.GetPositionV(); - params.color = wi::Color::fromFloat4(XMFLOAT4(1, channel_min, channel_min, opacity)); + float darken = 1; + darken = camera.Eye.x < transform.translation_local.x ? darken_negative_axes : 1; + params.color = wi::Color::fromFloat4(XMFLOAT4(darken, channel_min * darken, channel_min * darken, opacity)); XMStoreFloat3(¶ms.position, pos + XMVector3Transform(XMVectorSet(axis_length + 0.5f, 0, 0, 0) * dist, GetMirrorMatrix(TRANSLATOR_X, camera))); std::memset(TEXT, 0, sizeof(TEXT)); WriteAxisText(TRANSLATOR_X, camera, TEXT); wi::font::Draw(TEXT, strlen(TEXT), params, cmd); - params.color = wi::Color::fromFloat4(XMFLOAT4(channel_min, 1, channel_min, opacity)); + darken = camera.Eye.y < transform.translation_local.y ? darken_negative_axes : 1; + params.color = wi::Color::fromFloat4(XMFLOAT4(channel_min * darken, darken, channel_min * darken, opacity)); XMStoreFloat3(¶ms.position, pos + XMVector3Transform(XMVectorSet(0, axis_length + 0.5f, 0, 0) * dist, GetMirrorMatrix(TRANSLATOR_Y, camera))); std::memset(TEXT, 0, sizeof(TEXT)); WriteAxisText(TRANSLATOR_Y, camera, TEXT); wi::font::Draw(TEXT, strlen(TEXT), params, cmd); - params.color = wi::Color::fromFloat4(XMFLOAT4(channel_min, channel_min, 1, opacity)); + darken = camera.Eye.z < transform.translation_local.z ? darken_negative_axes : 1; + params.color = wi::Color::fromFloat4(XMFLOAT4(channel_min * darken, channel_min * darken, darken, opacity)); XMStoreFloat3(¶ms.position, pos + XMVector3Transform(XMVectorSet(0, 0, axis_length + 0.5f, 0) * dist, GetMirrorMatrix(TRANSLATOR_Z, camera))); std::memset(TEXT, 0, sizeof(TEXT)); WriteAxisText(TRANSLATOR_Z, camera, TEXT); diff --git a/Editor/Translator.h b/Editor/Translator.h index 5619a7599..16af5e55c 100644 --- a/Editor/Translator.h +++ b/Editor/Translator.h @@ -33,6 +33,7 @@ public: float rotate_snap = XM_PIDIV4; float translate_snap = 1; float opacity = 1; + float darken_negative_axes = 1; enum TRANSLATOR_STATE {