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