spaceshooter/game/lib/instance.c

56 lines
1.8 KiB
C
Raw Permalink Normal View History

2023-04-30 20:49:25 +00:00
#include "instance.h"
#include "message.h"
CLIENT_SOUND* cl_create_sound(CLIENT_SOUND* sound, int instance_size)
{
if(!sound)
{
sound = (CLIENT_SOUND*)malloc(sizeof(CLIENT_SOUND));
show_message_error(sound, "Failed to allocate space for CLIENT_SOUND");
}
sound->instance_size = instance_size;
sound->current_instance = -1;
sound->instance = (CLIENT_SAMPLE_INSTANCE**)malloc(sizeof(CLIENT_SAMPLE_INSTANCE*) * instance_size);
show_message_error(sound->instance, "Failed to allocate space for CLIENT_SAMPLE_INSTANCE collection");
for(int i = 0; i < instance_size; i++)
{
sound->instance[i] = (CLIENT_SAMPLE_INSTANCE*)malloc(sizeof(CLIENT_SAMPLE_INSTANCE));
show_message_error(sound->instance[i], "Failed to allocate space for CLIENT_SAMPLE_INSTANCE");
sound->instance[i]->al_instance = NULL;
sound->instance[i]->al_sample = NULL;
}
return sound;
}
void cl_free_sound(CLIENT_SOUND* sound)
{
cl_destroy_sound(sound);
free(sound);
}
void cl_destroy_sound(CLIENT_SOUND* sound)
{
for(int i = 0; i < sound->instance_size; i++)
{
if(sound->instance[i]->al_instance)
al_destroy_sample_instance(sound->instance[i]->al_instance);
free(sound->instance[i]);
}
free(sound->instance);
}
void cl_add_instance(CLIENT_SAMPLE_INSTANCE* instance, ALLEGRO_SAMPLE* sample, ALLEGRO_PLAYMODE playmode, float gain)
{
instance->playmode = playmode;
instance->gain = gain;
instance->al_sample = sample;
instance->al_instance = al_create_sample_instance(instance->al_sample);
al_set_sample_instance_playmode(instance->al_instance, instance->playmode);
al_set_sample_instance_gain(instance->al_instance, instance->gain);
al_attach_sample_instance_to_mixer(instance->al_instance, al_get_default_mixer());
}