using NativeEngine; namespace Sandbox; /// /// A decal. Use the Component. /// internal sealed class DecalSceneObject : SceneObject { NativeEngine.CDecalSceneObject decalNative; internal DecalSceneObject() { } internal DecalSceneObject( HandleCreationData _ ) { } public Texture ColorTexture { get => Texture.FromNative( decalNative.m_hColor ); set => decalNative.m_hColor = value?.native ?? default; } public Texture NormalTexture { get => Texture.FromNative( decalNative.m_hNormal ); set => decalNative.m_hNormal = value?.native ?? default; } public Texture RMOTexture { get => Texture.FromNative( decalNative.m_hRMO ); set => decalNative.m_hRMO = value?.native ?? default; } public Texture HeightTexture { get => Texture.FromNative( decalNative.m_hHeight ); set => decalNative.m_hHeight = value?.native ?? default; } public Color Color { get => decalNative.m_vColorTint; set => decalNative.m_vColorTint = value; } public uint SortOrder { get => decalNative.m_nSortOrder; set => decalNative.m_nSortOrder = value; } public uint ExclusionBitMask { get => decalNative.m_nExclusionBitMask; set => decalNative.m_nExclusionBitMask = value; } public Texture EmissionTexture { get => Texture.FromNative( decalNative.m_hEmission ); set => decalNative.m_hEmission = value?.native ?? default; } public float AttenuationAngle { get => decalNative.m_flAttenuationAngle; set => decalNative.m_flAttenuationAngle = value; } public float ColorMix { get => decalNative.m_flColorMix; set => decalNative.m_flColorMix = value; } public float EmissionEnergy { get => decalNative.m_flEmissionEnergy; set => decalNative.m_flEmissionEnergy = value; } public uint SequenceIndex { get => decalNative.m_nSequenceIndex; set => decalNative.m_nSequenceIndex = value; } public float ParallaxStrength { get => decalNative.m_flParallaxStrength; set => decalNative.m_flParallaxStrength = value; } public int SamplerIndex { get => decalNative.m_nSamplerIndex; set => decalNative.m_nSamplerIndex = value; } public DecalSceneObject( SceneWorld world ) { Assert.IsValid( world ); using ( var h = IHandle.MakeNextHandle( this ) ) { CSceneSystem.CreateDecal( world ); } } internal override void OnNativeInit( CSceneObject ptr ) { decalNative = (NativeEngine.CDecalSceneObject)ptr; base.OnNativeInit( ptr ); } internal override void OnNativeDestroy() { decalNative = default; base.OnNativeDestroy(); } }