Moved a tonne of code around
This commit is contained in:
104
src/dawn/input/input.c
Normal file
104
src/dawn/input/input.c
Normal file
@ -0,0 +1,104 @@
|
||||
/**
|
||||
* Copyright (c) 2021 Dominic Msters
|
||||
*
|
||||
* This software is released under the MIT License.
|
||||
* https://opensource.org/licenses/MIT
|
||||
*/
|
||||
|
||||
#include "input.h"
|
||||
|
||||
void inputInit(input_t *input) {
|
||||
int32_t i;
|
||||
|
||||
// Setup the bind lists
|
||||
for(i = 0; i < INPUT_BIND_COUNT; i++) {
|
||||
input->bindMap[i] = listCreate();
|
||||
}
|
||||
|
||||
input->current = input->inputsA;
|
||||
input->previous = input->inputsB;
|
||||
|
||||
// Create the buffer, zero all the values out.
|
||||
memset(input->buffer, 0, sizeof(inputval_t)*INPUT_SOURCE_COUNT);
|
||||
}
|
||||
|
||||
void inputUpdate(input_t *input) {
|
||||
int32_t i;
|
||||
listentry_t *item;
|
||||
inputval_t value;
|
||||
|
||||
// Flip the states to save memory.
|
||||
inputval_t *currentCurrent = input->current;
|
||||
input->current = input->previous;
|
||||
input->previous = currentCurrent;
|
||||
|
||||
// Now look at each bind...
|
||||
for(i = 0; i < INPUT_BIND_COUNT; i++) {
|
||||
// Now get the list of input sources bound to this input
|
||||
item = input->bindMap[i]->start;
|
||||
value = 0;
|
||||
|
||||
// For each input source, add the value from the buffer
|
||||
while(item != NULL) {
|
||||
value += input->buffer[(inputsource_t)item->data];
|
||||
item = item->next;
|
||||
}
|
||||
|
||||
// Set to the current state.
|
||||
input->current[i] = value;
|
||||
}
|
||||
}
|
||||
|
||||
void inputDispose(input_t *input) {
|
||||
int32_t i;
|
||||
|
||||
// Free up the bind lists
|
||||
for(i = 0; i < INPUT_BIND_COUNT; i++) {
|
||||
listDispose(input->bindMap[i], false);
|
||||
}
|
||||
}
|
||||
|
||||
void inputBind(input_t *input, inputbind_t bind, inputsource_t source) {
|
||||
listAdd(input->bindMap[bind], (void *)source);
|
||||
}
|
||||
|
||||
void inputUnbind(input_t *input, inputbind_t bind, inputsource_t source) {
|
||||
listRemove(input->bindMap[bind], (void *)source);
|
||||
}
|
||||
|
||||
void inputStateSet(input_t *input, inputsource_t source, float value) {
|
||||
input->buffer[source] = value;
|
||||
}
|
||||
|
||||
bool inputIsDown(input_t *input, inputbind_t binding) {
|
||||
return input->current[binding] != 0;
|
||||
}
|
||||
|
||||
bool inputIsUp(input_t *input, inputbind_t binding) {
|
||||
return input->current[binding] == 0;
|
||||
}
|
||||
|
||||
bool inputIsPressed(input_t *input, inputbind_t binding) {
|
||||
return (
|
||||
input->previous[binding] == 0 &&
|
||||
input->current[binding] != 0
|
||||
);
|
||||
}
|
||||
|
||||
bool inputIsReleased(input_t *input, inputbind_t binding) {
|
||||
return input->current[binding]==0 && input->previous[binding] != 0;
|
||||
}
|
||||
|
||||
inputval_t inputGetAxis(input_t *input, inputbind_t binding) {
|
||||
return input->current[binding];
|
||||
}
|
||||
|
||||
float inputGetFullAxis(input_t *input, inputbind_t positive,
|
||||
inputbind_t negative
|
||||
) {
|
||||
return -input->current[negative] + input->current[positive];
|
||||
}
|
||||
|
||||
float inputGetAccuated(input_t *input, inputbind_t binding) {
|
||||
return input->times[binding];
|
||||
}
|
Reference in New Issue
Block a user