|
|
@@ -26,77 +26,71 @@ namespace BansheeEngine
|
|
|
|
|
|
void HandleSliderManager::update(const HCamera& camera, const Vector2I& inputPos, const Ray& inputRay, bool pressed)
|
|
|
{
|
|
|
- float nearestT = std::numeric_limits<float>::max();
|
|
|
- HandleSlider* overSlider = nullptr;
|
|
|
- for (auto& slider : mSliders)
|
|
|
+ if (!pressed)
|
|
|
{
|
|
|
- float t;
|
|
|
- if (slider->intersects(inputRay, t))
|
|
|
+ if (mActiveSlider != nullptr)
|
|
|
{
|
|
|
- if (t < nearestT)
|
|
|
- {
|
|
|
- overSlider = slider;
|
|
|
- nearestT = t;
|
|
|
- }
|
|
|
+ mActiveSlider->setInactive();
|
|
|
+ mActiveSlider = nullptr;
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- if (overSlider != nullptr)
|
|
|
- {
|
|
|
- if (!pressed)
|
|
|
+ float nearestT = std::numeric_limits<float>::max();
|
|
|
+ HandleSlider* overSlider = nullptr;
|
|
|
+ for (auto& slider : mSliders)
|
|
|
{
|
|
|
- if (mActiveSlider != nullptr)
|
|
|
+ float t;
|
|
|
+ if (slider->intersects(inputRay, t))
|
|
|
{
|
|
|
- mActiveSlider->setInactive();
|
|
|
- mActiveSlider = nullptr;
|
|
|
- }
|
|
|
-
|
|
|
- if (mHoverSlider != overSlider)
|
|
|
- {
|
|
|
- if (mHoverSlider != nullptr)
|
|
|
- mHoverSlider->setInactive();
|
|
|
-
|
|
|
- mHoverSlider = overSlider;
|
|
|
- overSlider->setHover();
|
|
|
+ if (t < nearestT)
|
|
|
+ {
|
|
|
+ overSlider = slider;
|
|
|
+ nearestT = t;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- else
|
|
|
+
|
|
|
+ if (mHoverSlider != overSlider)
|
|
|
{
|
|
|
if (mHoverSlider != nullptr)
|
|
|
- {
|
|
|
mHoverSlider->setInactive();
|
|
|
- mHoverSlider = nullptr;
|
|
|
- }
|
|
|
|
|
|
- if (mActiveSlider != overSlider)
|
|
|
- {
|
|
|
- if (mActiveSlider != nullptr)
|
|
|
- mActiveSlider->setInactive();
|
|
|
+ mHoverSlider = overSlider;
|
|
|
|
|
|
- mActiveSlider = overSlider;
|
|
|
- overSlider->setActive(inputPos);
|
|
|
- }
|
|
|
+ if (mHoverSlider != nullptr)
|
|
|
+ overSlider->setHover();
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- if (mActiveSlider != nullptr)
|
|
|
+ if (mActiveSlider == nullptr)
|
|
|
{
|
|
|
- mActiveSlider->setInactive();
|
|
|
- mActiveSlider = nullptr;
|
|
|
+ float nearestT = std::numeric_limits<float>::max();
|
|
|
+ HandleSlider* overSlider = nullptr;
|
|
|
+ for (auto& slider : mSliders)
|
|
|
+ {
|
|
|
+ float t;
|
|
|
+ if (slider->intersects(inputRay, t))
|
|
|
+ {
|
|
|
+ if (t < nearestT)
|
|
|
+ {
|
|
|
+ overSlider = slider;
|
|
|
+ nearestT = t;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (overSlider != nullptr)
|
|
|
+ {
|
|
|
+ mActiveSlider = overSlider;
|
|
|
+ mActiveSlider->setActive(inputPos);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- if (mHoverSlider != nullptr)
|
|
|
+ if (mActiveSlider != nullptr)
|
|
|
{
|
|
|
- mHoverSlider->setInactive();
|
|
|
- mHoverSlider = nullptr;
|
|
|
+ mActiveSlider->update(camera, inputPos, inputRay);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- if (mActiveSlider != nullptr)
|
|
|
- {
|
|
|
- mActiveSlider->update(camera, inputPos, inputRay);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
bool HandleSliderManager::isSliderActive() const
|