using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
namespace BansheeEngine
{
/** @addtogroup Rendering
* @{
*/
/// Illuminates a portion of the scene covered by the light.
public partial class Light : Component
{
private Light(bool __dummy0) { }
protected Light() { }
/// Determines the type of the light.
[ShowInInspector]
public LightType Type
{
get { return Internal_getType(mCachedPtr); }
set { Internal_setType(mCachedPtr, value); }
}
/// Determines does this light cast shadows when rendered.
[ShowInInspector]
public bool CastsShadow
{
get { return Internal_getCastsShadow(mCachedPtr); }
set { Internal_setCastsShadow(mCachedPtr, value); }
}
///
/// Shadow bias determines offset at which the shadows are rendered from the shadow caster. Bias value of 0 means the
/// shadow will be renderered exactly at the casters position. If your geometry has thin areas this will produce an
/// artifact called shadow acne, in which case you can increase the shadow bias value to eliminate it. Note that
/// increasing the shadow bias will on the other hand make the shadow be offset from the caster and may make the caster
/// appear as if floating (Peter Panning artifact). Neither is perfect, so it is preferable to ensure all your geometry
/// has thickness and keep the bias at zero, or even at negative values.
///
/// Default value is 0.5. Should be in rough range [-1, 1].
///
[ShowInInspector]
public float ShadowBias
{
get { return Internal_getShadowBias(mCachedPtr); }
set { Internal_setShadowBias(mCachedPtr, value); }
}
/// Determines the color emitted by the light.
[ShowInInspector]
public Color Color
{
get
{
Color temp;
Internal_getColor(mCachedPtr, out temp);
return temp;
}
set { Internal_setColor(mCachedPtr, ref value); }
}
///
/// Range at which the light contribution fades out to zero. Use setUseAutoAttenuation to provide a radius automatically
/// dependant on light intensity. The radius will cut-off light contribution and therefore manually set very small radius
/// can end up being very physically incorrect.
///
[ShowInInspector]
public float AttenuationRadius
{
get { return Internal_getAttenuationRadius(mCachedPtr); }
set { Internal_setAttenuationRadius(mCachedPtr, value); }
}
///
/// Radius of the light source. If non-zero then this light represents an area light, otherwise it is a punctual light.
/// Area lights have different attenuation then punctual lights, and their appearance in specular reflections is
/// realistic. Shape of the area light depends on light type: - For directional light the shape is a disc projected on
/// the hemisphere on the sky. This parameter represents angular radius (in degrees) of the disk and should be very small
/// (think of how much space the Sun takes on the sky - roughly 0.25 degree radius). - For radial light the shape is a
/// sphere and the source radius is the radius of the sphere. - For spot lights the shape is a disc oriented in the
/// direction of the spot light and the source radius is the radius of the disc.
///
[ShowInInspector]
public float SourceRadius
{
get { return Internal_getSourceRadius(mCachedPtr); }
set { Internal_setSourceRadius(mCachedPtr, value); }
}
///
/// Determines the power of the light source. This will be luminous flux for radial & spot lights, luminance for
/// directional lights with no area, and illuminance for directional lights with area (non-zero source radius).
///
[ShowInInspector]
public float Intensity
{
get { return Internal_getIntensity(mCachedPtr); }
set { Internal_setIntensity(mCachedPtr, value); }
}
/// Determines the total angle covered by a spot light.
[ShowInInspector]
public Degree SpotAngle
{
get
{
Degree temp;
Internal_getSpotAngle(mCachedPtr, out temp);
return temp;
}
set { Internal_setSpotAngle(mCachedPtr, ref value); }
}
///
/// Determines the falloff angle covered by a spot light. Falloff angle determines at what point does light intensity
/// starts quadratically falling off as the angle approaches the total spot angle.
///
[ShowInInspector]
public Degree SpotAngleFalloff
{
get
{
Degree temp;
Internal_getSpotFalloffAngle(mCachedPtr, out temp);
return temp;
}
set { Internal_setSpotFalloffAngle(mCachedPtr, ref value); }
}
///
/// If enabled the attenuation radius will automatically be controlled in order to provide reasonable light radius,
/// depending on its intensity.
///
[ShowInInspector]
public bool UseAutoAttenuation
{
get { return Internal_getUseAutoAttenuation(mCachedPtr); }
set { Internal_setUseAutoAttenuation(mCachedPtr, value); }
}
/// Returns world space bounds that completely encompass the light's area of influence.
[ShowInInspector]
public Sphere Bounds
{
get
{
Sphere temp;
Internal_getBounds(mCachedPtr, out temp);
return temp;
}
}
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setType(IntPtr thisPtr, LightType type);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern LightType Internal_getType(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setCastsShadow(IntPtr thisPtr, bool castsShadow);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern bool Internal_getCastsShadow(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setShadowBias(IntPtr thisPtr, float bias);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern float Internal_getShadowBias(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setColor(IntPtr thisPtr, ref Color color);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_getColor(IntPtr thisPtr, out Color __output);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setAttenuationRadius(IntPtr thisPtr, float radius);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern float Internal_getAttenuationRadius(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setSourceRadius(IntPtr thisPtr, float radius);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern float Internal_getSourceRadius(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setIntensity(IntPtr thisPtr, float intensity);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern float Internal_getIntensity(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setSpotAngle(IntPtr thisPtr, ref Degree spotAngle);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_getSpotAngle(IntPtr thisPtr, out Degree __output);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setSpotFalloffAngle(IntPtr thisPtr, ref Degree spotAngle);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_getSpotFalloffAngle(IntPtr thisPtr, out Degree __output);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_setUseAutoAttenuation(IntPtr thisPtr, bool enabled);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern bool Internal_getUseAutoAttenuation(IntPtr thisPtr);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_getBounds(IntPtr thisPtr, out Sphere __output);
}
/** @} */
}