/*
This Source Code Form is subject to the
terms of the Mozilla Public License, v.
2.0. If a copy of the MPL was not
distributed with this file, You can
obtain one at
http://mozilla.org/MPL/2.0/.
*/

#pragma once

#include "Classes.h"
#include "sound.h"

// animacja dwustanowa, włącza jeden z dwóch submodeli (jednego z nich może nie być)
class TButton {

public:
// methods
    TButton() = default;
    void Clear(int const i = -1);
    inline
    void FeedbackBitSet( int const i ) {
        iFeedbackBit = 1 << i; };
    void Turn( bool const State );
    inline
    bool GetValue() const {
        return m_state; }
    inline
    bool Active() {
        return ( ( pModelOn != nullptr )
              || ( pModelOff != nullptr ) ); }
    void Update( bool const Power = true );
    bool Init( std::string const &asName, TModel3d const *pModel, bool bNewOn = false );
    void Load( cParser &Parser, TDynamicObject const *Owner );
    void AssignBool(bool const *bValue);
    // returns offset of submodel associated with the button from the model centre
    glm::vec3 model_offset() const;

private:
// methods
    // imports member data pair from the config file
    bool
        Load_mapping( cParser &Input );
    // plays the sound associated with current state
    void
        play();

// members
    TSubModel
        *pModelOn { nullptr },
        *pModelOff { nullptr }; // submodel dla stanu załączonego i wyłączonego
    bool m_state { false };
    bool const *bData { nullptr };
    int iFeedbackBit { 0 }; // Ra: bit informacji zwrotnej, do wyprowadzenia na pulpit
    sound_source m_soundfxincrease { sound_placement::internal, EU07_SOUND_CABCONTROLSCUTOFFRANGE }; // sound associated with increasing control's value
    sound_source m_soundfxdecrease { sound_placement::internal, EU07_SOUND_CABCONTROLSCUTOFFRANGE }; // sound associated with decreasing control's value
};

//---------------------------------------------------------------------------
