#ifndef EU07_RENDERCOMPONENTS_H #define EU07_RENDERCOMPONENTS_H #include "registry/FName.h" #include "rendering/geometrybank.h" class TAnimModel; namespace ECSComponent { /// /// Component for entities that can be rendered. /// struct MeshRenderer { gfx::geometry_handle meshHandle; TAnimModel* modelInstance = nullptr; bool visible = true; }; /// /// Component for entities that can cast shadows. /// struct SpotLight { glm::vec3 Color{ 1.0f, 1.0f, 1.0f }; float Intensity = 1.0f; float Range = 25.0f; float InnerAngle = 15.0f; float OuterAngle = 25.0f; bool CastShadows = false; bool Enabled = true; }; /// /// /// struct AreaLight { glm::vec3 Color{ 1.0f, 1.0f, 1.0f }; float Intensity = 1.0f; float Width = 1.0f; float Height = 1.0f; bool CastShadows = false; bool Enabled = true; }; struct SunLight { glm::vec3 Color{ 1.0f, 1.0f, 1.0f }; float Intensity = 1.0f; bool CastShadows = false; bool Enabled = true; }; struct Particle { glm::vec3 position; glm::vec3 velocity; glm::vec4 color; float size; float age; float maxAge; }; struct ParticleEmitter { // --- Kontener i Stan --- std::vector particles; uint32_t maxParticles = 1000; bool isActive = true; float spawnAccumulator = 0.0f; // --- Konfiguracja Emisji --- float spawnRate = 20.0f; // cząstek na sekundę float particleLifetime = 2.0f; // bazowy czas życia glm::vec3 gravity{ 0.0f, 0.0f, 0.0f }; // np. dym: 0.5, deszcz: -9.81 float airResistance = 0.1f; // tłumienie prędkości // --- Zakresy (losowanie) --- glm::vec3 minStartVelocity{ -0.5f, 1.0f, -0.5f }; glm::vec3 maxStartVelocity{ 0.5f, 2.0f, 0.5f }; // --- Ewolucja w czasie (Modyfikatory) --- float sizeGrowth = 0.5f; // zmiana rozmiaru na sekundę glm::vec4 colorFade = { 0.0f, 0.0f, 0.0f, -0.5f }; // np. znikanie (alpha) // --- Pozycja emitera --- glm::vec3 emitterLocation{ 0.0f, 0.0f, 0.0f }; // --- Flag Funkcjonalnych --- bool hasCollision = false; // czy sprawdzać kolizje float bounceFactor = 0.3f; // energia po odbiciu (0.0 - 1.0) }; /// /// Component for entities that can be rendered as decals (e.g. graffiti on wagons, dirties on wall). /// struct Decal { FName decalTexturePath = (""); float size = 1.0f; bool active = true; }; /// /// Component for entities that can be rendered as billboards (e.g. particles, sprites). /// struct Billboard { FName texturePath = (""); float size = 1.0f; bool active = true; }; /// /// Component for entities that can be rendered as lines. /// struct Line { glm::vec3 start{ 0.0f }; glm::vec3 end{ 1.0f, 0.0f, 0.0f }; glm::vec3 color{ 1.0f, 1.0f, 1.0f }; float thickness = 1.0f; bool active = true; }; /// /// Component for entities that can be rendered with LOD /// struct LODController { double RangeMin; double RangeMax; }; } // namespace ECSComponent #endif // EU07_RENDERCOMPONENTS_H