mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 19:10:06 +00:00
Placefile text animation support
This commit is contained in:
parent
e013b9a77f
commit
4cc1a2b310
14 changed files with 89 additions and 1 deletions
|
|
@ -95,6 +95,8 @@ public:
|
||||||
bool dirty_ {false};
|
bool dirty_ {false};
|
||||||
bool thresholded_ {false};
|
bool thresholded_ {false};
|
||||||
|
|
||||||
|
std::chrono::system_clock::time_point selectedTime_ {};
|
||||||
|
|
||||||
std::mutex iconMutex_;
|
std::mutex iconMutex_;
|
||||||
|
|
||||||
boost::unordered_flat_map<std::size_t, PlacefileIconInfo>
|
boost::unordered_flat_map<std::size_t, PlacefileIconInfo>
|
||||||
|
|
@ -139,6 +141,12 @@ PlacefileIcons::~PlacefileIcons() = default;
|
||||||
PlacefileIcons::PlacefileIcons(PlacefileIcons&&) noexcept = default;
|
PlacefileIcons::PlacefileIcons(PlacefileIcons&&) noexcept = default;
|
||||||
PlacefileIcons& PlacefileIcons::operator=(PlacefileIcons&&) noexcept = default;
|
PlacefileIcons& PlacefileIcons::operator=(PlacefileIcons&&) noexcept = default;
|
||||||
|
|
||||||
|
void PlacefileIcons::set_selected_time(
|
||||||
|
std::chrono::system_clock::time_point selectedTime)
|
||||||
|
{
|
||||||
|
p->selectedTime_ = selectedTime;
|
||||||
|
}
|
||||||
|
|
||||||
void PlacefileIcons::set_thresholded(bool thresholded)
|
void PlacefileIcons::set_thresholded(bool thresholded)
|
||||||
{
|
{
|
||||||
p->thresholded_ = thresholded;
|
p->thresholded_ = thresholded;
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ public:
|
||||||
PlacefileIcons(PlacefileIcons&&) noexcept;
|
PlacefileIcons(PlacefileIcons&&) noexcept;
|
||||||
PlacefileIcons& operator=(PlacefileIcons&&) noexcept;
|
PlacefileIcons& operator=(PlacefileIcons&&) noexcept;
|
||||||
|
|
||||||
|
void set_selected_time(std::chrono::system_clock::time_point selectedTime);
|
||||||
void set_thresholded(bool thresholded);
|
void set_thresholded(bool thresholded);
|
||||||
|
|
||||||
void Initialize() override;
|
void Initialize() override;
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,8 @@ public:
|
||||||
bool dirty_ {false};
|
bool dirty_ {false};
|
||||||
bool thresholded_ {false};
|
bool thresholded_ {false};
|
||||||
|
|
||||||
|
std::chrono::system_clock::time_point selectedTime_ {};
|
||||||
|
|
||||||
std::mutex imageMutex_;
|
std::mutex imageMutex_;
|
||||||
|
|
||||||
boost::unordered_flat_map<std::string, PlacefileImageInfo>
|
boost::unordered_flat_map<std::string, PlacefileImageInfo>
|
||||||
|
|
@ -117,6 +119,12 @@ PlacefileImages::PlacefileImages(PlacefileImages&&) noexcept = default;
|
||||||
PlacefileImages&
|
PlacefileImages&
|
||||||
PlacefileImages::operator=(PlacefileImages&&) noexcept = default;
|
PlacefileImages::operator=(PlacefileImages&&) noexcept = default;
|
||||||
|
|
||||||
|
void PlacefileImages::set_selected_time(
|
||||||
|
std::chrono::system_clock::time_point selectedTime)
|
||||||
|
{
|
||||||
|
p->selectedTime_ = selectedTime;
|
||||||
|
}
|
||||||
|
|
||||||
void PlacefileImages::set_thresholded(bool thresholded)
|
void PlacefileImages::set_thresholded(bool thresholded)
|
||||||
{
|
{
|
||||||
p->thresholded_ = thresholded;
|
p->thresholded_ = thresholded;
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ public:
|
||||||
PlacefileImages(PlacefileImages&&) noexcept;
|
PlacefileImages(PlacefileImages&&) noexcept;
|
||||||
PlacefileImages& operator=(PlacefileImages&&) noexcept;
|
PlacefileImages& operator=(PlacefileImages&&) noexcept;
|
||||||
|
|
||||||
|
void set_selected_time(std::chrono::system_clock::time_point selectedTime);
|
||||||
void set_thresholded(bool thresholded);
|
void set_thresholded(bool thresholded);
|
||||||
|
|
||||||
void Initialize() override;
|
void Initialize() override;
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,8 @@ public:
|
||||||
bool dirty_ {false};
|
bool dirty_ {false};
|
||||||
bool thresholded_ {false};
|
bool thresholded_ {false};
|
||||||
|
|
||||||
|
std::chrono::system_clock::time_point selectedTime_ {};
|
||||||
|
|
||||||
std::mutex lineMutex_ {};
|
std::mutex lineMutex_ {};
|
||||||
|
|
||||||
std::size_t currentNumLines_ {};
|
std::size_t currentNumLines_ {};
|
||||||
|
|
@ -109,6 +111,12 @@ PlacefileLines::~PlacefileLines() = default;
|
||||||
PlacefileLines::PlacefileLines(PlacefileLines&&) noexcept = default;
|
PlacefileLines::PlacefileLines(PlacefileLines&&) noexcept = default;
|
||||||
PlacefileLines& PlacefileLines::operator=(PlacefileLines&&) noexcept = default;
|
PlacefileLines& PlacefileLines::operator=(PlacefileLines&&) noexcept = default;
|
||||||
|
|
||||||
|
void PlacefileLines::set_selected_time(
|
||||||
|
std::chrono::system_clock::time_point selectedTime)
|
||||||
|
{
|
||||||
|
p->selectedTime_ = selectedTime;
|
||||||
|
}
|
||||||
|
|
||||||
void PlacefileLines::set_thresholded(bool thresholded)
|
void PlacefileLines::set_thresholded(bool thresholded)
|
||||||
{
|
{
|
||||||
p->thresholded_ = thresholded;
|
p->thresholded_ = thresholded;
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ public:
|
||||||
PlacefileLines(PlacefileLines&&) noexcept;
|
PlacefileLines(PlacefileLines&&) noexcept;
|
||||||
PlacefileLines& operator=(PlacefileLines&&) noexcept;
|
PlacefileLines& operator=(PlacefileLines&&) noexcept;
|
||||||
|
|
||||||
|
void set_selected_time(std::chrono::system_clock::time_point selectedTime);
|
||||||
void set_thresholded(bool thresholded);
|
void set_thresholded(bool thresholded);
|
||||||
|
|
||||||
void Initialize() override;
|
void Initialize() override;
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,8 @@ public:
|
||||||
bool dirty_ {false};
|
bool dirty_ {false};
|
||||||
bool thresholded_ {false};
|
bool thresholded_ {false};
|
||||||
|
|
||||||
|
std::chrono::system_clock::time_point selectedTime_ {};
|
||||||
|
|
||||||
boost::container::stable_vector<TessVertexArray> tessCombineBuffer_ {};
|
boost::container::stable_vector<TessVertexArray> tessCombineBuffer_ {};
|
||||||
|
|
||||||
std::mutex bufferMutex_ {};
|
std::mutex bufferMutex_ {};
|
||||||
|
|
@ -126,6 +128,12 @@ PlacefilePolygons::PlacefilePolygons(PlacefilePolygons&&) noexcept = default;
|
||||||
PlacefilePolygons&
|
PlacefilePolygons&
|
||||||
PlacefilePolygons::operator=(PlacefilePolygons&&) noexcept = default;
|
PlacefilePolygons::operator=(PlacefilePolygons&&) noexcept = default;
|
||||||
|
|
||||||
|
void PlacefilePolygons::set_selected_time(
|
||||||
|
std::chrono::system_clock::time_point selectedTime)
|
||||||
|
{
|
||||||
|
p->selectedTime_ = selectedTime;
|
||||||
|
}
|
||||||
|
|
||||||
void PlacefilePolygons::set_thresholded(bool thresholded)
|
void PlacefilePolygons::set_thresholded(bool thresholded)
|
||||||
{
|
{
|
||||||
p->thresholded_ = thresholded;
|
p->thresholded_ = thresholded;
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ public:
|
||||||
PlacefilePolygons(PlacefilePolygons&&) noexcept;
|
PlacefilePolygons(PlacefilePolygons&&) noexcept;
|
||||||
PlacefilePolygons& operator=(PlacefilePolygons&&) noexcept;
|
PlacefilePolygons& operator=(PlacefilePolygons&&) noexcept;
|
||||||
|
|
||||||
|
void set_selected_time(std::chrono::system_clock::time_point selectedTime);
|
||||||
void set_thresholded(bool thresholded);
|
void set_thresholded(bool thresholded);
|
||||||
|
|
||||||
void Initialize() override;
|
void Initialize() override;
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,8 @@ public:
|
||||||
|
|
||||||
bool thresholded_ {false};
|
bool thresholded_ {false};
|
||||||
|
|
||||||
|
std::chrono::system_clock::time_point selectedTime_ {};
|
||||||
|
|
||||||
std::uint32_t textId_ {};
|
std::uint32_t textId_ {};
|
||||||
glm::vec2 mapScreenCoordLocation_ {};
|
glm::vec2 mapScreenCoordLocation_ {};
|
||||||
float mapScale_ {1.0f};
|
float mapScale_ {1.0f};
|
||||||
|
|
@ -77,6 +79,12 @@ void PlacefileText::set_placefile_name(const std::string& placefileName)
|
||||||
p->placefileName_ = placefileName;
|
p->placefileName_ = placefileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PlacefileText::set_selected_time(
|
||||||
|
std::chrono::system_clock::time_point selectedTime)
|
||||||
|
{
|
||||||
|
p->selectedTime_ = selectedTime;
|
||||||
|
}
|
||||||
|
|
||||||
void PlacefileText::set_thresholded(bool thresholded)
|
void PlacefileText::set_thresholded(bool thresholded)
|
||||||
{
|
{
|
||||||
p->thresholded_ = thresholded;
|
p->thresholded_ = thresholded;
|
||||||
|
|
@ -117,7 +125,15 @@ void PlacefileText::Impl::RenderTextDrawItem(
|
||||||
const QMapLibreGL::CustomLayerRenderParameters& params,
|
const QMapLibreGL::CustomLayerRenderParameters& params,
|
||||||
const std::shared_ptr<const gr::Placefile::TextDrawItem>& di)
|
const std::shared_ptr<const gr::Placefile::TextDrawItem>& di)
|
||||||
{
|
{
|
||||||
if (!thresholded_ || mapDistance_ <= di->threshold_)
|
// If no time has been selected, use the current time
|
||||||
|
std::chrono::system_clock::time_point selectedTime =
|
||||||
|
(selectedTime_ == std::chrono::system_clock::time_point {}) ?
|
||||||
|
std::chrono::system_clock::now() :
|
||||||
|
selectedTime_;
|
||||||
|
|
||||||
|
if ((!thresholded_ || mapDistance_ <= di->threshold_) &&
|
||||||
|
(di->startTime_ == std::chrono::system_clock::time_point {} ||
|
||||||
|
(di->startTime_ <= selectedTime && selectedTime < di->endTime_)))
|
||||||
{
|
{
|
||||||
const auto screenCoordinates = (util::maplibre::LatLongToScreenCoordinate(
|
const auto screenCoordinates = (util::maplibre::LatLongToScreenCoordinate(
|
||||||
{di->latitude_, di->longitude_}) -
|
{di->latitude_, di->longitude_}) -
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ public:
|
||||||
PlacefileText& operator=(PlacefileText&&) noexcept;
|
PlacefileText& operator=(PlacefileText&&) noexcept;
|
||||||
|
|
||||||
void set_placefile_name(const std::string& placefileName);
|
void set_placefile_name(const std::string& placefileName);
|
||||||
|
void set_selected_time(std::chrono::system_clock::time_point selectedTime);
|
||||||
void set_thresholded(bool thresholded);
|
void set_thresholded(bool thresholded);
|
||||||
|
|
||||||
void Initialize() override;
|
void Initialize() override;
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,8 @@ public:
|
||||||
bool dirty_ {false};
|
bool dirty_ {false};
|
||||||
bool thresholded_ {false};
|
bool thresholded_ {false};
|
||||||
|
|
||||||
|
std::chrono::system_clock::time_point selectedTime_ {};
|
||||||
|
|
||||||
std::mutex bufferMutex_ {};
|
std::mutex bufferMutex_ {};
|
||||||
|
|
||||||
std::vector<GLfloat> currentBuffer_ {};
|
std::vector<GLfloat> currentBuffer_ {};
|
||||||
|
|
@ -76,6 +78,12 @@ PlacefileTriangles::PlacefileTriangles(PlacefileTriangles&&) noexcept = default;
|
||||||
PlacefileTriangles&
|
PlacefileTriangles&
|
||||||
PlacefileTriangles::operator=(PlacefileTriangles&&) noexcept = default;
|
PlacefileTriangles::operator=(PlacefileTriangles&&) noexcept = default;
|
||||||
|
|
||||||
|
void PlacefileTriangles::set_selected_time(
|
||||||
|
std::chrono::system_clock::time_point selectedTime)
|
||||||
|
{
|
||||||
|
p->selectedTime_ = selectedTime;
|
||||||
|
}
|
||||||
|
|
||||||
void PlacefileTriangles::set_thresholded(bool thresholded)
|
void PlacefileTriangles::set_thresholded(bool thresholded)
|
||||||
{
|
{
|
||||||
p->thresholded_ = thresholded;
|
p->thresholded_ = thresholded;
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ public:
|
||||||
PlacefileTriangles(PlacefileTriangles&&) noexcept;
|
PlacefileTriangles(PlacefileTriangles&&) noexcept;
|
||||||
PlacefileTriangles& operator=(PlacefileTriangles&&) noexcept;
|
PlacefileTriangles& operator=(PlacefileTriangles&&) noexcept;
|
||||||
|
|
||||||
|
void set_selected_time(std::chrono::system_clock::time_point selectedTime);
|
||||||
void set_thresholded(bool thresholded);
|
void set_thresholded(bool thresholded);
|
||||||
|
|
||||||
void Initialize() override;
|
void Initialize() override;
|
||||||
|
|
|
||||||
|
|
@ -839,6 +839,15 @@ void MainWindowImpl::ConnectAnimationSignals()
|
||||||
timelineManager_.get(),
|
timelineManager_.get(),
|
||||||
&manager::TimelineManager::AnimationStepEnd);
|
&manager::TimelineManager::AnimationStepEnd);
|
||||||
|
|
||||||
|
connect(timelineManager_.get(),
|
||||||
|
&manager::TimelineManager::SelectedTimeUpdated,
|
||||||
|
[this]()
|
||||||
|
{
|
||||||
|
for (auto map : maps_)
|
||||||
|
{
|
||||||
|
map->update();
|
||||||
|
}
|
||||||
|
});
|
||||||
connect(timelineManager_.get(),
|
connect(timelineManager_.get(),
|
||||||
&manager::TimelineManager::VolumeTimeUpdated,
|
&manager::TimelineManager::VolumeTimeUpdated,
|
||||||
[this](std::chrono::system_clock::time_point dateTime)
|
[this](std::chrono::system_clock::time_point dateTime)
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
#include <scwx/qt/gl/draw/placefile_triangles.hpp>
|
#include <scwx/qt/gl/draw/placefile_triangles.hpp>
|
||||||
#include <scwx/qt/gl/draw/placefile_text.hpp>
|
#include <scwx/qt/gl/draw/placefile_text.hpp>
|
||||||
#include <scwx/qt/manager/placefile_manager.hpp>
|
#include <scwx/qt/manager/placefile_manager.hpp>
|
||||||
|
#include <scwx/qt/manager/timeline_manager.hpp>
|
||||||
#include <scwx/util/logger.hpp>
|
#include <scwx/util/logger.hpp>
|
||||||
|
|
||||||
#include <boost/asio/post.hpp>
|
#include <boost/asio/post.hpp>
|
||||||
|
|
@ -58,6 +59,8 @@ public:
|
||||||
std::shared_ptr<gl::draw::PlacefilePolygons> placefilePolygons_;
|
std::shared_ptr<gl::draw::PlacefilePolygons> placefilePolygons_;
|
||||||
std::shared_ptr<gl::draw::PlacefileTriangles> placefileTriangles_;
|
std::shared_ptr<gl::draw::PlacefileTriangles> placefileTriangles_;
|
||||||
std::shared_ptr<gl::draw::PlacefileText> placefileText_;
|
std::shared_ptr<gl::draw::PlacefileText> placefileText_;
|
||||||
|
|
||||||
|
std::chrono::system_clock::time_point selectedTime_ {};
|
||||||
};
|
};
|
||||||
|
|
||||||
PlacefileLayer::PlacefileLayer(const std::shared_ptr<MapContext>& context,
|
PlacefileLayer::PlacefileLayer(const std::shared_ptr<MapContext>& context,
|
||||||
|
|
@ -80,6 +83,7 @@ PlacefileLayer::~PlacefileLayer() = default;
|
||||||
void PlacefileLayer::Impl::ConnectSignals()
|
void PlacefileLayer::Impl::ConnectSignals()
|
||||||
{
|
{
|
||||||
auto placefileManager = manager::PlacefileManager::Instance();
|
auto placefileManager = manager::PlacefileManager::Instance();
|
||||||
|
auto timelineManager = manager::TimelineManager::Instance();
|
||||||
|
|
||||||
QObject::connect(placefileManager.get(),
|
QObject::connect(placefileManager.get(),
|
||||||
&manager::PlacefileManager::PlacefileUpdated,
|
&manager::PlacefileManager::PlacefileUpdated,
|
||||||
|
|
@ -91,6 +95,12 @@ void PlacefileLayer::Impl::ConnectSignals()
|
||||||
self_->ReloadData();
|
self_->ReloadData();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
QObject::connect(timelineManager.get(),
|
||||||
|
&manager::TimelineManager::SelectedTimeUpdated,
|
||||||
|
self_,
|
||||||
|
[this](std::chrono::system_clock::time_point dateTime)
|
||||||
|
{ selectedTime_ = dateTime; });
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string PlacefileLayer::placefile_name() const
|
std::string PlacefileLayer::placefile_name() const
|
||||||
|
|
@ -137,6 +147,13 @@ void PlacefileLayer::Render(
|
||||||
p->placefilePolygons_->set_thresholded(thresholded);
|
p->placefilePolygons_->set_thresholded(thresholded);
|
||||||
p->placefileTriangles_->set_thresholded(thresholded);
|
p->placefileTriangles_->set_thresholded(thresholded);
|
||||||
p->placefileText_->set_thresholded(thresholded);
|
p->placefileText_->set_thresholded(thresholded);
|
||||||
|
|
||||||
|
p->placefileIcons_->set_selected_time(p->selectedTime_);
|
||||||
|
p->placefileImages_->set_selected_time(p->selectedTime_);
|
||||||
|
p->placefileLines_->set_selected_time(p->selectedTime_);
|
||||||
|
p->placefilePolygons_->set_selected_time(p->selectedTime_);
|
||||||
|
p->placefileTriangles_->set_selected_time(p->selectedTime_);
|
||||||
|
p->placefileText_->set_selected_time(p->selectedTime_);
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawLayer::Render(params);
|
DrawLayer::Render(params);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue