126 lines
4.4 KiB
C++
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);
|
|
}
|
|
};
|
|
}
|
|
|