Files
XCEngine/editor/src/ComponentEditors/TransformComponentEditor.h

78 lines
2.2 KiB
C
Raw Normal View History

#pragma once
#include "IComponentEditor.h"
#include "Core/IUndoManager.h"
#include "UI/UI.h"
#include <XCEngine/Components/TransformComponent.h>
namespace XCEngine {
namespace Editor {
class TransformComponentEditor : public IComponentEditor {
public:
const char* GetComponentTypeName() const override {
return "Transform";
}
const char* GetDisplayName() const override {
return "Transform";
}
bool Render(::XCEngine::Components::Component* component, IUndoManager* undoManager) override {
auto* transform = dynamic_cast<::XCEngine::Components::TransformComponent*>(component);
if (!transform) {
return false;
}
::XCEngine::Math::Vector3 position = transform->GetLocalPosition();
::XCEngine::Math::Vector3 rotation = transform->GetLocalEulerAngles();
::XCEngine::Math::Vector3 scale = transform->GetLocalScale();
bool changed = false;
if (UI::DrawVec3("Position", position, 0.0f, 80.0f, 0.1f)) {
if (undoManager) {
undoManager->BeginInteractiveChange("Modify Transform");
}
transform->SetLocalPosition(position);
changed = true;
}
if (UI::DrawVec3("Rotation", rotation, 0.0f, 80.0f, 1.0f)) {
if (undoManager) {
undoManager->BeginInteractiveChange("Modify Transform");
}
transform->SetLocalEulerAngles(rotation);
changed = true;
}
if (UI::DrawVec3("Scale", scale, 1.0f, 80.0f, 0.1f)) {
if (undoManager) {
undoManager->BeginInteractiveChange("Modify Transform");
}
transform->SetLocalScale(scale);
changed = true;
}
return changed;
}
bool CanAddTo(::XCEngine::Components::GameObject* gameObject) const override {
(void)gameObject;
return false;
}
const char* GetAddDisabledReason(::XCEngine::Components::GameObject* gameObject) const override {
(void)gameObject;
return "Built-in";
}
bool CanRemove(::XCEngine::Components::Component* component) const override {
(void)component;
return false;
}
};
} // namespace Editor
} // namespace XCEngine