// Autogenerated from CppHeaderCreator
// Created by Sc2ad
// =========================================================================
#pragma once
// Begin includes
#include "beatsaber-hook/shared/utils/typedefs.h"
#include "beatsaber-hook/shared/utils/byref.hpp"
// Including type: OVR.PreloadSounds
#include "OVR/PreloadSounds.hpp"
#include "beatsaber-hook/shared/utils/il2cpp-utils-methods.hpp"
#include "beatsaber-hook/shared/utils/il2cpp-utils-properties.hpp"
#include "beatsaber-hook/shared/utils/il2cpp-utils-fields.hpp"
#include "beatsaber-hook/shared/utils/utils.h"
#include "beatsaber-hook/shared/utils/typedefs-array.hpp"
#include "beatsaber-hook/shared/utils/typedefs-string.hpp"
// Completed includes
// Begin forward declares
// Forward declaring namespace: OVR
namespace OVR {
  // Forward declaring type: SoundFX
  class SoundFX;
}
// Forward declaring namespace: UnityEngine::Audio
namespace UnityEngine::Audio {
  // Forward declaring type: AudioMixerGroup
  class AudioMixerGroup;
}
// Completed forward declares
// Type namespace: OVR
namespace OVR {
  // Forward declaring type: SoundGroup
  class SoundGroup;
}
#include "beatsaber-hook/shared/utils/il2cpp-type-check.hpp"
NEED_NO_BOX(::OVR::SoundGroup);
DEFINE_IL2CPP_ARG_TYPE(::OVR::SoundGroup*, "OVR", "SoundGroup");
// Type namespace: OVR
namespace OVR {
  // Size: 0x38
  #pragma pack(push, 1)
  // Autogenerated type: OVR.SoundGroup
  // [TokenAttribute] Offset: FFFFFFFF
  class SoundGroup : public ::Il2CppObject {
    public:
    #ifdef USE_CODEGEN_FIELDS
    public:
    #else
    #ifdef CODEGEN_FIELD_ACCESSIBILITY
    CODEGEN_FIELD_ACCESSIBILITY:
    #else
    protected:
    #endif
    #endif
    // public System.String name
    // Size: 0x8
    // Offset: 0x10
    ::StringW name;
    // Field size check
    static_assert(sizeof(::StringW) == 0x8);
    // public OVR.SoundFX[] soundList
    // Size: 0x8
    // Offset: 0x18
    ::ArrayW<::OVR::SoundFX*> soundList;
    // Field size check
    static_assert(sizeof(::ArrayW<::OVR::SoundFX*>) == 0x8);
    // public UnityEngine.Audio.AudioMixerGroup mixerGroup
    // Size: 0x8
    // Offset: 0x20
    ::UnityEngine::Audio::AudioMixerGroup* mixerGroup;
    // Field size check
    static_assert(sizeof(::UnityEngine::Audio::AudioMixerGroup*) == 0x8);
    // [RangeAttribute] Offset: 0x5D553C
    // public System.Int32 maxPlayingSounds
    // Size: 0x4
    // Offset: 0x28
    int maxPlayingSounds;
    // Field size check
    static_assert(sizeof(int) == 0x4);
    // public OVR.PreloadSounds preloadAudio
    // Size: 0x4
    // Offset: 0x2C
    ::OVR::PreloadSounds preloadAudio;
    // Field size check
    static_assert(sizeof(::OVR::PreloadSounds) == 0x4);
    // public System.Single volumeOverride
    // Size: 0x4
    // Offset: 0x30
    float volumeOverride;
    // Field size check
    static_assert(sizeof(float) == 0x4);
    // public System.Int32 playingSoundCount
    // Size: 0x4
    // Offset: 0x34
    int playingSoundCount;
    // Field size check
    static_assert(sizeof(int) == 0x4);
    public:
    // Get instance field reference: public System.String name
    ::StringW& dyn_name();
    // Get instance field reference: public OVR.SoundFX[] soundList
    ::ArrayW<::OVR::SoundFX*>& dyn_soundList();
    // Get instance field reference: public UnityEngine.Audio.AudioMixerGroup mixerGroup
    ::UnityEngine::Audio::AudioMixerGroup*& dyn_mixerGroup();
    // Get instance field reference: public System.Int32 maxPlayingSounds
    int& dyn_maxPlayingSounds();
    // Get instance field reference: public OVR.PreloadSounds preloadAudio
    ::OVR::PreloadSounds& dyn_preloadAudio();
    // Get instance field reference: public System.Single volumeOverride
    float& dyn_volumeOverride();
    // Get instance field reference: public System.Int32 playingSoundCount
    int& dyn_playingSoundCount();
    // public System.Void .ctor(System.String name)
    // Offset: 0x12A7D70
    template<::il2cpp_utils::CreationType creationType = ::il2cpp_utils::CreationType::Temporary>
    static SoundGroup* New_ctor(::StringW name) {
      static auto ___internal__logger = ::Logger::get().WithContext("::OVR::SoundGroup::.ctor");
      return THROW_UNLESS((::il2cpp_utils::New<SoundGroup*, creationType>(name)));
    }
    // public System.Void IncrementPlayCount()
    // Offset: 0x12A6EC4
    void IncrementPlayCount();
    // public System.Void DecrementPlayCount()
    // Offset: 0x12A6FB0
    void DecrementPlayCount();
    // public System.Boolean CanPlaySound()
    // Offset: 0x12A73F0
    bool CanPlaySound();
    // public System.Void .ctor()
    // Offset: 0x12A7E0C
    // Implemented from: System.Object
    // Base method: System.Void Object::.ctor()
    template<::il2cpp_utils::CreationType creationType = ::il2cpp_utils::CreationType::Temporary>
    static SoundGroup* New_ctor() {
      static auto ___internal__logger = ::Logger::get().WithContext("::OVR::SoundGroup::.ctor");
      return THROW_UNLESS((::il2cpp_utils::New<SoundGroup*, creationType>()));
    }
  }; // OVR.SoundGroup
  #pragma pack(pop)
  static check_size<sizeof(SoundGroup), 52 + sizeof(int)> __OVR_SoundGroupSizeCheck;
  static_assert(sizeof(SoundGroup) == 0x38);
}
#include "beatsaber-hook/shared/utils/il2cpp-utils-methods.hpp"
// Writing MetadataGetter for method: OVR::SoundGroup::New_ctor
// Il2CppName: .ctor
// Cannot get method pointer of value based method overload from template for constructor!
// Try using FindMethod instead!
// Writing MetadataGetter for method: OVR::SoundGroup::IncrementPlayCount
// Il2CppName: IncrementPlayCount
template<>
struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<void (OVR::SoundGroup::*)()>(&OVR::SoundGroup::IncrementPlayCount)> {
  static const MethodInfo* get() {
    return ::il2cpp_utils::FindMethod(classof(OVR::SoundGroup*), "IncrementPlayCount", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{});
  }
};
// Writing MetadataGetter for method: OVR::SoundGroup::DecrementPlayCount
// Il2CppName: DecrementPlayCount
template<>
struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<void (OVR::SoundGroup::*)()>(&OVR::SoundGroup::DecrementPlayCount)> {
  static const MethodInfo* get() {
    return ::il2cpp_utils::FindMethod(classof(OVR::SoundGroup*), "DecrementPlayCount", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{});
  }
};
// Writing MetadataGetter for method: OVR::SoundGroup::CanPlaySound
// Il2CppName: CanPlaySound
template<>
struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter<static_cast<bool (OVR::SoundGroup::*)()>(&OVR::SoundGroup::CanPlaySound)> {
  static const MethodInfo* get() {
    return ::il2cpp_utils::FindMethod(classof(OVR::SoundGroup*), "CanPlaySound", std::vector<Il2CppClass*>(), ::std::vector<const Il2CppType*>{});
  }
};
// Writing MetadataGetter for method: OVR::SoundGroup::New_ctor
// Il2CppName: .ctor
// Cannot get method pointer of value based method overload from template for constructor!
// Try using FindMethod instead!
