123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- class UnderObjectDecalSpawnSettings
- {
- bool m_RandomizeRotation = true;
-
- float m_ScaleMin = 0.1;
- float m_ScaleMax = 1.0;
-
- vector m_PositionOffset = vector.Zero;
- }
- class UnderObjectDecalSpawnComponent
- {
- private const string SURFACE_PARAM_DECAL_NAME = "underObjectDecal";
- protected ref UnderObjectDecalSpawnSettings m_Settings;
-
- protected Object m_Parent;
- protected Object m_Decal;
-
- private float m_LastScaleValue;
- void UnderObjectDecalSpawnComponent(notnull UnderObjectDecalSpawnSettings pSettings, notnull Object pParent)
- {
- m_Settings = pSettings;
- m_Parent = pParent;
- }
-
- private string GetObjectNameFromSurfaceConfig(string surfaceParamName = SURFACE_PARAM_DECAL_NAME)
- {
- string surfaceType
- int liquidType;
- g_Game.SurfaceUnderObjectCorrectedLiquid(m_Parent, surfaceType, liquidType);
- return Surface.GetParamText(surfaceType, surfaceParamName);
- }
- void SpawnDecal()
- {
- if (m_Decal)
- return;
- #ifndef SERVER
- m_Decal = g_Game.CreateObjectEx(
- GetObjectNameFromSurfaceConfig(),
- m_Parent.GetPosition() + m_Settings.m_PositionOffset,
- ECE_LOCAL|ECE_PLACE_ON_SURFACE,
- );
- if (m_Decal)
- {
- if (m_Settings.m_RandomizeRotation)
- {
- vector v;
- v[0] = Math.RandomFloat(-Math.PI, Math.PI);
- m_Decal.SetOrientation(v * Math.RAD2DEG);
- }
-
- m_Decal.SetScale(m_Settings.m_ScaleMin);
- }
- #endif
- }
-
- void RemoveDecal()
- {
- #ifndef SERVER
- if (m_Decal)
- m_Decal.Delete();
- #endif
- }
-
- void UpdateSize(float pScaleValue)
- {
- #ifndef SERVER
- if (m_Decal)
- {
- if (pScaleValue != m_LastScaleValue)
- {
- m_LastScaleValue = m_Decal.GetScale();
- m_Decal.SetScale(Math.Clamp(pScaleValue, m_Settings.m_ScaleMin, m_Settings.m_ScaleMax));
- }
- }
- #endif
- }
- }
|