Program Listing for File audio_component.h

Return to documentation for file (rootex/framework/components/audio/audio_component.h)

#pragma once

#include "audio/audio_source.h"
#include "component.h"
#include "entity.h"
#include "components/space/transform_component.h"
#include "components/physics/box_collider_component.h"
#include "components/physics/sphere_collider_component.h"
#include "components/physics/capsule_collider_component.h"

class AudioComponent : public Component
{
    DEPENDS_ON(TransformComponent);
    SOFT_DEPENDS_ON(CapsuleColliderComponent);
    SOFT_DEPENDS_ON(BoxColliderComponent);
    SOFT_DEPENDS_ON(SphereColliderComponent);

    bool m_IsAttenuated;
    AudioSource::AttenuationModel m_AttenuationModel;
    ALfloat m_RolloffFactor;
    ALfloat m_ReferenceDistance;
    ALfloat m_MaxDistance;
    ALfloat m_Volume;
    AudioSource* m_AudioSource;

protected:
    bool m_IsPlayOnStart;
    bool m_IsLooping;

    String m_AttenuationModelName = "Linear";

    void setAudioSource(AudioSource* audioSource) { m_AudioSource = audioSource; }

public:
    AudioComponent(
        Entity& owner,
        bool playOnStart,
        float volume,
        bool isLooping,
        bool attenuation,
        AudioSource::AttenuationModel model,
        ALfloat rolloffFactor,
        ALfloat referenceDistance,
        ALfloat maxDistance);
    virtual ~AudioComponent() = default;

    void update();

    bool isPlayOnStart() const { return m_IsPlayOnStart; }
    bool isAttenuated() { return m_IsAttenuated; }

    void setPlaying(bool enabled);
    void play();
    void stop();

    void setLooping(bool enabled);
    bool isLooping();

    AudioSource* getAudioSource() { return m_AudioSource; }
    RigidBodyComponent* getCollider();

    bool setupData() override;
    JSON::json getJSON() const;
    void draw() override;
};