From ff34754274b05b19afea00a48184f7440d2d1753 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Fri, 9 Jan 2026 16:49:06 +0800 Subject: [PATCH] finish chicken nugget anime loader --- .../ChickenNuggetAnimeLoader/main.cpp | 7 +++-- .../Shared/basalt/anime_loader.cpp | 27 ++++++------------- .../Shared/basalt/anime_loader.hpp | 18 +++++++++---- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/BasaltPresenter/Plugins/AnimeLoader/ChickenNuggetAnimeLoader/main.cpp b/BasaltPresenter/Plugins/AnimeLoader/ChickenNuggetAnimeLoader/main.cpp index a4e0516..96694df 100644 --- a/BasaltPresenter/Plugins/AnimeLoader/ChickenNuggetAnimeLoader/main.cpp +++ b/BasaltPresenter/Plugins/AnimeLoader/ChickenNuggetAnimeLoader/main.cpp @@ -3,6 +3,7 @@ #include namespace anime_loader = ::basalt::shared::anime_loader; +using anime_loader::AnimeLoaderConfig; using anime_loader::IAnimeLoader; using anime_loader::KeyFrame; @@ -14,8 +15,10 @@ public: ChickenNuggetAnimeLoader() {} virtual ~ChickenNuggetAnimeLoader() {} -protected: - virtual void internal_load() override { +public: + virtual void load(AnimeLoaderConfig&& config) override { + IAnimeLoader::load(std::move(config)); + this->frames.emplace(60 * 0, KeyFrame{.position = {F(0), F(-10), F(10)}, .rotation = {F(0.382683), F(0), F(0), F(0.92388)}}); this->frames.emplace(60 * 1, KeyFrame{.position = {F(-10), F(0), F(10)}, diff --git a/BasaltPresenter/Shared/basalt/anime_loader.cpp b/BasaltPresenter/Shared/basalt/anime_loader.cpp index bd0f0e7..21f5f6c 100644 --- a/BasaltPresenter/Shared/basalt/anime_loader.cpp +++ b/BasaltPresenter/Shared/basalt/anime_loader.cpp @@ -6,33 +6,26 @@ namespace basalt::shared::anime_loader { #pragma region Anime Loader - IAnimeLoader::IAnimeLoader() : status(AnimeLoaderStatus::Ready), time(0), last_index(0) {} + IAnimeLoader::IAnimeLoader() : status(AnimeLoaderStatus::Ready), time(0) {} IAnimeLoader::~IAnimeLoader() {} - void IAnimeLoader::load() { + void IAnimeLoader::load(AnimeLoaderConfig&& config) { if (this->status != AnimeLoaderStatus::Ready) throw std::runtime_error("unexpected anime loader status"); - - // load by user - internal_load(); - - // check empty - if (this->frames.empty()) throw std::runtime_error("no anime key frames."); - // Get last frame index - auto last_pair = this->frames.end(); - --last_pair; - this->last_index = last_pair->first; - - // change status + this->config = std::move(config); this->status = AnimeLoaderStatus::Loaded; } KeyFrameSpan IAnimeLoader::tick() { if (this->status != AnimeLoaderStatus::Loaded) throw std::runtime_error("unexpected anime loader status"); + // Get last frame index + auto last_pair = this->frames.end(); + --last_pair; + auto last_index = last_pair->first; // Accumulate time ++this->time; - if (this->time > this->last_index) { + if (this->time > last_index) { this->time = 0; } @@ -61,10 +54,6 @@ namespace basalt::shared::anime_loader { }; } - void IAnimeLoader::internal_load() { - throw std::logic_error("unimplemented function"); - } - #pragma endregion } // namespace basalt::shared::anime_loader diff --git a/BasaltPresenter/Shared/basalt/anime_loader.hpp b/BasaltPresenter/Shared/basalt/anime_loader.hpp index 649a51d..e0050fe 100644 --- a/BasaltPresenter/Shared/basalt/anime_loader.hpp +++ b/BasaltPresenter/Shared/basalt/anime_loader.hpp @@ -28,6 +28,10 @@ namespace basalt::shared::anime_loader { math::Quaternion next_rotation; ///< 后一帧的摄像机旋转。 }; + struct AnimeLoaderConfig { + + }; + enum class AnimeLoaderStatus { Ready, Loaded, @@ -45,15 +49,19 @@ namespace basalt::shared::anime_loader { virtual ~IAnimeLoader(); public: - void load(); + /** + * @brief + * @remarks + * \li 重写时只允许往frames里插入数据。 + * \li 重写时务必保证frames里插入的数据大于2个,且初始节点的Key总是0。动画帧个数必须大于4。 + */ + virtual void load(AnimeLoaderConfig&& config); KeyFrameSpan tick(); - protected: - virtual void internal_load(); - protected: AnimeLoaderStatus status; - math::Index time, last_index; + AnimeLoaderConfig config; + math::Index time; std::map frames; };