diff --git a/BMapBindings/BMapSharp/BMapSharp/BMap.cs b/BMapBindings/BMapSharp/BMapSharp/BMap.cs
index cf304e5..b80f62e 100644
--- a/BMapBindings/BMapSharp/BMapSharp/BMap.cs
+++ b/BMapBindings/BMapSharp/BMapSharp/BMap.cs
@@ -453,6 +453,28 @@ namespace BMapSharp {
[DllImport(g_DllName, EntryPoint = "BMFile_CreateTexture", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool BMFile_CreateTexture([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [Out, MarshalAs(UnmanagedType.U4)] out uint out_id);
+ /// BMFile_GetTargetLightCount
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CKDWORD. This is OUT parameter.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMFile_GetTargetLightCount", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMFile_GetTargetLightCount([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [Out, MarshalAs(UnmanagedType.U4)] out uint out_count);
+ /// BMFile_GetTargetLight
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CKDWORD.
+ /// Type: LibCmo::CK2::CK_ID. This is OUT parameter.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMFile_GetTargetLight", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMFile_GetTargetLight([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint idx, [Out, MarshalAs(UnmanagedType.U4)] out uint out_id);
+ /// BMFile_CreateTargetLight
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. This is OUT parameter.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMFile_CreateTargetLight", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMFile_CreateTargetLight([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [Out, MarshalAs(UnmanagedType.U4)] out uint out_id);
/// BMMeshTrans_New
/// Type: BMap::BMMeshTransition*. This is OUT parameter.
/// True if no error, otherwise False.
@@ -1151,54 +1173,198 @@ namespace BMapSharp {
[DllImport(g_DllName, EntryPoint = "BMMesh_SetMaterialSlot", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern bool BMMesh_SetMaterialSlot([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [In, MarshalAs(UnmanagedType.U4)] uint index, [In, MarshalAs(UnmanagedType.U4)] uint mtlid);
- /// BM3dObject_GetWorldMatrix
+ /// BM3dEntity_GetWorldMatrix
/// Type: BMap::BMFile*. The pointer to corresponding BMFile.
/// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
/// Type: LibCmo::VxMath::VxMatrix. This is OUT parameter.
/// True if no error, otherwise False.
- [DllImport(g_DllName, EntryPoint = "BM3dObject_GetWorldMatrix", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [DllImport(g_DllName, EntryPoint = "BM3dEntity_GetWorldMatrix", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
[return: MarshalAs(UnmanagedType.U1)]
- internal static extern bool BM3dObject_GetWorldMatrix([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [Out, MarshalAs(UnmanagedType.Struct)] out VxMatrix out_mat);
- /// BM3dObject_SetWorldMatrix
+ internal static extern bool BM3dEntity_GetWorldMatrix([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [Out, MarshalAs(UnmanagedType.Struct)] out VxMatrix out_mat);
+ /// BM3dEntity_SetWorldMatrix
/// Type: BMap::BMFile*. The pointer to corresponding BMFile.
/// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
/// Type: LibCmo::VxMath::VxMatrix.
/// True if no error, otherwise False.
- [DllImport(g_DllName, EntryPoint = "BM3dObject_SetWorldMatrix", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [DllImport(g_DllName, EntryPoint = "BM3dEntity_SetWorldMatrix", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
[return: MarshalAs(UnmanagedType.U1)]
- internal static extern bool BM3dObject_SetWorldMatrix([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [In, MarshalAs(UnmanagedType.Struct)] VxMatrix mat);
- /// BM3dObject_GetCurrentMesh
+ internal static extern bool BM3dEntity_SetWorldMatrix([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [In, MarshalAs(UnmanagedType.Struct)] VxMatrix mat);
+ /// BM3dEntity_GetCurrentMesh
/// Type: BMap::BMFile*. The pointer to corresponding BMFile.
/// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
/// Type: LibCmo::CK2::CK_ID. This is OUT parameter.
/// True if no error, otherwise False.
- [DllImport(g_DllName, EntryPoint = "BM3dObject_GetCurrentMesh", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [DllImport(g_DllName, EntryPoint = "BM3dEntity_GetCurrentMesh", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
[return: MarshalAs(UnmanagedType.U1)]
- internal static extern bool BM3dObject_GetCurrentMesh([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [Out, MarshalAs(UnmanagedType.U4)] out uint out_meshid);
- /// BM3dObject_SetCurrentMesh
+ internal static extern bool BM3dEntity_GetCurrentMesh([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [Out, MarshalAs(UnmanagedType.U4)] out uint out_meshid);
+ /// BM3dEntity_SetCurrentMesh
/// Type: BMap::BMFile*. The pointer to corresponding BMFile.
/// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
/// Type: LibCmo::CK2::CK_ID.
/// True if no error, otherwise False.
- [DllImport(g_DllName, EntryPoint = "BM3dObject_SetCurrentMesh", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [DllImport(g_DllName, EntryPoint = "BM3dEntity_SetCurrentMesh", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
[return: MarshalAs(UnmanagedType.U1)]
- internal static extern bool BM3dObject_SetCurrentMesh([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [In, MarshalAs(UnmanagedType.U4)] uint meshid);
- /// BM3dObject_GetVisibility
+ internal static extern bool BM3dEntity_SetCurrentMesh([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [In, MarshalAs(UnmanagedType.U4)] uint meshid);
+ /// BM3dEntity_GetVisibility
/// Type: BMap::BMFile*. The pointer to corresponding BMFile.
/// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
/// Type: bool. This is OUT parameter.
/// True if no error, otherwise False.
- [DllImport(g_DllName, EntryPoint = "BM3dObject_GetVisibility", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [DllImport(g_DllName, EntryPoint = "BM3dEntity_GetVisibility", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
[return: MarshalAs(UnmanagedType.U1)]
- internal static extern bool BM3dObject_GetVisibility([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [Out, MarshalAs(UnmanagedType.U1)] out bool out_isVisible);
- /// BM3dObject_SetVisibility
+ internal static extern bool BM3dEntity_GetVisibility([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [Out, MarshalAs(UnmanagedType.U1)] out bool out_isVisible);
+ /// BM3dEntity_SetVisibility
/// Type: BMap::BMFile*. The pointer to corresponding BMFile.
/// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
/// Type: bool.
/// True if no error, otherwise False.
- [DllImport(g_DllName, EntryPoint = "BM3dObject_SetVisibility", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [DllImport(g_DllName, EntryPoint = "BM3dEntity_SetVisibility", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
[return: MarshalAs(UnmanagedType.U1)]
- internal static extern bool BM3dObject_SetVisibility([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [In, MarshalAs(UnmanagedType.U1)] bool is_visible);
+ internal static extern bool BM3dEntity_SetVisibility([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [In, MarshalAs(UnmanagedType.U1)] bool is_visible);
+ /// BMLight_GetType
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::VxMath::VXLIGHT_TYPE. This is OUT parameter.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_GetType", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_GetType([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [Out, MarshalAs(UnmanagedType.U4)] out VXLIGHT_TYPE out_val);
+ /// BMLight_SetType
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::VxMath::VXLIGHT_TYPE.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_SetType", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_SetType([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [In, MarshalAs(UnmanagedType.U4)] VXLIGHT_TYPE val);
+ /// BMLight_GetColor
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::VxMath::VxColor. This is OUT parameter.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_GetColor", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_GetColor([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [Out, MarshalAs(UnmanagedType.Struct)] out VxColor out_val);
+ /// BMLight_SetColor
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::VxMath::VxColor.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_SetColor", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_SetColor([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [In, MarshalAs(UnmanagedType.Struct)] VxColor col);
+ /// BMLight_GetConstantAttenuation
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::CKFLOAT. This is OUT parameter.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_GetConstantAttenuation", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_GetConstantAttenuation([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [Out, MarshalAs(UnmanagedType.R4)] out float out_val);
+ /// BMLight_SetConstantAttenuation
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::CKFLOAT.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_SetConstantAttenuation", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_SetConstantAttenuation([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [In, MarshalAs(UnmanagedType.R4)] float val);
+ /// BMLight_GetLinearAttenuation
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::CKFLOAT. This is OUT parameter.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_GetLinearAttenuation", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_GetLinearAttenuation([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [Out, MarshalAs(UnmanagedType.R4)] out float out_val);
+ /// BMLight_SetLinearAttenuation
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::CKFLOAT.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_SetLinearAttenuation", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_SetLinearAttenuation([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [In, MarshalAs(UnmanagedType.R4)] float val);
+ /// BMLight_GetQuadraticAttenuation
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::CKFLOAT. This is OUT parameter.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_GetQuadraticAttenuation", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_GetQuadraticAttenuation([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [Out, MarshalAs(UnmanagedType.R4)] out float out_val);
+ /// BMLight_SetQuadraticAttenuation
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::CKFLOAT.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_SetQuadraticAttenuation", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_SetQuadraticAttenuation([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [In, MarshalAs(UnmanagedType.R4)] float val);
+ /// BMLight_GetRange
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::CKFLOAT. This is OUT parameter.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_GetRange", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_GetRange([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [Out, MarshalAs(UnmanagedType.R4)] out float out_val);
+ /// BMLight_SetRange
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::CKFLOAT.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_SetRange", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_SetRange([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [In, MarshalAs(UnmanagedType.R4)] float val);
+ /// BMLight_GetHotSpot
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::CKFLOAT. This is OUT parameter.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_GetHotSpot", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_GetHotSpot([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [Out, MarshalAs(UnmanagedType.R4)] out float out_val);
+ /// BMLight_SetHotSpot
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::CKFLOAT.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_SetHotSpot", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_SetHotSpot([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [In, MarshalAs(UnmanagedType.R4)] float val);
+ /// BMLight_GetFalloff
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::CKFLOAT. This is OUT parameter.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_GetFalloff", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_GetFalloff([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [Out, MarshalAs(UnmanagedType.R4)] out float out_val);
+ /// BMLight_SetFalloff
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::CKFLOAT.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_SetFalloff", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_SetFalloff([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [In, MarshalAs(UnmanagedType.R4)] float val);
+ /// BMLight_GetFalloffShape
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::CKFLOAT. This is OUT parameter.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_GetFalloffShape", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_GetFalloffShape([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [Out, MarshalAs(UnmanagedType.R4)] out float out_val);
+ /// BMLight_SetFalloffShape
+ /// Type: BMap::BMFile*. The pointer to corresponding BMFile.
+ /// Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+ /// Type: LibCmo::CKFLOAT.
+ /// True if no error, otherwise False.
+ [DllImport(g_DllName, EntryPoint = "BMLight_SetFalloffShape", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, ExactSpelling = true)]
+ [return: MarshalAs(UnmanagedType.U1)]
+ internal static extern bool BMLight_SetFalloffShape([In, MarshalAs(UnmanagedType.SysInt)] IntPtr bmfile, [In, MarshalAs(UnmanagedType.U4)] uint objid, [In, MarshalAs(UnmanagedType.R4)] float val);
// ##### GENERATED FUNCTIONS END #####
diff --git a/BMapBindings/BMapSharp/BMapSharp/BMapWrapper.cs b/BMapBindings/BMapSharp/BMapSharp/BMapWrapper.cs
index a690b78..1536bbb 100644
--- a/BMapBindings/BMapSharp/BMapSharp/BMapWrapper.cs
+++ b/BMapBindings/BMapSharp/BMapSharp/BMapWrapper.cs
@@ -352,7 +352,7 @@ namespace BMapSharp.BMapWrapper {
BMapException.ThrowIfFailed(BMap.BMMesh_GetFaceMaterialSlotIndexs(getPointer(), getCKID(), out IntPtr out_mem));
Utils.ShortAssigner(out_mem, GetFaceCount(), iem);
}
-
+
public uint GetMaterialSlotCount() => getGenericValue(BMap.BMMesh_GetMaterialSlotCount);
public void SetMaterialSlotCount(uint count) => setGenericValue(BMap.BMMesh_SetMaterialSlotCount, count);
public IEnumerable GetMaterialSlots() {
@@ -375,24 +375,61 @@ namespace BMapSharp.BMapWrapper {
}
- public class BM3dObject : BMObject {
- internal BM3dObject(IntPtr raw_pointer, uint ckid) : base(raw_pointer, ckid) { }
+ public class BM3dEntity : BMObject {
+ internal BM3dEntity(IntPtr raw_pointer, uint ckid) : base(raw_pointer, ckid) { }
- public VxMatrix GetWorldMatrix() => getGenericValue(BMap.BM3dObject_GetWorldMatrix);
- public void SetWorldMatrix(VxMatrix mat) => setGenericValue(BMap.BM3dObject_SetWorldMatrix, mat);
+ public VxMatrix GetWorldMatrix() => getGenericValue(BMap.BM3dEntity_GetWorldMatrix);
+ public void SetWorldMatrix(VxMatrix mat) => setGenericValue(BMap.BM3dEntity_SetWorldMatrix, mat);
public BMMesh GetCurrentMesh() {
- BMapException.ThrowIfFailed(BMap.BM3dObject_GetCurrentMesh(getPointer(), getCKID(), out uint out_meshid));
+ BMapException.ThrowIfFailed(BMap.BM3dEntity_GetCurrentMesh(getPointer(), getCKID(), out uint out_meshid));
if (out_meshid == Utils.INVALID_CKID) return null;
else return new BMMesh(getPointer(), out_meshid);
}
public void SetCurrentMesh(BMMesh mesh) {
uint meshid = (mesh is null) ? Utils.INVALID_CKID : mesh.getCKID();
- BMapException.ThrowIfFailed(BMap.BM3dObject_SetCurrentMesh(getPointer(), getCKID(), meshid));
+ BMapException.ThrowIfFailed(BMap.BM3dEntity_SetCurrentMesh(getPointer(), getCKID(), meshid));
}
- public bool GetVisibility() => getGenericValue(BMap.BM3dObject_GetVisibility);
- public void SetVisibility(bool visb) => setGenericValue(BMap.BM3dObject_SetVisibility, visb);
+ public bool GetVisibility() => getGenericValue(BMap.BM3dEntity_GetVisibility);
+ public void SetVisibility(bool visb) => setGenericValue(BMap.BM3dEntity_SetVisibility, visb);
+ }
+
+ public class BM3dObject : BM3dEntity {
+ internal BM3dObject(IntPtr raw_pointer, uint ckid) : base(raw_pointer, ckid) { }
+ }
+
+ public class BMLight : BM3dEntity {
+ internal BMLight(IntPtr raw_pointer, uint ckid) : base(raw_pointer, ckid) { }
+
+ // Name `GetType` is conflict with C# base class function name.
+ // So we add a `Light` prefix for it.
+ public VXLIGHT_TYPE GetLightType() => getGenericValue(BMap.BMLight_GetType);
+ public void SetLightType(VXLIGHT_TYPE val) => setGenericValue(BMap.BMLight_SetType, val);
+
+ public VxColor GetColor() => getGenericValue(BMap.BMLight_GetColor);
+ public void SetColor(VxColor col) => setGenericValue(BMap.BMLight_SetColor, col);
+
+ public float GetConstantAttenuation() => getGenericValue(BMap.BMLight_GetConstantAttenuation);
+ public void SetConstantAttenuation(float val) => setGenericValue(BMap.BMLight_SetConstantAttenuation, val);
+ public float GetLinearAttenuation() => getGenericValue(BMap.BMLight_GetLinearAttenuation);
+ public void SetLinearAttenuation(float val) => setGenericValue(BMap.BMLight_SetLinearAttenuation, val);
+ public float GetQuadraticAttenuation() => getGenericValue(BMap.BMLight_GetQuadraticAttenuation);
+ public void SetQuadraticAttenuation(float val) => setGenericValue(BMap.BMLight_SetQuadraticAttenuation, val);
+
+ public float GetRange() => getGenericValue(BMap.BMLight_GetRange);
+ public void SetRange(float val) => setGenericValue(BMap.BMLight_SetRange, val);
+
+ public float GetHotSpot() => getGenericValue(BMap.BMLight_GetHotSpot);
+ public void SetHotSpot(float val) => setGenericValue(BMap.BMLight_SetHotSpot, val);
+ public float GetFalloff() => getGenericValue(BMap.BMLight_GetFalloff);
+ public void SetFalloff(float val) => setGenericValue(BMap.BMLight_SetFalloff, val);
+ public float GetFalloffShape() => getGenericValue(BMap.BMLight_GetFalloffShape);
+ public void SetFalloffShape(float val) => setGenericValue(BMap.BMLight_SetFalloffShape, val);
+ }
+
+ public class BMTargetLight : BMLight {
+ internal BMTargetLight(IntPtr raw_pointer, uint ckid) : base(raw_pointer, ckid) { }
}
public class BMGroup : BMObject {
@@ -463,6 +500,10 @@ namespace BMapSharp.BMapWrapper {
getCKObjectCount(BMap.BMFile_GetGroupCount);
public IEnumerable GetGroups() =>
getCKObjects(BMap.BMFile_GetGroupCount, BMap.BMFile_GetGroup, (bmf, id) => new BMGroup(bmf, id));
+ public uint GetTargetLightCount() =>
+ getCKObjectCount(BMap.BMFile_GetTargetLightCount);
+ public IEnumerable GetTargetLights() =>
+ getCKObjects(BMap.BMFile_GetTargetLightCount, BMap.BMFile_GetTargetLight, (bmf, id) => new BMTargetLight(bmf, id));
}
@@ -504,6 +545,7 @@ namespace BMapSharp.BMapWrapper {
public BMMesh CreateMesh() => createCKObject(BMap.BMFile_CreateMesh, (bmf, id) => new BMMesh(bmf, id));
public BM3dObject Create3dObject() => createCKObject(BMap.BMFile_Create3dObject, (bmf, id) => new BM3dObject(bmf, id));
public BMGroup CreateGroup() => createCKObject(BMap.BMFile_CreateGroup, (bmf, id) => new BMGroup(bmf, id));
+ public BMTargetLight CreateTargetLight() => createCKObject(BMap.BMFile_CreateTargetLight, (bmf, id) => new BMTargetLight(bmf, id));
}
public sealed class BMMeshTrans : AbstractPointer {
diff --git a/BMapBindings/BMapSharp/BMapSharp/VirtoolsTypes.cs b/BMapBindings/BMapSharp/BMapSharp/VirtoolsTypes.cs
index 20ad55b..6d9e21b 100644
--- a/BMapBindings/BMapSharp/BMapSharp/VirtoolsTypes.cs
+++ b/BMapBindings/BMapSharp/BMapSharp/VirtoolsTypes.cs
@@ -226,6 +226,13 @@ namespace BMapSharp.VirtoolsTypes {
_4_ARGB8888_CLUT = 31, /**< 4 bits indexed CLUT (ARGB) */
}
+ public enum VXLIGHT_TYPE : uint {
+ VX_LIGHTPOINT = 1, /**< The Light is a point of light */
+ VX_LIGHTSPOT = 2, /**< The light is a spotlight */
+ VX_LIGHTDIREC = 3, /**< The light is directional light : Lights comes from an infinite point so only direction of light can be given */
+ // VX_LIGHTPARA = 4UL, /**< Obsolete, do not use */
+ }
+
public enum VXTEXTURE_BLENDMODE : uint {
VXTEXTUREBLEND_DECAL = 1, /**< Texture replace any material information */
VXTEXTUREBLEND_MODULATE = 2, /**< Texture and material are combine. Alpha information of the texture replace material alpha component. */
diff --git a/BMapBindings/BMapSharp/BMapSharpTestbench/Program.cs b/BMapBindings/BMapSharp/BMapSharpTestbench/Program.cs
index 8c0ca73..a1daed6 100644
--- a/BMapBindings/BMapSharp/BMapSharpTestbench/Program.cs
+++ b/BMapBindings/BMapSharp/BMapSharpTestbench/Program.cs
@@ -21,7 +21,7 @@ namespace BMapSharpTestbench {
Console.ReadKey(true);
// Start testbench
- string file_name = "Level_02.NMO";
+ string file_name = "LightCameraTest.nmo";
string temp_folder = "Temp";
string texture_folder = "F:\\Ballance\\Ballance\\Textures";
string[] encodings = ["cp1252", "gb2312"];
@@ -66,38 +66,38 @@ namespace BMapSharpTestbench {
// Console.WriteLine($"\tMaterial Slot Count: {mesh.GetMaterialSlotCount()}");
// }
- Console.WriteLine("===== Materials =====");
- foreach (var mtl in reader.GetMaterials()) {
- Console.WriteLine(mtl.GetName());
+ // Console.WriteLine("===== Materials =====");
+ // foreach (var mtl in reader.GetMaterials()) {
+ // Console.WriteLine(mtl.GetName());
- Console.WriteLine($"\tDiffuse: {mtl.GetDiffuse().ToManagedRGBA()}");
- Console.WriteLine($"\tAmbient: {mtl.GetAmbient().ToManagedRGBA()}");
- Console.WriteLine($"\tSpecular: {mtl.GetSpecular().ToManagedRGBA()}");
- Console.WriteLine($"\tEmissive: {mtl.GetEmissive().ToManagedRGBA()}");
+ // Console.WriteLine($"\tDiffuse: {mtl.GetDiffuse().ToManagedRGBA()}");
+ // Console.WriteLine($"\tAmbient: {mtl.GetAmbient().ToManagedRGBA()}");
+ // Console.WriteLine($"\tSpecular: {mtl.GetSpecular().ToManagedRGBA()}");
+ // Console.WriteLine($"\tEmissive: {mtl.GetEmissive().ToManagedRGBA()}");
- Console.WriteLine($"\tSpecular Power: {mtl.GetSpecularPower()}");
+ // Console.WriteLine($"\tSpecular Power: {mtl.GetSpecularPower()}");
- Console.WriteLine($"\tTexture Border Color: {mtl.GetTextureBorderColor().ToManagedRGBA()}");
+ // Console.WriteLine($"\tTexture Border Color: {mtl.GetTextureBorderColor().ToManagedRGBA()}");
- Console.WriteLine($"\tTexture Blend Mode: {mtl.GetTextureBlendMode()}");
- Console.WriteLine($"\tTexture Min Mode: {mtl.GetTextureMinMode()}");
- Console.WriteLine($"\tTexture Mag Mode: {mtl.GetTextureMagMode()}");
- Console.WriteLine($"\tSource Blend: {mtl.GetSourceBlend()}");
- Console.WriteLine($"\tDest Blend: {mtl.GetDestBlend()}");
- Console.WriteLine($"\tFill Mode: {mtl.GetFillMode()}");
- Console.WriteLine($"\tShade Mode: {mtl.GetShadeMode()}");
+ // Console.WriteLine($"\tTexture Blend Mode: {mtl.GetTextureBlendMode()}");
+ // Console.WriteLine($"\tTexture Min Mode: {mtl.GetTextureMinMode()}");
+ // Console.WriteLine($"\tTexture Mag Mode: {mtl.GetTextureMagMode()}");
+ // Console.WriteLine($"\tSource Blend: {mtl.GetSourceBlend()}");
+ // Console.WriteLine($"\tDest Blend: {mtl.GetDestBlend()}");
+ // Console.WriteLine($"\tFill Mode: {mtl.GetFillMode()}");
+ // Console.WriteLine($"\tShade Mode: {mtl.GetShadeMode()}");
- Console.WriteLine($"\tAlpha Test Enabled: {mtl.GetAlphaTestEnabled()}");
- Console.WriteLine($"\tAlpha Blend Enabled: {mtl.GetAlphaBlendEnabled()}");
- Console.WriteLine($"\tPerspective Correction Enabled: {mtl.GetPerspectiveCorrectionEnabled()}");
- Console.WriteLine($"\tZ Write Enabled: {mtl.GetZWriteEnabled()}");
- Console.WriteLine($"\tTwo Sided Enabled: {mtl.GetTwoSidedEnabled()}");
+ // Console.WriteLine($"\tAlpha Test Enabled: {mtl.GetAlphaTestEnabled()}");
+ // Console.WriteLine($"\tAlpha Blend Enabled: {mtl.GetAlphaBlendEnabled()}");
+ // Console.WriteLine($"\tPerspective Correction Enabled: {mtl.GetPerspectiveCorrectionEnabled()}");
+ // Console.WriteLine($"\tZ Write Enabled: {mtl.GetZWriteEnabled()}");
+ // Console.WriteLine($"\tTwo Sided Enabled: {mtl.GetTwoSidedEnabled()}");
- Console.WriteLine($"\tAlpha Ref: {mtl.GetAlphaRef()}");
+ // Console.WriteLine($"\tAlpha Ref: {mtl.GetAlphaRef()}");
- Console.WriteLine($"\tAlpha Func: {mtl.GetAlphaFunc()}");
- Console.WriteLine($"\tZ Func: {mtl.GetZFunc()}");
- }
+ // Console.WriteLine($"\tAlpha Func: {mtl.GetAlphaFunc()}");
+ // Console.WriteLine($"\tZ Func: {mtl.GetZFunc()}");
+ // }
// Console.WriteLine("===== Textures =====");
// foreach (var tex in reader.GetTextures()) {
@@ -108,6 +108,24 @@ namespace BMapSharpTestbench {
// Console.WriteLine($"\tVideo Format: {tex.GetVideoFormat()}");
// }
+ Console.WriteLine("===== Target Lights =====");
+ foreach (var lit in reader.GetTargetLights()) {
+ Console.WriteLine(lit.GetName());
+
+ Console.WriteLine($"\tVisibility: {lit.GetVisibility()}");
+ Console.WriteLine($"\tMatrix: {lit.GetWorldMatrix().ToManaged()}");
+
+ Console.WriteLine($"Type: {lit.GetLightType()}");
+ Console.WriteLine($"Color: {lit.GetColor().ToManagedRGBA()}");
+ Console.WriteLine($"Constant Attenuation: {lit.GetConstantAttenuation()}");
+ Console.WriteLine($"Linear Attenuation: {lit.GetLinearAttenuation()}");
+ Console.WriteLine($"Quadratic Attenuation: {lit.GetQuadraticAttenuation()}");
+ Console.WriteLine($"Range: {lit.GetRange()}");
+ Console.WriteLine($"Hot Spot: {lit.GetHotSpot()}");
+ Console.WriteLine($"Falloff: {lit.GetFalloff()}");
+ Console.WriteLine($"Falloff Shape: {lit.GetFalloffShape()}");
+ }
+
Console.WriteLine("===== END =====");
}
diff --git a/BMapBindings/PyBMap/PyBMap/bmap.py b/BMapBindings/PyBMap/PyBMap/bmap.py
index 8d79def..f0a7fb0 100644
--- a/BMapBindings/PyBMap/PyBMap/bmap.py
+++ b/BMapBindings/PyBMap/PyBMap/bmap.py
@@ -227,6 +227,22 @@ BMFile_GetTexture = _create_bmap_func('BMFile_GetTexture', [bm_void_p, bm_CKDWOR
# @param out_id[out] Type: LibCmo::CK2::CK_ID. Use ctypes.byref(data) pass it.
# @return True if no error, otherwise False.
BMFile_CreateTexture = _create_bmap_func('BMFile_CreateTexture', [bm_void_p, bm_CKID_p])
+## BMFile_GetTargetLightCount
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param out_count[out] Type: LibCmo::CKDWORD. Use ctypes.byref(data) pass it.
+# @return True if no error, otherwise False.
+BMFile_GetTargetLightCount = _create_bmap_func('BMFile_GetTargetLightCount', [bm_void_p, bm_CKDWORD_p])
+## BMFile_GetTargetLight
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param idx[in] Type: LibCmo::CKDWORD.
+# @param out_id[out] Type: LibCmo::CK2::CK_ID. Use ctypes.byref(data) pass it.
+# @return True if no error, otherwise False.
+BMFile_GetTargetLight = _create_bmap_func('BMFile_GetTargetLight', [bm_void_p, bm_CKDWORD, bm_CKID_p])
+## BMFile_CreateTargetLight
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param out_id[out] Type: LibCmo::CK2::CK_ID. Use ctypes.byref(data) pass it.
+# @return True if no error, otherwise False.
+BMFile_CreateTargetLight = _create_bmap_func('BMFile_CreateTargetLight', [bm_void_p, bm_CKID_p])
## BMMeshTrans_New
# @param out_trans[out] Type: BMap::BMMeshTransition*. Use ctypes.byref(data) pass it.
# @return True if no error, otherwise False.
@@ -747,42 +763,150 @@ BMMesh_GetMaterialSlot = _create_bmap_func('BMMesh_GetMaterialSlot', [bm_void_p,
# @param mtlid[in] Type: LibCmo::CK2::CK_ID.
# @return True if no error, otherwise False.
BMMesh_SetMaterialSlot = _create_bmap_func('BMMesh_SetMaterialSlot', [bm_void_p, bm_CKID, bm_CKDWORD, bm_CKID])
-## BM3dObject_GetWorldMatrix
+## BM3dEntity_GetWorldMatrix
# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
# @param out_mat[out] Type: LibCmo::VxMath::VxMatrix. Use ctypes.byref(data) pass it.
# @return True if no error, otherwise False.
-BM3dObject_GetWorldMatrix = _create_bmap_func('BM3dObject_GetWorldMatrix', [bm_void_p, bm_CKID, bm_VxMatrix_p])
-## BM3dObject_SetWorldMatrix
+BM3dEntity_GetWorldMatrix = _create_bmap_func('BM3dEntity_GetWorldMatrix', [bm_void_p, bm_CKID, bm_VxMatrix_p])
+## BM3dEntity_SetWorldMatrix
# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
# @param mat[in] Type: LibCmo::VxMath::VxMatrix.
# @return True if no error, otherwise False.
-BM3dObject_SetWorldMatrix = _create_bmap_func('BM3dObject_SetWorldMatrix', [bm_void_p, bm_CKID, bm_VxMatrix])
-## BM3dObject_GetCurrentMesh
+BM3dEntity_SetWorldMatrix = _create_bmap_func('BM3dEntity_SetWorldMatrix', [bm_void_p, bm_CKID, bm_VxMatrix])
+## BM3dEntity_GetCurrentMesh
# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
# @param out_meshid[out] Type: LibCmo::CK2::CK_ID. Use ctypes.byref(data) pass it.
# @return True if no error, otherwise False.
-BM3dObject_GetCurrentMesh = _create_bmap_func('BM3dObject_GetCurrentMesh', [bm_void_p, bm_CKID, bm_CKID_p])
-## BM3dObject_SetCurrentMesh
+BM3dEntity_GetCurrentMesh = _create_bmap_func('BM3dEntity_GetCurrentMesh', [bm_void_p, bm_CKID, bm_CKID_p])
+## BM3dEntity_SetCurrentMesh
# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
# @param meshid[in] Type: LibCmo::CK2::CK_ID.
# @return True if no error, otherwise False.
-BM3dObject_SetCurrentMesh = _create_bmap_func('BM3dObject_SetCurrentMesh', [bm_void_p, bm_CKID, bm_CKID])
-## BM3dObject_GetVisibility
+BM3dEntity_SetCurrentMesh = _create_bmap_func('BM3dEntity_SetCurrentMesh', [bm_void_p, bm_CKID, bm_CKID])
+## BM3dEntity_GetVisibility
# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
# @param out_isVisible[out] Type: bool. Use ctypes.byref(data) pass it.
# @return True if no error, otherwise False.
-BM3dObject_GetVisibility = _create_bmap_func('BM3dObject_GetVisibility', [bm_void_p, bm_CKID, bm_bool_p])
-## BM3dObject_SetVisibility
+BM3dEntity_GetVisibility = _create_bmap_func('BM3dEntity_GetVisibility', [bm_void_p, bm_CKID, bm_bool_p])
+## BM3dEntity_SetVisibility
# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
# @param is_visible[in] Type: bool.
# @return True if no error, otherwise False.
-BM3dObject_SetVisibility = _create_bmap_func('BM3dObject_SetVisibility', [bm_void_p, bm_CKID, bm_bool])
+BM3dEntity_SetVisibility = _create_bmap_func('BM3dEntity_SetVisibility', [bm_void_p, bm_CKID, bm_bool])
+## BMLight_GetType
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param out_val[out] Type: LibCmo::VxMath::VXLIGHT_TYPE. Use ctypes.byref(data) pass it.
+# @return True if no error, otherwise False.
+BMLight_GetType = _create_bmap_func('BMLight_GetType', [bm_void_p, bm_CKID, bm_enum_p])
+## BMLight_SetType
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param val[in] Type: LibCmo::VxMath::VXLIGHT_TYPE.
+# @return True if no error, otherwise False.
+BMLight_SetType = _create_bmap_func('BMLight_SetType', [bm_void_p, bm_CKID, bm_enum])
+## BMLight_GetColor
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param out_val[out] Type: LibCmo::VxMath::VxColor. Use ctypes.byref(data) pass it.
+# @return True if no error, otherwise False.
+BMLight_GetColor = _create_bmap_func('BMLight_GetColor', [bm_void_p, bm_CKID, bm_VxColor_p])
+## BMLight_SetColor
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param col[in] Type: LibCmo::VxMath::VxColor.
+# @return True if no error, otherwise False.
+BMLight_SetColor = _create_bmap_func('BMLight_SetColor', [bm_void_p, bm_CKID, bm_VxColor])
+## BMLight_GetConstantAttenuation
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param out_val[out] Type: LibCmo::CKFLOAT. Use ctypes.byref(data) pass it.
+# @return True if no error, otherwise False.
+BMLight_GetConstantAttenuation = _create_bmap_func('BMLight_GetConstantAttenuation', [bm_void_p, bm_CKID, bm_CKFLOAT_p])
+## BMLight_SetConstantAttenuation
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param val[in] Type: LibCmo::CKFLOAT.
+# @return True if no error, otherwise False.
+BMLight_SetConstantAttenuation = _create_bmap_func('BMLight_SetConstantAttenuation', [bm_void_p, bm_CKID, bm_CKFLOAT])
+## BMLight_GetLinearAttenuation
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param out_val[out] Type: LibCmo::CKFLOAT. Use ctypes.byref(data) pass it.
+# @return True if no error, otherwise False.
+BMLight_GetLinearAttenuation = _create_bmap_func('BMLight_GetLinearAttenuation', [bm_void_p, bm_CKID, bm_CKFLOAT_p])
+## BMLight_SetLinearAttenuation
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param val[in] Type: LibCmo::CKFLOAT.
+# @return True if no error, otherwise False.
+BMLight_SetLinearAttenuation = _create_bmap_func('BMLight_SetLinearAttenuation', [bm_void_p, bm_CKID, bm_CKFLOAT])
+## BMLight_GetQuadraticAttenuation
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param out_val[out] Type: LibCmo::CKFLOAT. Use ctypes.byref(data) pass it.
+# @return True if no error, otherwise False.
+BMLight_GetQuadraticAttenuation = _create_bmap_func('BMLight_GetQuadraticAttenuation', [bm_void_p, bm_CKID, bm_CKFLOAT_p])
+## BMLight_SetQuadraticAttenuation
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param val[in] Type: LibCmo::CKFLOAT.
+# @return True if no error, otherwise False.
+BMLight_SetQuadraticAttenuation = _create_bmap_func('BMLight_SetQuadraticAttenuation', [bm_void_p, bm_CKID, bm_CKFLOAT])
+## BMLight_GetRange
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param out_val[out] Type: LibCmo::CKFLOAT. Use ctypes.byref(data) pass it.
+# @return True if no error, otherwise False.
+BMLight_GetRange = _create_bmap_func('BMLight_GetRange', [bm_void_p, bm_CKID, bm_CKFLOAT_p])
+## BMLight_SetRange
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param val[in] Type: LibCmo::CKFLOAT.
+# @return True if no error, otherwise False.
+BMLight_SetRange = _create_bmap_func('BMLight_SetRange', [bm_void_p, bm_CKID, bm_CKFLOAT])
+## BMLight_GetHotSpot
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param out_val[out] Type: LibCmo::CKFLOAT. Use ctypes.byref(data) pass it.
+# @return True if no error, otherwise False.
+BMLight_GetHotSpot = _create_bmap_func('BMLight_GetHotSpot', [bm_void_p, bm_CKID, bm_CKFLOAT_p])
+## BMLight_SetHotSpot
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param val[in] Type: LibCmo::CKFLOAT.
+# @return True if no error, otherwise False.
+BMLight_SetHotSpot = _create_bmap_func('BMLight_SetHotSpot', [bm_void_p, bm_CKID, bm_CKFLOAT])
+## BMLight_GetFalloff
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param out_val[out] Type: LibCmo::CKFLOAT. Use ctypes.byref(data) pass it.
+# @return True if no error, otherwise False.
+BMLight_GetFalloff = _create_bmap_func('BMLight_GetFalloff', [bm_void_p, bm_CKID, bm_CKFLOAT_p])
+## BMLight_SetFalloff
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param val[in] Type: LibCmo::CKFLOAT.
+# @return True if no error, otherwise False.
+BMLight_SetFalloff = _create_bmap_func('BMLight_SetFalloff', [bm_void_p, bm_CKID, bm_CKFLOAT])
+## BMLight_GetFalloffShape
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param out_val[out] Type: LibCmo::CKFLOAT. Use ctypes.byref(data) pass it.
+# @return True if no error, otherwise False.
+BMLight_GetFalloffShape = _create_bmap_func('BMLight_GetFalloffShape', [bm_void_p, bm_CKID, bm_CKFLOAT_p])
+## BMLight_SetFalloffShape
+# @param bmfile[in] Type: BMap::BMFile*. The pointer to corresponding BMFile.
+# @param objid[in] Type: LibCmo::CK2::CK_ID. The CKID of object you accessing.
+# @param val[in] Type: LibCmo::CKFLOAT.
+# @return True if no error, otherwise False.
+BMLight_SetFalloffShape = _create_bmap_func('BMLight_SetFalloffShape', [bm_void_p, bm_CKID, bm_CKFLOAT])
##### GENERATED FUNCTIONS END #####
diff --git a/BMapBindings/PyBMap/PyBMap/bmap_wrapper.py b/BMapBindings/PyBMap/PyBMap/bmap_wrapper.py
index 4eef6d0..f3880b1 100644
--- a/BMapBindings/PyBMap/PyBMap/bmap_wrapper.py
+++ b/BMapBindings/PyBMap/PyBMap/bmap_wrapper.py
@@ -476,10 +476,10 @@ class BMMesh(BMObject):
except StopIteration:
_Utils.raise_out_of_length_exception()
-class BM3dObject(BMObject):
+class BM3dEntity(BMObject):
def get_world_matrix(self) -> virtools_types.VxMatrix:
mat: bmap.bm_VxMatrix = bmap.bm_VxMatrix()
- bmap.BM3dObject_GetWorldMatrix(self._get_pointer(), self._get_ckid(), ctypes.byref(mat))
+ bmap.BM3dEntity_GetWorldMatrix(self._get_pointer(), self._get_ckid(), ctypes.byref(mat))
# use cast & pointer to get matrix data conveniently
flat: bmap.bm_CKFLOAT_p = ctypes.cast(ctypes.byref(mat), bmap.bm_CKFLOAT_p)
ret: virtools_types.VxMatrix = virtools_types.VxMatrix()
@@ -489,11 +489,11 @@ class BM3dObject(BMObject):
def set_world_matrix(self, mat_: virtools_types.VxMatrix) -> None:
# star syntax expand the tuple as the argument.
mat: bmap.bm_VxMatrix = bmap.bm_VxMatrix(*(mat_.to_const()))
- bmap.BM3dObject_SetWorldMatrix(self._get_pointer(), self._get_ckid(), mat)
+ bmap.BM3dEntity_SetWorldMatrix(self._get_pointer(), self._get_ckid(), mat)
def get_current_mesh(self) -> BMMesh | None:
ckid: bmap.bm_CKID = bmap.bm_CKID()
- bmap.BM3dObject_GetCurrentMesh(self._get_pointer(), self._get_ckid(), ctypes.byref(ckid))
+ bmap.BM3dEntity_GetCurrentMesh(self._get_pointer(), self._get_ckid(), ctypes.byref(ckid))
if ckid.value == g_InvalidCKID:
return None
else:
@@ -503,12 +503,60 @@ class BM3dObject(BMObject):
ckid: bmap.bm_CKID = bmap.bm_CKID(g_InvalidCKID)
if mesh is not None:
ckid = mesh._get_ckid()
- bmap.BM3dObject_SetCurrentMesh(self._get_pointer(), self._get_ckid(), ckid)
+ bmap.BM3dEntity_SetCurrentMesh(self._get_pointer(), self._get_ckid(), ckid)
def get_visibility(self) -> bool:
- return self._get_bool_value(bmap.BM3dObject_GetVisibility)
+ return self._get_bool_value(bmap.BM3dEntity_GetVisibility)
def set_visibility(self, visb_: bool) -> None:
- self._set_bool_value(bmap.BM3dObject_SetVisibility, visb_)
+ self._set_bool_value(bmap.BM3dEntity_SetVisibility, visb_)
+
+class BM3dObject(BM3dEntity):
+ pass
+
+class BMLight(BM3dEntity):
+ def get_type(self) -> virtools_types.VXLIGHT_TYPE:
+ return self._get_enum_value(virtools_types.VXLIGHT_TYPE, bmap.BMLight_GetType)
+ def set_type(self, data_: virtools_types.VXLIGHT_TYPE) -> None:
+ self._set_enum_value(bmap.BMLight_SetType, data_)
+
+ def get_color(self) -> virtools_types.VxColor:
+ return self._get_vxcolor_value(bmap.BMLight_GetColor)
+ def set_color(self, col: virtools_types.VxColor) -> None:
+ self._set_vxcolor_value(bmap.BMLight_SetColor, col)
+
+ def get_constant_attenuation(self) -> float:
+ return self._get_float_point_value(bmap.bm_CKFLOAT, bmap.BMLight_GetConstantAttenuation)
+ def set_constant_attenuation(self, val_: float) -> None:
+ self._set_float_point_value(bmap.bm_CKFLOAT, bmap.BMLight_SetConstantAttenuation, val_)
+ def get_linear_attenuation(self) -> float:
+ return self._get_float_point_value(bmap.bm_CKFLOAT, bmap.BMLight_GetLinearAttenuation)
+ def set_linear_attenuation(self, val_: float) -> None:
+ self._set_float_point_value(bmap.bm_CKFLOAT, bmap.BMLight_SetLinearAttenuation, val_)
+ def get_quadratic_attenuation(self) -> float:
+ return self._get_float_point_value(bmap.bm_CKFLOAT, bmap.BMLight_GetQuadraticAttenuation)
+ def set_quadratic_attenuation(self, val_: float) -> None:
+ self._set_float_point_value(bmap.bm_CKFLOAT, bmap.BMLight_SetQuadraticAttenuation, val_)
+
+ def get_range(self) -> float:
+ return self._get_float_point_value(bmap.bm_CKFLOAT, bmap.BMLight_GetRange)
+ def set_range(self, val_: float) -> None:
+ self._set_float_point_value(bmap.bm_CKFLOAT, bmap.BMLight_SetRange, val_)
+
+ def get_hot_spot(self) -> float:
+ return self._get_float_point_value(bmap.bm_CKFLOAT, bmap.BMLight_GetHotSpot)
+ def set_hot_spot(self, val_: float) -> None:
+ self._set_float_point_value(bmap.bm_CKFLOAT, bmap.BMLight_SetHotSpot, val_)
+ def get_falloff(self) -> float:
+ return self._get_float_point_value(bmap.bm_CKFLOAT, bmap.BMLight_GetFalloff)
+ def set_falloff(self, val_: float) -> None:
+ self._set_float_point_value(bmap.bm_CKFLOAT, bmap.BMLight_SetFalloff, val_)
+ def get_falloff_shape(self) -> float:
+ return self._get_float_point_value(bmap.bm_CKFLOAT, bmap.BMLight_GetFalloffShape)
+ def set_falloff_shape(self, val_: float) -> None:
+ self._set_float_point_value(bmap.bm_CKFLOAT, bmap.BMLight_SetFalloffShape, val_)
+
+class BMTargetLight(BMLight):
+ pass
class BMGroup(BMObject):
def add_object(self, member: BM3dObject) -> None:
@@ -603,6 +651,10 @@ class BMFileReader(_AbstractPointer):
return self.__get_ckobject_count(bmap.BMFile_GetGroupCount)
def get_groups(self) -> typing.Iterator[BMGroup]:
return self.__get_ckobjects(BMGroup, bmap.BMFile_GetGroupCount, bmap.BMFile_GetGroup)
+ def get_target_light_count(self) -> int:
+ return self.__get_ckobject_count(bmap.BMFile_GetTargetLightCount)
+ def get_target_lights(self) -> typing.Iterator[BMTargetLight]:
+ return self.__get_ckobjects(BMTargetLight, bmap.BMFile_GetTargetLightCount, bmap.BMFile_GetTargetLight)
class BMFileWriter(_AbstractPointer):
def __init__(self, temp_folder_: str, texture_folder_: str, encodings_: tuple[str]):
@@ -663,6 +715,8 @@ class BMFileWriter(_AbstractPointer):
return self.__create_ckobject(BM3dObject, bmap.BMFile_Create3dObject)
def create_group(self) -> BMGroup:
return self.__create_ckobject(BMGroup, bmap.BMFile_CreateGroup)
+ def create_target_light(self) -> BMTargetLight:
+ return self.__create_ckobject(BMTargetLight, bmap.BMFile_CreateTargetLight)
class BMMeshTrans(_AbstractPointer):
def __init__(self):
diff --git a/BMapBindings/PyBMap/PyBMap/virtools_types.py b/BMapBindings/PyBMap/PyBMap/virtools_types.py
index c1e952d..24113b0 100644
--- a/BMapBindings/PyBMap/PyBMap/virtools_types.py
+++ b/BMapBindings/PyBMap/PyBMap/virtools_types.py
@@ -221,6 +221,15 @@ class VX_PIXELFORMAT(enum.IntEnum):
_4_ABGR8888_CLUT = 30 ##< 4 bits indexed CLUT (ABGR)
_4_ARGB8888_CLUT = 31 ##< 4 bits indexed CLUT (ARGB)
+class VXLIGHT_TYPE(enum.IntEnum):
+ """!
+ Light type
+ """
+ VX_LIGHTPOINT = 1 ##< The Light is a point of light
+ VX_LIGHTSPOT = 2 ##< The light is a spotlight
+ VX_LIGHTDIREC = 3 ##< The light is directional light : Lights comes from an infinite point so only direction of light can be given
+ #VX_LIGHTPARA = 4 ##< Obsolete, do not use
+
class VXTEXTURE_BLENDMODE(enum.IntEnum):
"""!
Blend Mode Flags
diff --git a/BMapBindings/PyBMap/testbench.py b/BMapBindings/PyBMap/testbench.py
index 41e5959..b584afc 100644
--- a/BMapBindings/PyBMap/testbench.py
+++ b/BMapBindings/PyBMap/testbench.py
@@ -4,7 +4,7 @@ import PyBMap.bmap_wrapper as bmap
def main() -> None:
input(f'Python PID is {os.getpid()}. Waiting for debugger, press any key to continue...')
- file_name: str = 'Level_02.NMO'
+ file_name: str = 'LightCameraTest.nmo'
temp_folder: str = 'Temp'
texture_folder: str = 'F:\\Ballance\\Ballance\\Textures'
encodings: tuple[str, ...] = ('cp1252', )
@@ -38,37 +38,37 @@ def test_common(reader: bmap.BMFileReader):
# print(f'\tFace Count: {mesh.get_face_count()}')
# print(f'\tMaterial Slot Count: {mesh.get_material_slot_count()}')
- print('===== Materials =====')
- for mtl in reader.get_materials():
- print(mtl.get_name())
+ # print('===== Materials =====')
+ # for mtl in reader.get_materials():
+ # print(mtl.get_name())
- print(f'\tDiffuse: {mtl.get_diffuse().to_const_rgba()}')
- print(f'\tAmbient: {mtl.get_ambient().to_const_rgba()}')
- print(f'\tSpecular: {mtl.get_specular().to_const_rgba()}')
- print(f'\tEmissive: {mtl.get_emissive().to_const_rgba()}')
+ # print(f'\tDiffuse: {mtl.get_diffuse().to_const_rgba()}')
+ # print(f'\tAmbient: {mtl.get_ambient().to_const_rgba()}')
+ # print(f'\tSpecular: {mtl.get_specular().to_const_rgba()}')
+ # print(f'\tEmissive: {mtl.get_emissive().to_const_rgba()}')
- print(f'\tSpecular Power: {mtl.get_specular_power()}')
+ # print(f'\tSpecular Power: {mtl.get_specular_power()}')
- print(f'\tTexture Border Color: {mtl.get_texture_border_color().to_const_rgba()}')
+ # print(f'\tTexture Border Color: {mtl.get_texture_border_color().to_const_rgba()}')
- print(f'\tTexture Blend Mode: {mtl.get_texture_blend_mode()}')
- print(f'\tTexture Min Mode: {mtl.get_texture_min_mode()}')
- print(f'\tTexture Mag Mode: {mtl.get_texture_mag_mode()}')
- print(f'\tSource Blend: {mtl.get_source_blend()}')
- print(f'\tDest Blend: {mtl.get_dest_blend()}')
- print(f'\tFill Mode: {mtl.get_fill_mode()}')
- print(f'\tShade Mode: {mtl.get_shade_mode()}')
+ # print(f'\tTexture Blend Mode: {mtl.get_texture_blend_mode()}')
+ # print(f'\tTexture Min Mode: {mtl.get_texture_min_mode()}')
+ # print(f'\tTexture Mag Mode: {mtl.get_texture_mag_mode()}')
+ # print(f'\tSource Blend: {mtl.get_source_blend()}')
+ # print(f'\tDest Blend: {mtl.get_dest_blend()}')
+ # print(f'\tFill Mode: {mtl.get_fill_mode()}')
+ # print(f'\tShade Mode: {mtl.get_shade_mode()}')
- print(f'\tAlpha Test Enabled: {mtl.get_alpha_test_enabled()}')
- print(f'\tAlpha Blend Enabled: {mtl.get_alpha_blend_enabled()}')
- print(f'\tPerspective Correction Enabled: {mtl.get_perspective_correction_enabled()}')
- print(f'\tZ Write Enabled: {mtl.get_z_write_enabled()}')
- print(f'\tTwo Sided Enabled: {mtl.get_two_sided_enabled()}')
+ # print(f'\tAlpha Test Enabled: {mtl.get_alpha_test_enabled()}')
+ # print(f'\tAlpha Blend Enabled: {mtl.get_alpha_blend_enabled()}')
+ # print(f'\tPerspective Correction Enabled: {mtl.get_perspective_correction_enabled()}')
+ # print(f'\tZ Write Enabled: {mtl.get_z_write_enabled()}')
+ # print(f'\tTwo Sided Enabled: {mtl.get_two_sided_enabled()}')
- print(f'\tAlpha Ref: {mtl.get_alpha_ref()}')
+ # print(f'\tAlpha Ref: {mtl.get_alpha_ref()}')
- print(f'\tAlpha Func: {mtl.get_alpha_func()}')
- print(f'\tZ Func: {mtl.get_z_func()}')
+ # print(f'\tAlpha Func: {mtl.get_alpha_func()}')
+ # print(f'\tZ Func: {mtl.get_z_func()}')
# print('===== Textures =====')
# for tex in reader.get_textures():
@@ -78,6 +78,23 @@ def test_common(reader: bmap.BMFileReader):
# print(f'\tSave Options: {tex.get_save_options()}')
# print(f'\tVideo Format: {tex.get_video_format()}')
+ print('===== Target Lights =====')
+ for lit in reader.get_target_lights():
+ print(lit.get_name())
+
+ print(f'\tVisibility: {lit.get_visibility()}')
+ print(f'\tMatrix: {lit.get_world_matrix().to_const()}')
+
+ print(f'\tType: {lit.get_type()}')
+ print(f'\tColor: {lit.get_color().to_const_rgba()}')
+ print(f'\tConstant Attenuation: {lit.get_constant_attenuation()}')
+ print(f'\tLinear Attenuation: {lit.get_linear_attenuation()}')
+ print(f'\tQuadratic Attenuation: {lit.get_quadratic_attenuation()}')
+ print(f'\tRange: {lit.get_range()}')
+ print(f'\tHot Spot: {lit.get_hot_spot()}')
+ print(f'\tFalloff: {lit.get_falloff()}')
+ print(f'\tFalloff Shape: {lit.get_falloff_shape()}')
+
print('===== END =====')
def test_equatable(reader: bmap.BMFileReader):
diff --git a/CodeGen/BMapBindings/CSharpWriter.java b/CodeGen/BMapBindings/CSharpWriter.java
index 5c4fee3..8a1e138 100644
--- a/CodeGen/BMapBindings/CSharpWriter.java
+++ b/CodeGen/BMapBindings/CSharpWriter.java
@@ -188,6 +188,7 @@ public class CSharpWriter {
break;
case "CK_TEXTURE_SAVEOPTIONS":
case "VX_PIXELFORMAT":
+ case "VXLIGHT_TYPE":
case "VXTEXTURE_BLENDMODE":
case "VXTEXTURE_FILTERMODE":
case "VXTEXTURE_ADDRESSMODE":
diff --git a/CodeGen/BMapBindings/PythonWriter.java b/CodeGen/BMapBindings/PythonWriter.java
index 2a8f782..fd297b7 100644
--- a/CodeGen/BMapBindings/PythonWriter.java
+++ b/CodeGen/BMapBindings/PythonWriter.java
@@ -28,6 +28,7 @@ public class PythonWriter {
cache.put("VxMatrix", "VxMatrix");
cache.put("CK_TEXTURE_SAVEOPTIONS", "enum");
cache.put("VX_PIXELFORMAT", "enum");
+ cache.put("VXLIGHT_TYPE", "enum");
cache.put("VXTEXTURE_BLENDMODE", "enum");
cache.put("VXTEXTURE_FILTERMODE", "enum");
cache.put("VXTEXTURE_ADDRESSMODE", "enum");