SHADE_Y3/SHADE_Managed/src/Components/Light.hxx

126 lines
4.4 KiB
C++

/************************************************************************************//*!
\file Light.hxx
\author Tng Kah Wei, kahwei.tng, 390009620
\par email: kahwei.tng\@digipen.edu
\date Nov 8, 2022
\brief Contains the definition of the managed Light class with the declaration
of functions for working with it.
Note: This file is written in C++17/CLI.
Copyright (C) 2022 DigiPen Institute of Technology.
Reproduction or disclosure of this file or its contents without the prior written consent
of DigiPen Institute of Technology is prohibited.
*//*************************************************************************************/
#pragma once
// Project Includes
#include "Components/Component.hxx"
#include "Math/Vector3.hxx"
// External Dependencies
#include "Graphics/MiddleEnd/Lights/SHLightComponent.h"
namespace SHADE
{
/// <summary>
/// CLR version of the SHADE Engine's SHLightComponent.
/// </summary>
public ref class Light : public Component<SHLightComponent>
{
internal:
/*-----------------------------------------------------------------------------*/
/* Constructors */
/*-----------------------------------------------------------------------------*/
/// <summary>
/// Constructs a Light Component that represents a native Light component tied to
/// the specified Entity.
/// </summary>
/// <param name="entity">Entity that this Component will be tied to.</param>
Light(Entity entity);
public:
/*-----------------------------------------------------------------------------*/
/* Constants */
/*-----------------------------------------------------------------------------*/
/// <summary>
/// Supported types of the Light Component.
/// </summary>
enum class Type
{
/// <summary>
/// Light applied uniformly across the scene at a specified direction.
/// </summary>
Directional,
/// <summary>
/// Light that originates from a certain point in all directions.
/// Not implemented yet.
/// </summary>
Point,
/// <summary>
/// Light that originates from a certain point within a angle.
/// Not implemented yet.
/// </summary>
Spot,
/// <summary>
/// Light applied to all objects. Has no source point.
/// </summary>
Ambient
};
/*-----------------------------------------------------------------------------*/
/* Properties */
/*-----------------------------------------------------------------------------*/
/// <summary>
/// Position of the light. Only works for Point Light (unimplemented).
/// </summary>
[System::ObsoleteAttribute("Not implemented yet.", true)]
property Vector3 Position
{
Vector3 get();
void set(Vector3 val);
}
/// <summary>
/// Type of lighting that this Light component will apply onto the scene.
/// </summary>
property Type LightType
{
Type get();
void set(Type val);
}
/// <summary>
/// Direction of the light. Only applicable for Directional Lights.
/// </summary>
property Vector3 Direction
{
Vector3 get();
void set(Vector3 val);
}
/// <summary>
/// Colour of the Light.
/// </summary>
property SHADE::Color Color
{
SHADE::Color get();
void set(SHADE::Color val);
}
/// <summary>
/// Culling mask that is used to control what types of Materials would be
/// affected by this Light.
/// </summary>
property System::UInt32 CullingMask
{
System::UInt32 get();
void set(System::UInt32 val);
}
/// <summary>
/// Intensity of the Light
/// </summary>
property float Strength
{
float get();
void set(float val);
}
};
}