diff --git a/Source/Core/VideoCommon/GraphicsModSystem/Runtime/Actions/ScaleAction.cpp b/Source/Core/VideoCommon/GraphicsModSystem/Runtime/Actions/ScaleAction.cpp index 305cd8b737..1b11e1b281 100644 --- a/Source/Core/VideoCommon/GraphicsModSystem/Runtime/Actions/ScaleAction.cpp +++ b/Source/Core/VideoCommon/GraphicsModSystem/Runtime/Actions/ScaleAction.cpp @@ -3,6 +3,10 @@ #include "VideoCommon/GraphicsModSystem/Runtime/Actions/ScaleAction.h" +#include "VideoCommon/GraphicsModEditor/EditorEvents.h" + +#include + std::unique_ptr ScaleAction::Create(const picojson::value& json_data) { Common::Vec3 scale; @@ -26,6 +30,11 @@ std::unique_ptr ScaleAction::Create(const picojson::value& json_dat return std::make_unique(scale); } +std::unique_ptr ScaleAction::Create() +{ + return std::make_unique(Common::Vec3{}); +} + ScaleAction::ScaleAction(Common::Vec3 scale) : m_scale(scale) { } @@ -73,3 +82,35 @@ void ScaleAction::OnProjectionAndTexture(GraphicsModActionData::Projection* proj matrix.data[0] = matrix.data[0] * m_scale.x; matrix.data[5] = matrix.data[5] * m_scale.y; } + +void ScaleAction::DrawImGui() +{ + if (ImGui::InputFloat("X", &m_scale.x)) + { + GraphicsModEditor::EditorEvents::ChangeOccurredEvent::Trigger(); + } + if (ImGui::InputFloat("Y", &m_scale.y)) + { + GraphicsModEditor::EditorEvents::ChangeOccurredEvent::Trigger(); + } + if (ImGui::InputFloat("Z", &m_scale.z)) + { + GraphicsModEditor::EditorEvents::ChangeOccurredEvent::Trigger(); + } +} + +void ScaleAction::SerializeToConfig(picojson::object* obj) +{ + if (!obj) [[unlikely]] + return; + + auto& json_obj = *obj; + json_obj["X"] = picojson::value{static_cast(m_scale.x)}; + json_obj["Y"] = picojson::value{static_cast(m_scale.y)}; + json_obj["Z"] = picojson::value{static_cast(m_scale.z)}; +} + +std::string ScaleAction::GetFactoryName() const +{ + return "scale"; +} diff --git a/Source/Core/VideoCommon/GraphicsModSystem/Runtime/Actions/ScaleAction.h b/Source/Core/VideoCommon/GraphicsModSystem/Runtime/Actions/ScaleAction.h index 4673ed2d18..3936d6d952 100644 --- a/Source/Core/VideoCommon/GraphicsModSystem/Runtime/Actions/ScaleAction.h +++ b/Source/Core/VideoCommon/GraphicsModSystem/Runtime/Actions/ScaleAction.h @@ -15,11 +15,18 @@ class ScaleAction final : public GraphicsModAction public: static constexpr std::string_view factory_name = "scale"; static std::unique_ptr Create(const picojson::value& json_data); + static std::unique_ptr Create(); + explicit ScaleAction(Common::Vec3 scale); void OnEFB(GraphicsModActionData::EFB*) override; void OnProjection(GraphicsModActionData::Projection*) override; void OnProjectionAndTexture(GraphicsModActionData::Projection*) override; + void DrawImGui() override; + + void SerializeToConfig(picojson::object* obj) override; + std::string GetFactoryName() const override; + private: Common::Vec3 m_scale; };