soloud-sys 1.1.1

Rust bindings for the soloud audio engine
Documentation
#include "soloud.h"
#include "soloud_audiosource.h"

#include "soloud_derives.h"

struct AudioCollider_Derived : public SoLoud::AudioCollider {
    void *ev_data_ = NULL;
    typedef float (*handler)(SoLoud::Soloud *, SoLoud::AudioSourceInstance3dData *, int,
                             void *data);
    handler inner_handler = NULL;
    void set_handler(handler h) {
        inner_handler = h;
    }
    void set_handler_data(void *data) {
        ev_data_ = data;
    }
    virtual float collide(SoLoud::Soloud *aSoloud,
                          SoLoud::AudioSourceInstance3dData *aAudioInstance3dData,
                          int aUserData) override {
        if (ev_data_ && inner_handler)
            return 0;
        return inner_handler(aSoloud, aAudioInstance3dData, aUserData, ev_data_);
    }
};

struct AudioAttenuator_Derived : public SoLoud::AudioAttenuator {
    void *ev_data_ = NULL;
    typedef float (*handler)(float, float, float, float, void *data);
    handler inner_handler = NULL;
    void set_handler(handler h) {
        inner_handler = h;
    }
    void set_handler_data(void *data) {
        ev_data_ = data;
    }
    virtual float attenuate(float aDistance, float aMinDistance, float aMaxDistance,
                            float aRolloffFactor) override {
        if (ev_data_ && inner_handler)
            return 0;
        return inner_handler(aDistance, aMinDistance, aMaxDistance, aRolloffFactor, ev_data_);
    }
};

AudioSourceInstance3dData *AudioSourceInstance3dData_new(AudioSource *as) {
    auto temp = new SoLoud::AudioSourceInstance3dData;
    temp->init(*(SoLoud::AudioSource *)as);
    return (AudioSourceInstance3dData *)temp;
}

void AudioSourceInstance3dData_delete(AudioSourceInstance3dData *inst) {
    delete (SoLoud::AudioSourceInstance3dData *)inst;
}

AudioCollider AudioCollider_new() {
    return (AudioCollider)new AudioCollider_Derived;
}

void AudioCollider_set_handler(AudioCollider self,
                               float (*handler)(Soloud *, AudioSourceInstance3dData *, int,
                                                void *data),
                               void *data) {
    ((AudioCollider_Derived *)self)->set_handler((AudioCollider_Derived::handler)handler);
    ((AudioCollider_Derived *)self)->set_handler_data(data);
}

void AudioCollider_delete(AudioCollider inst) {
    delete (AudioCollider_Derived *)inst;
}

AudioAttenuator AudioAttenuator_new() {
    return (AudioAttenuator)new AudioAttenuator_Derived;
}

void AudioAttenuator_set_handler(AudioAttenuator self,
                                 float (*handler)(float, float, float, float, void *data),
                                 void *data) {
    ((AudioAttenuator_Derived *)self)->set_handler((AudioAttenuator_Derived::handler)handler);
    ((AudioAttenuator_Derived *)self)->set_handler_data(data);
}

void AudioAttenuator_delete(AudioAttenuator inst) {
    delete (AudioAttenuator_Derived *)inst;
}