// BanjoDecomp: code_7090.c
#include <ultra64.h>
#include "core1/core1.h"
#include "functions.h"
#include "variables.h"

s16 *D_802758E0 = NULL;

void core1_7090_alloc(void) {
    int i;

    if (D_802758E0)
        return;

    D_802758E0 = (s16 *) bk_malloc(10 * sizeof(s16));

    for (i = 0; i < 10; i++) {
        D_802758E0[i] = 0;
    }
}

void core1_7090_release(void) {
    int i;

    if (!D_802758E0)
        return;

    for (i = 0; i < 10; i++) {
        if (D_802758E0[i])
            sfxSource_triggerCallbackByIndex(D_802758E0[i]);
    }

    bk_free(D_802758E0);
    D_802758E0 = NULL;
}

void core1_7090_initSfxSource(s32 idx, s32 lookup_idx, s32 sample_rate, f32 volume) {
    u8 sfx_source_index;

    if (func_8030ED70(lookup_getSfxId(lookup_idx))) {
        sfx_source_index = sfxsource_createSfxsourceAndReturnIndex();

        if (sfx_source_index) {
            sfxsource_setSfxId(sfx_source_index, lookup_getSfxId(lookup_idx));
            sfxsource_playSfxAtVolume(sfx_source_index, volume);
            sfxsource_setSampleRate(sfx_source_index, sample_rate);
            sfxSource_func_8030E2C4(sfx_source_index);
            core1_7090_freeSfxSource(idx);
            D_802758E0[idx] = sfx_source_index;
        }
    }
    else {
        gcsfx_playWithPitch(lookup_getSfxId(lookup_idx), volume, sample_rate);
    }
}

void core1_7090_freeSfxSource(int idx) {
    if (D_802758E0[idx]) {
        sfxsource_freeSfxsourceByIndex(D_802758E0[idx]);
    }

    D_802758E0[idx] = 0;
}