feat: add imguizmo + trigger buxfix
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
#include <components/LightToggle.h>
|
||||
|
||||
#include <destrum/Components/LightComponent.h>
|
||||
#include <destrum/Components/MeshRendererComponent.h>
|
||||
#include <destrum/Graphics/Renderer.h>
|
||||
#include <destrum/ObjectModel/GameObject.h>
|
||||
#include <destrum/Util/GameState.h>
|
||||
|
||||
#include <imgui.h>
|
||||
|
||||
LightToggle::LightToggle(GameObject& parent)
|
||||
: Activatable(parent, "LightToggle")
|
||||
{
|
||||
}
|
||||
|
||||
void LightToggle::Start()
|
||||
{
|
||||
Apply();
|
||||
}
|
||||
|
||||
void LightToggle::SetOn(bool on)
|
||||
{
|
||||
m_On = on;
|
||||
Apply();
|
||||
}
|
||||
|
||||
void LightToggle::OnActivate(GameObject&)
|
||||
{
|
||||
SetOn(!m_On);
|
||||
}
|
||||
|
||||
void LightToggle::Apply()
|
||||
{
|
||||
GameObject* object = GetGameObject();
|
||||
auto* light = object->GetComponent<LightComponent>();
|
||||
if (light != nullptr) {
|
||||
light->SetEnabled(m_On);
|
||||
}
|
||||
|
||||
// The bulb glows in the light's colour while it is on
|
||||
const auto* meshRenderer = object->GetComponent<MeshRendererComponent>();
|
||||
if (meshRenderer == nullptr || meshRenderer->GetMaterialID() == NULL_MATERIAL_ID ||
|
||||
!GameState::GetInstance().HasRenderer()) {
|
||||
return;
|
||||
}
|
||||
|
||||
GameRenderer& renderer = GameState::GetInstance().Renderer();
|
||||
Material& material = renderer.getMaterialMutable(meshRenderer->GetMaterialID());
|
||||
material.emissiveColor = m_On && light != nullptr ? light->GetColor() : glm::vec3{0.0f};
|
||||
renderer.updateMaterialGPU(meshRenderer->GetMaterialID());
|
||||
}
|
||||
|
||||
nlohmann::json LightToggle::Serialize() const
|
||||
{
|
||||
return {{"on", m_On}};
|
||||
}
|
||||
|
||||
void LightToggle::Deserialize(const nlohmann::json& data)
|
||||
{
|
||||
m_On = data.value("on", m_On);
|
||||
}
|
||||
|
||||
void LightToggle::ImGuiInspector()
|
||||
{
|
||||
if (bool on = m_On; ImGui::Checkbox("On", &on)) {
|
||||
SetOn(on);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user