VideoCommon: update the scale action to support the graphics mod editor

This commit is contained in:
iwubcode 2023-11-09 18:52:41 -06:00
commit d9b00c802e
2 changed files with 48 additions and 0 deletions

View file

@ -3,6 +3,10 @@
#include "VideoCommon/GraphicsModSystem/Runtime/Actions/ScaleAction.h"
#include "VideoCommon/GraphicsModEditor/EditorEvents.h"
#include <imgui.h>
std::unique_ptr<ScaleAction> ScaleAction::Create(const picojson::value& json_data)
{
Common::Vec3 scale;
@ -26,6 +30,11 @@ std::unique_ptr<ScaleAction> ScaleAction::Create(const picojson::value& json_dat
return std::make_unique<ScaleAction>(scale);
}
std::unique_ptr<ScaleAction> ScaleAction::Create()
{
return std::make_unique<ScaleAction>(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<double>(m_scale.x)};
json_obj["Y"] = picojson::value{static_cast<double>(m_scale.y)};
json_obj["Z"] = picojson::value{static_cast<double>(m_scale.z)};
}
std::string ScaleAction::GetFactoryName() const
{
return "scale";
}

View file

@ -15,11 +15,18 @@ class ScaleAction final : public GraphicsModAction
public:
static constexpr std::string_view factory_name = "scale";
static std::unique_ptr<ScaleAction> Create(const picojson::value& json_data);
static std::unique_ptr<ScaleAction> 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;
};