Files
khaotic-engine-Reborn/enginecustom/src/inc/system/ecs/components/shader_component.h
CatChow0 00339aa6c2 Patch - Improves code and UI for better engine stability - V14.5.30
Addresses minor issues across the engine to improve stability and UI.

- Updates ImGui window size for better rendering
- Adds macro for boolean returns (R_TRUE and R_FALSE)
- Adds missing includes and removes unused code
- Updates shader code to use the new macros and improve readability
2025-10-10 00:32:19 +02:00

139 lines
4.2 KiB
C++

#pragma once
#include "../component.h"
namespace ecs {
/**
* Enum for different shader types used in rendering.
* This enum is used to specify the type of shader to be applied to a model.
*/
enum class ShaderType
{
CEL_SHADING,
LIGHTING,
NORMAL_MAPPING,
SPECULAR_MAPPING,
REFLECTION,
REFRACTION,
TEXTURE,
SKYBOX,
SUNLIGHT,
ALPHA_MAPPING
};
class ShaderComponent : public Component {
public:
/**
* Builder for the ShaderComponent class.
* Initializes the active shader to LIGHTING by default.
*/
ShaderComponent() : m_activeShader(ShaderType::LIGHTING) {}
~ShaderComponent() = default;
void Initialize() override {}
void Update(float deltaTime) override {}
/**
* Get the currently active shader type.
* @return The active shader type as a ShaderType enum.
*/
ShaderType GetActiveShader() const { return m_activeShader; }
/**
* Set the active shader type.
* This method allows changing the shader type used for rendering.
* @param shader The shader type to set as a ShaderType enum.
*/
void SetActiveShader(ShaderType shader) { m_activeShader = shader; }
/**
* Set the active shader type from a string.
* This method converts a string representation of a shader type to the corresponding ShaderType enum.
* @param shaderName The name of the shader type as a string.
* @return The ShaderType enum corresponding to the provided string.
*/
static ShaderType StringToShaderType(const std::string& str) {
if (str == "ALPHA_MAPPING") return SHD_ALPHA;
if (str == "CEL_SHADING") return SHD_CEL;
if (str == "NORMAL_MAPPING") return SHD_NORM;
if (str == "SPECULAR_MAPPING") return SHD_SPEC;
if (str == "TEXTURE") return SHD_TEX;
if (str == "LIGHTING") return SHD_LIGHT;
if (str == "SUNLIGHT") return SHD_SUN;
if (str == "SKYBOX") return SHD_SKYBOX;
if (str == "REFLECTION") return SHD_REFL;
if (str == "REFRACTION") return SHD_REFR;
return SHD_TEX;
}
/**
* Convert a ShaderType enum to its string representation.
* This method provides a string name for each shader type.
* @param type The shader type as a ShaderType enum.
* @return The name of the shader type as a string.
*/
static std::string ShaderTypeToString(ShaderType type) {
switch (type) {
case SHD_ALPHA: return "ALPHA_MAPPING";
case SHD_CEL: return "CEL_SHADING";
case SHD_NORM: return "NORMAL_MAPPING";
case SHD_SPEC: return "SPECULAR_MAPPING";
case SHD_TEX: return "TEXTURE";
case SHD_LIGHT: return "LIGHTING";
case SHD_SUN: return "SUNLIGHT";
case SHD_SKYBOX: return "SKYBOX";
case SHD_REFL: return "REFLECTION";
case SHD_REFR: return "REFRACTION";
default: return "TEXTURE";
}
}
std::string Serialize() const override
{
std::stringstream ss;
ss << "ShaderComponent:"
<< ShaderTypeToString(GetActiveShader());
return ss.str();
}
bool Deserialize(const std::string& data) override {
std::stringstream ss(data);
std::string type;
std::getline(ss, type, ':');
if (type != "ShaderComponent") R_FALSE
std::string shaderTypeStr;
std::getline(ss, shaderTypeStr);
SetActiveShader(StringToShaderType(shaderTypeStr));
R_TRUE
}
void OnImGuiRender() override {
ShaderType currentShader = GetActiveShader();
int shaderIndex = static_cast<int>(currentShader);
const char* shaderNames[] = {
"CEL_SHADING",
"LIGHTING",
"NORMAL_MAPPING",
"SPECULAR_MAPPING",
"REFLECTION",
"REFRACTION",
"TEXTURE",
"SKYBOX",
"SUNLIGHT",
"ALPHA_MAPPING"
};
if (ImGui::Combo("Active Shader", &shaderIndex, shaderNames, IM_ARRAYSIZE(shaderNames))) {
SetActiveShader(static_cast<ShaderType>(shaderIndex));
}
}
private:
ShaderType m_activeShader;
};
} // namespace ecs