Untitled
Anonymous
plain_text
03/03/2026 11:58 AM
11.5 KB
9
Indexable
class UH60M_SoundControllerClass : ScriptComponentClass
{
}
class UH60M_SoundController : ScriptComponent
{
protected bool m_bEngineOn = false;
protected float m_fRotorRPM = 0.0;
protected float m_fTargetRPM = 0.0;
protected float m_fThrottle = 0.0;
protected float m_fForwardSpeed = 0.0;
protected AudioComponent m_StartupAudio;
protected AudioComponent m_IdleAudio;
protected AudioComponent m_FlightAudio;
protected AudioComponent m_ShutdownAudio;
override void OnPostInit(IEntity owner)
{
SetEventMask(owner, EntityEvent.FRAME);
InitializeAudio(owner);
}
void InitializeAudio(IEntity owner)
{
m_StartupAudio = AudioComponent.Cast(owner.FindComponent(AudioComponent));
m_IdleAudio = AudioComponent.Cast(owner.FindComponent(AudioComponent));
m_FlightAudio = AudioComponent.Cast(owner.FindComponent(AudioComponent));
m_ShutdownAudio = AudioComponent.Cast(owner.FindComponent(AudioComponent));
}
override void EOnFrame(IEntity owner, float timeSlice)
{
UpdateRPM(timeSlice);
UpdateAudioBlend();
}
void StartEngine()
{
if (m_bEngineOn) return;
m_bEngineOn = true;
m_fTargetRPM = 1.0;
if (m_StartupAudio)
m_StartupAudio.Play();
}
void StopEngine()
{
if (!m_bEngineOn) return;
m_bEngineOn = false;
m_fTargetRPM = 0.0;
if (m_ShutdownAudio)
m_ShutdownAudio.Play();
}
void UpdateRPM(float delta)
{
float rpmSpeed = 0.2;
if (m_fRotorRPM < m_fTargetRPM)
m_fRotorRPM += rpmSpeed * delta;
else if (m_fRotorRPM > m_fTargetRPM)
m_fRotorRPM -= rpmSpeed * delta;
m_fRotorRPM = Math.Clamp(m_fRotorRPM, 0.0, 1.0);
}
void UpdateAudioBlend()
{
if (!m_IdleAudio || !m_FlightAudio)
return;
if (m_fRotorRPM > 0.2)
{
m_IdleAudio.SetVolume(1.0 - m_fForwardSpeed);
m_FlightAudio.SetVolume(m_fForwardSpeed);
}
}
void SetForwardSpeed(float speed)
{
m_fForwardSpeed = Math.Clamp(speed, 0.0, 1.0);
}
void SetThrottle(float throttle)
{
m_fThrottle = Math.Clamp(throttle, 0.0, 1.0);
m_fTargetRPM = m_fThrottle;
}
}
}
}
}
}
}
}
}
}
}
}
}
}Editor is loading...
Leave a Comment