using System;
using System.Runtime.CompilerServices;
namespace BansheeEngine
{
///
/// Light type that determines how is light information parsed by the renderer and other systems.
///
public enum LightType // Note: Must match C++ enum LightType
{
Directional, Point, Spot
}
///
/// Wrapper around the native Light class.
///
///
internal class NativeLight : ScriptObject
{
internal LightType Type
{
get { return Internal_GetType(mCachedPtr); }
set { Internal_SetType(mCachedPtr, value); }
}
internal Color Color
{
get
{
Color color;
Internal_GetColor(mCachedPtr, out color);
return color;
}
set { Internal_SetColor(mCachedPtr, value); }
}
internal float Range
{
get { return Internal_GetRange(mCachedPtr); }
set { Internal_SetRange(mCachedPtr, value); }
}
internal float Intensity
{
get { return Internal_GetIntensity(mCachedPtr); }
set { Internal_SetIntensity(mCachedPtr, value); }
}
internal Degree SpotAngle
{
get { return Internal_GetSpotAngle(mCachedPtr); }
set { Internal_SetSpotAngle(mCachedPtr, value.Degrees); }
}
internal Degree SpotFalloffAngle
{
get { return Internal_GetSpotFalloffAngle(mCachedPtr); }
set { Internal_SetSpotFalloffAngle(mCachedPtr, value.Degrees); }
}
internal bool CastsShadow
{
get { return Internal_GetCastsShadow(mCachedPtr); }
set { Internal_SetCastsShadow(mCachedPtr, value); }
}
internal bool PhysicallyBasedAttenuation
{
get { return Internal_GetPhysicallyBasedAttenuation(mCachedPtr); }
set { Internal_SetPhysicallyBasedAttenuation(mCachedPtr, value); }
}
internal Sphere Bounds
{
get
{
Sphere bounds;
Internal_GetBounds(mCachedPtr, out bounds);
return bounds;
}
}
internal NativeLight(SceneObject sceneObject)
{
IntPtr sceneObjPtr = IntPtr.Zero;
if (sceneObject != null)
sceneObjPtr = sceneObject.GetCachedPtr();
Internal_Create(this, sceneObjPtr);
}
internal void UpdateTransform(SceneObject parentSO)
{
if (parentSO != null)
Internal_UpdateTransform(mCachedPtr, parentSO.GetCachedPtr());
}
internal void OnDestroy()
{
Internal_OnDestroy(mCachedPtr);
}
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_Create(NativeLight instance, IntPtr parentSO);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern LightType Internal_GetType(IntPtr instance);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_SetType(IntPtr instance, LightType value);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern float Internal_GetRange(IntPtr instance);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_SetRange(IntPtr instance, float value);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern float Internal_GetIntensity(IntPtr instance);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_SetIntensity(IntPtr instance, float value);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_GetColor(IntPtr instance, out Color color);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_SetColor(IntPtr instance, Color value);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern bool Internal_GetCastsShadow(IntPtr instance);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_SetCastsShadow(IntPtr instance, bool value);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern bool Internal_GetPhysicallyBasedAttenuation(IntPtr instance);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_SetPhysicallyBasedAttenuation(IntPtr instance, bool value);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern float Internal_GetSpotAngle(IntPtr instance);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_SetSpotAngle(IntPtr instance, float value);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern float Internal_GetSpotFalloffAngle(IntPtr instance);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_SetSpotFalloffAngle(IntPtr instance, float value);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_GetBounds(IntPtr instance, out Sphere bounds);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_UpdateTransform(IntPtr instance, IntPtr parentSO);
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void Internal_OnDestroy(IntPtr thisPtr);
}
}