40 lines
1.3 KiB
C
40 lines
1.3 KiB
C
#include "player_input.h"
|
|
#include "debug.h"
|
|
|
|
PlayerInput* playerinput_new(void* target, int device) {
|
|
PlayerInput* self = malloc(sizeof(PlayerInput));
|
|
ASSERT_RETURN(self != NULL, NULL, "Could not allocate memory for PlayerInput instance");
|
|
self->listeners = list_from_type(InputListener);
|
|
self->device = input_get_device_by_id(device);
|
|
self->target = target;
|
|
input_device_set_listeners(self->device, &self->listeners);
|
|
return self;
|
|
}
|
|
|
|
void playerinput_add(PlayerInput* self, InputAxis axis, InputDelegateFn delegate) {
|
|
InputListener listener = {
|
|
.axis = axis,
|
|
.fn = delegate,
|
|
.self = self->target,
|
|
};
|
|
listener.axis.tc->set_device(listener.axis.data, self->device);
|
|
list_add(&self->listeners, &listener);
|
|
}
|
|
|
|
void playerinput_set_device(PlayerInput* self, int device) {
|
|
if(self->device != NULL)
|
|
input_device_set_listeners(self->device, NULL);
|
|
self->device = input_get_device_by_id(device);
|
|
input_device_set_listeners(self->device, &self->listeners);
|
|
}
|
|
|
|
void playerinput_drop(PlayerInput* self) {
|
|
input_device_set_listeners(self->device, NULL);
|
|
|
|
list_foreach(InputListener*, listener, &self->listeners) {
|
|
listener->axis.drop->drop(listener->axis.data);
|
|
}
|
|
list_empty(&self->listeners);
|
|
free(self);
|
|
}
|