summaryrefslogtreecommitdiff
path: root/src/client/control.c
blob: bfc2428cbf2ad2eb4d97596c71ccefec02313030 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <SDL.h>
#include <limits.h>
#include <assert.h>

#include "main.h"
#include "control.h"

control_t *control_new(SDLKey arg_up, SDLKey arg_right, SDLKey arg_left,
		       SDLKey arg_down, SDLKey arg_shot, SDLKey arg_switch)
{
	control_t *tmp;

	tmp = malloc(sizeof(control_t));
	memset(tmp, 0, sizeof(control_t));
	tmp->key[CONTROL_UP] = arg_up;
	tmp->key[CONTROL_RIGHT] = arg_right;
	tmp->key[CONTROL_LEFT] = arg_left;
	tmp->key[CONTROL_DOWN] = arg_down;
	tmp->key[CONTROL_SHOT] = arg_shot;
	tmp->key[CONTROL_SWITCH] = arg_switch;

	return tmp;
}

int control_get_key_route(control_t *my_control)
{
	Uint8 *map;
	SDLKey ret_key;
	int z;
	int i;

	assert(my_control != NULL);

	ret_key = CONTROL_NONE;

	map = SDL_GetKeyState(NULL);

	for (i = 0; i < CONTROL_KEY_COUNT_ROUTE; i++) {
		if (map[my_control->key[i]] == SDL_PRESSED) {
			my_control->count[i]++;
		} else {
			my_control->count[i] = 0;
		}
	}

	z = INT_MAX;

	for (i = 0; i < CONTROL_KEY_COUNT_ROUTE; i++) {
		if (my_control->count[i] > 0 &&
		    my_control->count[i] < z &&
		    map[my_control->key[i]] == SDL_PRESSED) {
			z = my_control->count[i];
			ret_key = i;
		}
	}

	return ret_key;
}

int control_get_key_action(control_t *my_control)
{
	Uint8 *map;

	assert(my_control != NULL);

	map = SDL_GetKeyState(NULL);

	if (map[my_control->key[CONTROL_SHOT]] == SDL_PRESSED) {
		return CONTROL_SHOT;
	}

	if (map[my_control->key[CONTROL_SWITCH]] == SDL_PRESSED) {
		return CONTROL_SWITCH;
	}

	return CONTROL_NONE;
}

void control_destroy(control_t *my_control)
{
	assert(my_control != NULL);

	free(my_control);
}